@c8y/ngx-components 1021.73.3 → 1021.73.6
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/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
- package/core/beta-feature/beta-preview.service.d.ts +1 -1
- package/core/beta-feature/beta-preview.service.d.ts.map +1 -1
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +4 -5
- package/esm2022/core/beta-feature/beta-preview.service.mjs +10 -6
- package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selector.component.mjs +3 -3
- package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +3 -3
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -4
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +9 -5
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +314 -41
- package/locales/es.po +315 -42
- package/locales/fr.po +315 -42
- package/locales/ja_JP.po +308 -47
- package/locales/ko.po +314 -42
- package/locales/locales.pot +5 -27
- package/locales/nl.po +312 -40
- package/locales/pl.po +315 -42
- package/locales/pt_BR.po +312 -39
- package/locales/zh_CN.po +312 -40
- package/locales/zh_TW.po +313 -42
- package/package.json +1 -1
|
@@ -230,7 +230,7 @@ export class DatapointsGraphWidgetViewComponent {
|
|
|
230
230
|
return form;
|
|
231
231
|
}
|
|
232
232
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsGraphWidgetViewComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TranslateService }, { token: i3.WidgetTimeContextDateRangeService }, { token: i4.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
233
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsGraphWidgetViewComponent, isStandalone: true, selector: "c8y-datapoints-graph-widget-view", inputs: { config: "config" }, providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chartComponent", first: true, predicate: ChartsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 active data points must be active.' | translate\"\n container=\"body\"\n *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"c8y-events\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.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: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "ngmodule", type: AlarmsModule }, { kind: "component", type: i8.AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: ["contextSourceId"], outputs: ["onFilterApplied"] }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }] }); }
|
|
233
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointsGraphWidgetViewComponent, isStandalone: true, selector: "c8y-datapoints-graph-widget-view", inputs: { config: "config" }, providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chartComponent", first: true, predicate: ChartsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"c8y-events\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.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: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "ngmodule", type: AlarmsModule }, { kind: "component", type: i8.AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: ["contextSourceId"], outputs: ["onFilterApplied"] }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }] }); }
|
|
234
234
|
}
|
|
235
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointsGraphWidgetViewComponent, decorators: [{
|
|
236
236
|
type: Component,
|
|
@@ -244,7 +244,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
244
244
|
PopoverModule,
|
|
245
245
|
AlarmsModule,
|
|
246
246
|
TimeContextComponent
|
|
247
|
-
], providers: [ChartEventsService, ChartAlarmsService], template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1
|
|
247
|
+
], providers: [ChartEventsService, ChartAlarmsService], template: "<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"!displayConfig?.widgetInstanceGlobalTimeContext\"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n </div>\n <div\n class=\"d-flex\"\n style=\"align-items: center\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"c8y-events\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n" }]
|
|
248
248
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TranslateService }, { type: i3.WidgetTimeContextDateRangeService }, { type: i4.ContextDashboardComponent, decorators: [{
|
|
249
249
|
type: Optional
|
|
250
250
|
}] }], propDecorators: { config: [{
|
|
@@ -253,4 +253,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
253
253
|
type: ViewChild,
|
|
254
254
|
args: [ChartsComponent]
|
|
255
255
|
}] } });
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLWdyYXBoL2RhdGFwb2ludHMtZ3JhcGgtdmlldy9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC12aWV3L2RhdGFwb2ludHMtZ3JhcGgtd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixVQUFVLEVBRVYsT0FBTyxFQUNQLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUNMLG1CQUFtQixFQUlwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFD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QzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBdlBVLGtDQUFrQzttR0FBbEMsa0NBQWtDLDZHQUZsQyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLDBFQTZCeEMsZUFBZSxxRUNoRzVCLHkxUkFxUUEsMkNENU1JLFVBQVUsOEJBQ1YsWUFBWSxtYkFDWixlQUFlLDJOQUNmLFVBQVUseUxBQ1YsYUFBYSxpa0JBQ2IsZ0JBQWdCLDhCQUNoQixhQUFhLDhWQUNiLFlBQVksZ0xBQ1osb0JBQW9COzs0RkFJWCxrQ0FBa0M7a0JBakI5QyxTQUFTOytCQUNFLGtDQUFrQyxjQUVoQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsVUFBVTt3QkFDVixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixZQUFZO3dCQUNaLG9CQUFvQjtxQkFDckIsYUFDVSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDOzswQkF3RGhELFFBQVE7eUNBbkNFLE1BQU07c0JBQWxCLEtBQUs7Z0JBUXNCLGNBQWM7c0JBQXpDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fSUNPTlMsXG4gIEFHR1JFR0FUSU9OX1RFWFRTLFxuICBDb3JlTW9kdWxlLFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBnZXR0ZXh0LFxuICBXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBTEFSTV9TVEFUVVNfTEFCRUxTLFxuICBBbGFybVN0YXR1c1R5cGUsXG4gIFNldmVyaXR5U2V0dGluZ3MsXG4gIGFnZ3JlZ2F0aW9uVHlwZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYXJ0c0NvbXBvbmVudCxcbiAgRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLFxuICBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMsXG4gIFNldmVyaXR5VHlwZSxcbiAgQWxhcm1EZXRhaWxzRXh0ZW5kZWQsXG4gIEFsYXJtT3JFdmVudEV4dGVuZGVkLFxuICBFdmVudERldGFpbHNFeHRlbmRlZCxcbiAgQ2hhcnRFdmVudHNTZXJ2aWNlLFxuICBDaGFydEFsYXJtc1NlcnZpY2UsXG4gIFRpbWVDb250ZXh0UHJvcHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY2hhcnQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7IEFsYXJtc01vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpbWVDb250ZXh0Q29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy90aW1lLWNvbnRleHQnO1xuaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtZ3JhcGgtd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQTExeU1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ2hhcnRzQ29tcG9uZW50LFxuICAgIENvcmVNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLFxuICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgQWxhcm1zTW9kdWxlLFxuICAgIFRpbWVDb250ZXh0Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0NoYXJ0RXZlbnRzU2VydmljZSwgQ2hhcnRBbGFybXNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzR3JhcGhXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBldmVudHM6IEV2ZW50RGV0YWlsc0V4dGVuZGVkW10gPSBbXTtcbiAgYWxhcm1zOiBBbGFybURldGFpbHNFeHRlbmRlZFtdID0gW107XG4gIEFHR1JFR0FUSU9OX0lDT05TID0gQUdHUkVHQVRJT05fSUNPTlM7XG4gIEFHR1JFR0FUSU9OX1RFWFRTID0gQUdHUkVHQVRJT05fVEVYVFM7XG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB8IHVuZGVmaW5lZDtcbiAgZGF0YXBvaW50c091dE9mU3luYyA9IG5ldyBNYXA8RGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscywgYm9vbGVhbj4oKTtcbiAgdGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGhhc0F0TGVhc3RPbmVEYXRhcG9pbnRBY3RpdmUgPSB0cnVlO1xuICBoYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSB0cnVlO1xuICB0aW1lQ29udHJvbHNGb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Vmlld0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGlzTWFya2VkQXJlYUVuYWJsZWQgPSBmYWxzZTtcbiAgbG9hZGVkRGF0YXBvaW50czogRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlsc1tdID0gW107XG4gIGxvYWRlZEFsYXJtc09yRXZlbnRzOiBBbGFybU9yRXZlbnRFeHRlbmRlZFtdID0gW107XG4gIC8qXG4gICAqIEBkZXNjcmlwdGlvbjogVGhlIHR5cGUgb2YgYWxhcm0gdGhhdCBoYXMgbWFya2VkIGFyZWEgZW5hYmxlZC5cbiAgICovXG4gIGVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0gY2xvbmVEZWVwKHZhbHVlKTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IG5ldmVyIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICdcImNvbmZpZ1wiIHByb3BlcnR5IHNob3VsZCBub3QgYmUgcmVmZXJlbmNlZCBpbiB2aWV3IGNvbXBvbmVudCB0byBhdm9pZCBtdXRhdGluZyBkYXRhLidcbiAgICApO1xuICB9XG4gIEBWaWV3Q2hpbGQoQ2hhcnRzQ29tcG9uZW50KSBjaGFydENvbXBvbmVudCE6IENoYXJ0c0NvbXBvbmVudDtcbiAgZGlzcGxheUNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnIHwgdW5kZWZpbmVkO1xuICBsZWdlbmRIZWxwID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICBnZXR0ZXh0KGA8dWwgY2xhc3M9XCJtLWwtMCBwLWwtOCBtLXQtOCBtLWItMFwiPlxuICAgIDxsaT5cbiAgICAgIDxiPlZpc2liaWxpdHk6PC9iPlxuICAgICAgdXNlIHZpc2liaWxpdHkgaWNvbiB0byB0b2dnbGUgZGF0YXBvaW50LCBhbGFybSBvciBldmVudCB2aXNpYmlsaXR5IG9uIGNoYXJ0LiBBdCBsZWFzdCBvbmUgZGF0YXBvaW50IGlzIHJlcXVpcmVkIHRvIGRpc3BsYXkgY2hhcnQuXG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8Yj5BbGFybSBkZXRhaWxzPC9iPlxuICAgICAgQ2xpY2sgYWxhcm0gbGVnZW5kIGl0ZW0gdG8gaGlnaGxpZ2h0IGFyZWEgYmV0d2VlbiBhbGFybSByYWlzZWQgdGltZXN0YW1wIGFuZCBhbGFybSBjbGVhcmVkIHRpbWVzdGFtcC5cbiAgICAgIFlvdSBjYW4gYWxzbyBjbGljayBhbGFybSBtYXJrbGluZSBvbiBjaGFydCB0byBoaWdobGlnaHQgYWxhcm0gYW5kIHRvIHBhdXNlIHRvb2x0aXAuIENsaWNrIG9uIGhpZ2hsaWdodGVkIGFyZWEgb3IgbGVnZW5kIGl0ZW0gdG8gY2FuY2VsIGhpZ2hsaWdodGluZy5cbiAgICA8L2xpPlxuICA8L3VsPmApXG4gICk7XG4gIHJlYWRvbmx5IGRpc2FibGVab29tSW5MYWJlbCA9IGdldHRleHQoJ0Rpc2FibGUgem9vbSBpbicpO1xuICByZWFkb25seSBlbmFibGVab29tSW5MYWJlbCA9IGdldHRleHQoXG4gICAgJ0NsaWNrIHRvIGVuYWJsZSB6b29tLCB0aGVuIGNsaWNrIGFuZCBkcmFnIG9uIHRoZSBkZXNpcmVkIGFyZWEgaW4gdGhlIGNoYXJ0LidcbiAgKTtcbiAgcmVhZG9ubHkgaGlkZURhdGFwb2ludExhYmVsID0gZ2V0dGV4dCgnSGlkZSBkYXRhIHBvaW50Jyk7XG4gIHJlYWRvbmx5IHNob3dEYXRhcG9pbnRMYWJlbCA9IGdldHRleHQoJ1Nob3cgZGF0YSBwb2ludCcpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZTogV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cCA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZywgLi4udmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0YXBvaW50cz8uZm9yRWFjaChkcCA9PiB0aGlzLmFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkcCkpO1xuICAgIGlmICh0aGlzLmRpc3BsYXlDb25maWcuZGF0ZUZyb20gJiYgdGhpcy5kaXNwbGF5Q29uZmlnLmRhdGVUbykge1xuICAgICAgdGhpcy50aW1lUHJvcHMgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVUbyksXG4gICAgICAgIGludGVydmFsOiB0aGlzLmRpc3BsYXlDb25maWc/LmludGVydmFsLFxuICAgICAgICByZWFsdGltZTogdGhpcy5kaXNwbGF5Q29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUgPyBudWxsIDogdGhpcy5kaXNwbGF5Q29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZWREYXRhcG9pbnRzID0gdGhpcy5kaXNwbGF5Q29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpIHx8IFtdO1xuICAgIHRoaXMubG9hZGVkQWxhcm1zT3JFdmVudHMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC5fX2FjdGl2ZSkgfHwgW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmRpc3BsYXlDb25maWcgfHwge30pO1xuICAgIGNvbnN0IGNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnID0gY2hhbmdlc1snY29uZmlnJ10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoY29uZmlnPy5kYXRlICYmIGNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCAmJiB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGUpIHtcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5Q29uZmlnLnNsaWRlckNoYW5nZSkge1xuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lUHJvcHNDaGFuZ2VkKHtcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRUb0RhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogdGhpcy5kaXNwbGF5Q29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmRpc3BsYXlDb25maWc/LmFnZ3JlZ2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0aW1lUHJvcHNDaGFuZ2VkKHRpbWVQcm9wczogVGltZUNvbnRleHRQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoVmFsdWVzID0ge1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpLFxuICAgICAgaW50ZXJ2YWw6IHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgIC4uLih0aW1lUHJvcHMuYWdncmVnYXRpb24gJiYgeyBhZ2dyZWdhdGlvbjogdGltZVByb3BzLmFnZ3JlZ2F0aW9uIH0pLFxuICAgICAgLi4uKHRpbWVQcm9wcy5yZWFsdGltZSAmJiB7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSlcbiAgICB9O1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUocGF0Y2hWYWx1ZXMpO1xuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQodGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5Q29uZmlnPy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5lbWl0UHJvcGVydHlVcGRhdGUodGltZVByb3BzKTtcbiAgICB9XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aW1lUHJvcHMpO1xuICAgIHRoaXMudGltZVByb3BzID0geyAuLi50aW1lUHJvcHMsIHJlYWx0aW1lOiBmYWxzZSB9O1xuICB9XG5cbiAgdXBkYXRlVGltZVJhbmdlT25SZWFsdGltZShcbiAgICB0aW1lUmFuZ2U6IFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVJhbmdlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICB0b2dnbGVDaGFydChkYXRhcG9pbnQ6IERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGFwb2ludHM/LmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSkubGVuZ3RoID09PSAxICYmXG4gICAgICBkYXRhcG9pbnQuX19hY3RpdmVcbiAgICApIHtcbiAgICAgIC8vIGF0IGxlYXN0IDEgZGF0YXBvaW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhcG9pbnQuX19hY3RpdmUgPSAhZGF0YXBvaW50Ll9fYWN0aXZlO1xuICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmxvYWRlZERhdGFwb2ludHMuZmluZChkcCA9PiBkcC5sYWJlbCA9PT0gZGF0YXBvaW50LmxhYmVsKSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhcG9pbnRzLnB1c2goZGF0YXBvaW50KTtcbiAgICAgIHRoaXMuZGlzcGxheUNvbmZpZyA9IHsgLi4udGhpcy5kaXNwbGF5Q29uZmlnIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhcnRDb21wb25lbnQudG9nZ2xlRGF0YXBvaW50U2VyaWVzVmlzaWJpbGl0eShkYXRhcG9pbnQpO1xuICB9XG5cbiAgaGFuZGxlRGF0YXBvaW50T3V0T2ZTeW5jKGRwT3V0T2ZTeW5jOiBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gKGRwOiBLUElEZXRhaWxzKSA9PiBkcC5fX3RhcmdldD8uaWQgKyBkcC5mcmFnbWVudCArIGRwLnNlcmllcztcbiAgICBjb25zdCBkcE1hdGNoID0gdGhpcy5kaXNwbGF5Q29uZmlnPy5kYXRhcG9pbnRzPy5maW5kKGRwID0+IGtleShkcCkgPT09IGtleShkcE91dE9mU3luYykpO1xuICAgIGlmICghZHBNYXRjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFwb2ludHNPdXRPZlN5bmMuc2V0KGRwTWF0Y2gsIHRydWUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VkQXJlYShhbGFybTogQWxhcm1EZXRhaWxzRXh0ZW5kZWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlID0gYWxhcm0uZmlsdGVycy50eXBlO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaXRlbVR5cGU6IGFsYXJtLmZpbHRlcnMudHlwZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jaGFydENvbXBvbmVudC5vbkNoYXJ0Q2xpY2socGFyYW1zKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtRXZlbnRUeXBlKGFsYXJtT3JFdmVudDogQWxhcm1PckV2ZW50RXh0ZW5kZWQpOiB2b2lkIHtcbiAgICBpZiAoYWxhcm1PckV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJykge1xuICAgICAgdGhpcy5hbGFybXMgPSB0aGlzLmFsYXJtcy5tYXAoYWxhcm0gPT4ge1xuICAgICAgICBpZiAoYWxhcm0uZmlsdGVycy50eXBlID09PSBhbGFybU9yRXZlbnQuZmlsdGVycy50eXBlKSB7XG4gICAgICAgICAgYWxhcm0uX19oaWRkZW4gPSAhYWxhcm0uX19oaWRkZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsYXJtO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMubWFwKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMudHlwZSA9PT0gYWxhcm1PckV2ZW50LmZpbHRlcnMudHlwZSkge1xuICAgICAgICAgIGV2ZW50Ll9faGlkZGVuID0gIWV2ZW50Ll9faGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubG9hZGVkQWxhcm1zT3JFdmVudHMuZmluZChhT3JFID0+IGFPckUuZmlsdGVycy50eXBlID09PSBhbGFybU9yRXZlbnQuZmlsdGVycy50eXBlKSkge1xuICAgICAgdGhpcy5sb2FkZWRBbGFybXNPckV2ZW50cy5wdXNoKGFsYXJtT3JFdmVudCk7XG4gICAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZyB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYXJ0Q29tcG9uZW50LnRvZ2dsZUFsYXJtRXZlbnRTZXJpZXNWaXNpYmlsaXR5KGFsYXJtT3JFdmVudCk7XG4gIH1cblxuICB1cGRhdGVBbGFybXNBbmRFdmVudHMoYWxhcm1zRXZlbnRzQ29uZmlnczogQWxhcm1PckV2ZW50RXh0ZW5kZWRbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1zID0gYWxhcm1zRXZlbnRzQ29uZmlncy5maWx0ZXIoXG4gICAgICBhbGFybSA9PiBhbGFybS50aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICApIGFzIEFsYXJtRGV0YWlsc0V4dGVuZGVkW107XG4gICAgdGhpcy5ldmVudHMgPSBhbGFybXNFdmVudHNDb25maWdzLmZpbHRlcihcbiAgICAgIGV2ZW50ID0+IGV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICkgYXMgRXZlbnREZXRhaWxzRXh0ZW5kZWRbXTtcbiAgICBpZiAodGhpcy5hbGFybXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmFsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLl9fYWN0aXZlKSkge1xuICAgICAgdGhpcy5oYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTZXZlcml0eShldmVudFRhcmdldDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hbGFybXMgPSB0aGlzLmFsYXJtcy5tYXAoYWxhcm0gPT4ge1xuICAgICAgaWYgKCFhbGFybS5fX3NldmVyaXR5KSB7XG4gICAgICAgIGFsYXJtLl9fc2V2ZXJpdHkgPSBbXTtcbiAgICAgIH1cbiAgICAgIGFsYXJtLl9fc2V2ZXJpdHkgPSBPYmplY3Qua2V5cyhldmVudFRhcmdldC5zZXZlcml0eU9wdGlvbnMpLmZpbHRlcihcbiAgICAgICAgKHNldmVyaXR5KTogc2V2ZXJpdHkgaXMga2V5b2YgU2V2ZXJpdHlTZXR0aW5ncyA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0LnNldmVyaXR5T3B0aW9uc1tzZXZlcml0eSBhcyBrZXlvZiBTZXZlcml0eVNldHRpbmdzXVxuICAgICAgKSBhcyBTZXZlcml0eVR5cGVbXTtcblxuICAgICAgaWYgKCFhbGFybS5fX3N0YXR1cykge1xuICAgICAgICBhbGFybS5fX3N0YXR1cyA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdHVzZXMgPSBPYmplY3Qua2V5cyhBTEFSTV9TVEFUVVNfTEFCRUxTKSBhcyBBbGFybVN0YXR1c1R5cGVbXTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkU3RhdHVzZXMgPSBldmVudFRhcmdldC5zaG93Q2xlYXJlZFxuICAgICAgICA/IHN0YXR1c2VzXG4gICAgICAgIDogc3RhdHVzZXMuZmlsdGVyKHN0YXR1cyA9PiBzdGF0dXMgIT09ICdDTEVBUkVEJyk7XG4gICAgICBhbGFybS5fX3N0YXR1cyA9IGZpbHRlcmVkU3RhdHVzZXM7XG4gICAgICByZXR1cm4gYWxhcm07XG4gICAgfSk7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0geyAuLi50aGlzLmRpc3BsYXlDb25maWcgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRhdGFwb2ludDogS1BJRGV0YWlscykge1xuICAgIGlmICghdGhpcy5kYXNoYm9hcmRDb250ZXh0Q29tcG9uZW50Py5pc0RldmljZVR5cGVEYXNoYm9hcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBkYXRlRnJvbTogW3VuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBkYXRlVG86IFt1bmRlZmluZWQgYXMgdW5rbm93biBhcyBEYXRlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW50ZXJ2YWw6IFtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlnPy5pbnRlcnZhbCB8fCAoJ2hvdXJzJyBhcyBJbnRlcnZhbFsnaWQnXSksXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgXSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBbbnVsbCBhcyBhZ2dyZWdhdGlvblR5cGUgfCBudWxsLCBbXV0sXG4gICAgICByZWFsdGltZTogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dDogW2ZhbHNlLCBbXV1cbiAgICB9KTtcbiAgICBmb3JtLnBhdGNoVmFsdWUodGhpcy5kaXNwbGF5Q29uZmlnIHx8IHt9KTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTZcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgYS1pLXN0YXJ0XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICpuZ0lmPVwiIWRpc3BsYXlDb25maWc/LndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHRcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dyZWdhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0b29sdGlwPVwie3tcbiAgICAgICAgICAoZGlzcGxheUNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgICAgICAgID8gQUdHUkVHQVRJT05fVEVYVFNbZGlzcGxheUNvbmZpZy5hZ2dyZWdhdGlvbl1cbiAgICAgICAgICAgIDogQUdHUkVHQVRJT05fVEVYVFMudW5kZWZpbmVkXG4gICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgIFtjOHlJY29uXT1cIlxuICAgICAgICAgICAgZGlzcGxheUNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgICAgICAgICAgPyBBR0dSRUdBVElPTl9JQ09OU1tkaXNwbGF5Q29uZmlnLmFnZ3JlZ2F0aW9uXVxuICAgICAgICAgICAgICA6IEFHR1JFR0FUSU9OX0lDT05TLnVuZGVmaW5lZFxuICAgICAgICAgIFwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGM4eS10aW1lLWNvbnRleHRcbiAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgKGNvbnRleHRDaGFuZ2UpPVwidGltZVByb3BzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2NoYW5nZWREYXRlQ29udGV4dF09XCJ0aW1lUHJvcHNcIlxuICAgICAgICBbY29udHJvbHNBdmFpbGFibGVdPVwie1xuICAgICAgICAgIHJlYWx0aW1lOiB0cnVlLFxuICAgICAgICAgIHRpbWVSYW5nZTogZGlzcGxheUNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgaW50ZXJ2YWw6IGRpc3BsYXlDb25maWc/LmRpc3BsYXlEYXRlU2VsZWN0aW9uLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiBkaXNwbGF5Q29uZmlnPy5kaXNwbGF5QWdncmVnYXRpb25TZWxlY3Rpb25cbiAgICAgICAgfVwiXG4gICAgICA+PC9jOHktdGltZS1jb250ZXh0PlxuICAgIDwvZGl2PlxuICAgIDxjOHktYWxhcm1zLWZpbHRlclxuICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzIGZvcm0tZ3JvdXAtc21cIlxuICAgICAgKm5nSWY9XCJoYXNBdExlYXN0T25lQWxhcm1BY3RpdmVcIlxuICAgICAgKGZpbHRlckFwcGxpZWQpPVwiZmlsdGVyU2V2ZXJpdHkoJGV2ZW50KVwiXG4gICAgPjwvYzh5LWFsYXJtcy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBmbGV4LW5vLXNocmlua1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NhdmUgYXMgaW1hZ2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgdG9vbHRpcD1cInt7ICdTYXZlIGFzIGltYWdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNoYXJ0LnNhdmVBc0ltYWdlKClcIlxuICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgICBjOHlJY29uPVwiaW1hZ2UtZmlsZS1jaGVja2VkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXJcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc20gbS1yLThcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3BvcG92ZXJdPVwibGVnZW5kSGVscFRlbXBsYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgID48L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93IHAtdC04IGQtZmxleCBhLWktc3RhcnQgZ2FwLTggcC1iLTRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICAgICB0aXRsZT1cInt7IGRhdGFwb2ludC5sYWJlbCB9fSAtIHt7IGRhdGFwb2ludC5fX3RhcmdldC5uYW1lIH19XCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YXBvaW50IG9mIGRpc3BsYXlDb25maWcuZGF0YXBvaW50c1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGRhdGFwb2ludC5fX2FjdGl2ZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBtLWwtNFwiXG4gICAgICAgICAgICBjOHlJY29uPVwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ0F0IGxlYXN0IDEgYWN0aXZlIGRhdGEgcG9pbnRzIG11c3QgYmUgYWN0aXZlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAqbmdJZj1cIiFoYXNBdExlYXN0T25lRGF0YXBvaW50QWN0aXZlICYmIGRhdGFwb2ludC5fX2FjdGl2ZVwiXG4gICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fYnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgKGRhdGFwb2ludC5fX2FjdGl2ZSA/IGhpZGVEYXRhcG9pbnRMYWJlbCA6IHNob3dEYXRhcG9pbnRMYWJlbCkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19IFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDaGFydChkYXRhcG9pbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgICBbYzh5SWNvbl09XCJkYXRhcG9pbnQuX19hY3RpdmUgPyAnZXllIHRleHQtcHJpbWFyeScgOiAnZXllLXNsYXNoIHRleHQtbXV0ZWQnXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWwgYzh5LWRhdGFwb2ludC1waWxsX19idG5cIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwibS1yLTQgaWNvbi0xNFwiXG4gICAgICAgICAgICAgIGM4eUljb249XCJjaXJjbGVcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgY29sb3I6IGRhdGFwb2ludC5jb2xvclxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LW11dGVkJzogIWRhdGFwb2ludC5fX2FjdGl2ZSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAge3sgZGF0YXBvaW50LmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCB0ZXh0LTEwXCI+XG4gICAgICAgICAgICAgICAge3sgZGF0YXBvaW50Ll9fdGFyZ2V0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13YXJuaW5nIG0tbC00XCJcbiAgICAgICAgICAgICAgYzh5SWNvbj1cImV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ01lYXN1cmVtZW50cyByZWNlaXZlZCBmb3IgdGhpcyBkYXRhIHBvaW50IG1heSBiZSBvdXQgb2Ygc3luYy4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGFwb2ludHNPdXRPZlN5bmMuZ2V0KGRhdGFwb2ludClcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBBbGFybXMgIC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFsYXJtIG9mIGFsYXJtc1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWFsYXJtLXBpbGwgZmxleC1uby1zaHJpbmtcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBhbGFybS5maWx0ZXJzLnR5cGUgfX0gXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYWxhcm0uX19hY3RpdmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC13YXJuaW5nIG0tbC00XCJcbiAgICAgICAgICAgICAgYzh5SWNvbj1cImV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0FsYXJtIG9mIHRoaXMgdHlwZSBpcyBjdXJyZW50bHkgYWN0aXZlIGFuZCBvdXRzaWRlIG9mIHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlJ1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheUNvbmZpZz8uYWN0aXZlQWxhcm1UeXBlc091dE9mUmFuZ2U/LmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1hbGFybS1waWxsX19idG5cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7IGFsYXJtLmZpbHRlcnMudHlwZSB9fSBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsYXJtRXZlbnRUeXBlKGFsYXJtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgICAgICAgICBbYzh5SWNvbl09XCJhbGFybS5fX2hpZGRlbiA/ICdleWUtc2xhc2ggdGV4dC1tdXRlZCcgOiAnZXllIHRleHQtcHJpbWFyeSdcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LWFsYXJtLXBpbGxfX2xhYmVsIGM4eS1hbGFybS1waWxsX19idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWFya2VkQXJlYShhbGFybSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgYWN0aXZlOiAhaXNNYXJrZWRBcmVhRW5hYmxlZCAmJiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IGVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2lyY2xlLWljb24td3JhcHBlciBjaXJjbGUtaWNvbi13cmFwcGVyLS1zbWFsbCBtLXItNFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYWxhcm0uY29sb3JcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIGM4eUljb249XCJiZWxsXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LW11dGVkJzogYWxhcm0uX19oaWRkZW4gfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGFsYXJtLmZpbHRlcnMudHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGFsYXJtLl9fdGFyZ2V0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBFdmVudHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGV2ZW50IG9mIGV2ZW50c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWV2ZW50LXBpbGwgZmxleC1uby1zaHJpbmtcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBldmVudC5maWx0ZXJzLnR5cGUgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJldmVudC5fX2FjdGl2ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1ldmVudC1waWxsX19idG5cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7IGV2ZW50LmZpbHRlcnMudHlwZSB9fSBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsYXJtRXZlbnRUeXBlKGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgICAgICAgICBbYzh5SWNvbl09XCJldmVudC5fX2hpZGRlbiA/ICdleWUtc2xhc2ggdGV4dC1tdXRlZCcgOiAnZXllIHRleHQtcHJpbWFyeSdcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWV2ZW50LXBpbGxfX2xhYmVsIGM4eS1ldmVudC1waWxsX19idG5cIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBldmVudC5jb2xvciB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwiYzh5LWV2ZW50c1wiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1tdXRlZCc6IGV2ZW50Ll9faGlkZGVuIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBldmVudC5maWx0ZXJzLnR5cGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCB0ZXh0LTEwXCI+XG4gICAgICAgICAgICAgICAgICB7eyBldmVudC5fX3RhcmdldC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjOHktY2hhcnRzXG4gICNjaGFydFxuICBbY29uZmlnXT1cImRpc3BsYXlDb25maWdcIlxuICBbYWxlcnRzXT1cImFsZXJ0c1wiXG4gICh1cGRhdGVBbGFybXNBbmRFdmVudHMpPVwidXBkYXRlQWxhcm1zQW5kRXZlbnRzKCRldmVudClcIlxuICAoY29uZmlnQ2hhbmdlT25ab29tT3V0KT1cInVwZGF0ZURhc2hib2FyZFRpbWVDb250ZXh0KCRldmVudClcIlxuICAoZGF0YXBvaW50T3V0T2ZTeW5jKT1cImhhbmRsZURhdGFwb2ludE91dE9mU3luYygkZXZlbnQpXCJcbiAgKHRpbWVSYW5nZUNoYW5nZU9uUmVhbHRpbWUpPVwidXBkYXRlVGltZVJhbmdlT25SZWFsdGltZSgkZXZlbnQpXCJcbiAgKGlzTWFya2VkQXJlYUVuYWJsZWQpPVwiaXNNYXJrZWRBcmVhRW5hYmxlZCA9ICRldmVudFwiXG4+PC9jOHktY2hhcnRzPlxuXG48bmctdGVtcGxhdGUgI2xlZ2VuZEhlbHBUZW1wbGF0ZT5cbiAgPGRpdiBbaW5uZXJIVE1MXT1cImxlZ2VuZEhlbHBcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1ncmFwaC13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLWdyYXBoL2RhdGFwb2ludHMtZ3JhcGgtdmlldy9kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtZ3JhcGgvZGF0YXBvaW50cy1ncmFwaC12aWV3L2RhdGFwb2ludHMtZ3JhcGgtd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixVQUFVLEVBRVYsT0FBTyxFQUNQLGlDQUFpQyxFQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUNMLG1CQUFtQixFQUlwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFD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QzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBdlBVLGtDQUFrQzttR0FBbEMsa0NBQWtDLDZHQUZsQyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLDBFQTZCeEMsZUFBZSxxRUNoRzVCLGkxUkFxUUEsMkNENU1JLFVBQVUsOEJBQ1YsWUFBWSxtYkFDWixlQUFlLDJOQUNmLFVBQVUseUxBQ1YsYUFBYSxpa0JBQ2IsZ0JBQWdCLDhCQUNoQixhQUFhLDhWQUNiLFlBQVksZ0xBQ1osb0JBQW9COzs0RkFJWCxrQ0FBa0M7a0JBakI5QyxTQUFTOytCQUNFLGtDQUFrQyxjQUVoQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsVUFBVTt3QkFDVixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixZQUFZO3dCQUNaLG9CQUFvQjtxQkFDckIsYUFDVSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDOzswQkF3RGhELFFBQVE7eUNBbkNFLE1BQU07c0JBQWxCLEtBQUs7Z0JBUXNCLGNBQWM7c0JBQXpDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fSUNPTlMsXG4gIEFHR1JFR0FUSU9OX1RFWFRTLFxuICBDb3JlTW9kdWxlLFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBnZXR0ZXh0LFxuICBXaWRnZXRUaW1lQ29udGV4dERhdGVSYW5nZVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBTEFSTV9TVEFUVVNfTEFCRUxTLFxuICBBbGFybVN0YXR1c1R5cGUsXG4gIFNldmVyaXR5U2V0dGluZ3MsXG4gIGFnZ3JlZ2F0aW9uVHlwZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYXJ0c0NvbXBvbmVudCxcbiAgRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLFxuICBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMsXG4gIFNldmVyaXR5VHlwZSxcbiAgQWxhcm1EZXRhaWxzRXh0ZW5kZWQsXG4gIEFsYXJtT3JFdmVudEV4dGVuZGVkLFxuICBFdmVudERldGFpbHNFeHRlbmRlZCxcbiAgQ2hhcnRFdmVudHNTZXJ2aWNlLFxuICBDaGFydEFsYXJtc1NlcnZpY2UsXG4gIFRpbWVDb250ZXh0UHJvcHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY2hhcnQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7IEFsYXJtc01vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpbWVDb250ZXh0Q29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy90aW1lLWNvbnRleHQnO1xuaW1wb3J0IHsgSW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWdyYXBoLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtZ3JhcGgtd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQTExeU1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ2hhcnRzQ29tcG9uZW50LFxuICAgIENvcmVNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLFxuICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgQWxhcm1zTW9kdWxlLFxuICAgIFRpbWVDb250ZXh0Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0NoYXJ0RXZlbnRzU2VydmljZSwgQ2hhcnRBbGFybXNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzR3JhcGhXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBldmVudHM6IEV2ZW50RGV0YWlsc0V4dGVuZGVkW10gPSBbXTtcbiAgYWxhcm1zOiBBbGFybURldGFpbHNFeHRlbmRlZFtdID0gW107XG4gIEFHR1JFR0FUSU9OX0lDT05TID0gQUdHUkVHQVRJT05fSUNPTlM7XG4gIEFHR1JFR0FUSU9OX1RFWFRTID0gQUdHUkVHQVRJT05fVEVYVFM7XG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvciB8IHVuZGVmaW5lZDtcbiAgZGF0YXBvaW50c091dE9mU3luYyA9IG5ldyBNYXA8RGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscywgYm9vbGVhbj4oKTtcbiAgdGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMgfCB1bmRlZmluZWQ7XG4gIGhhc0F0TGVhc3RPbmVEYXRhcG9pbnRBY3RpdmUgPSB0cnVlO1xuICBoYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSB0cnVlO1xuICB0aW1lQ29udHJvbHNGb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Vmlld0NvbXBvbmVudFsnaW5pdEZvcm0nXT47XG4gIGlzTWFya2VkQXJlYUVuYWJsZWQgPSBmYWxzZTtcbiAgbG9hZGVkRGF0YXBvaW50czogRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlsc1tdID0gW107XG4gIGxvYWRlZEFsYXJtc09yRXZlbnRzOiBBbGFybU9yRXZlbnRFeHRlbmRlZFtdID0gW107XG4gIC8qXG4gICAqIEBkZXNjcmlwdGlvbjogVGhlIHR5cGUgb2YgYWxhcm0gdGhhdCBoYXMgbWFya2VkIGFyZWEgZW5hYmxlZC5cbiAgICovXG4gIGVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0gY2xvbmVEZWVwKHZhbHVlKTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IG5ldmVyIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICdcImNvbmZpZ1wiIHByb3BlcnR5IHNob3VsZCBub3QgYmUgcmVmZXJlbmNlZCBpbiB2aWV3IGNvbXBvbmVudCB0byBhdm9pZCBtdXRhdGluZyBkYXRhLidcbiAgICApO1xuICB9XG4gIEBWaWV3Q2hpbGQoQ2hhcnRzQ29tcG9uZW50KSBjaGFydENvbXBvbmVudCE6IENoYXJ0c0NvbXBvbmVudDtcbiAgZGlzcGxheUNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnIHwgdW5kZWZpbmVkO1xuICBsZWdlbmRIZWxwID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICBnZXR0ZXh0KGA8dWwgY2xhc3M9XCJtLWwtMCBwLWwtOCBtLXQtOCBtLWItMFwiPlxuICAgIDxsaT5cbiAgICAgIDxiPlZpc2liaWxpdHk6PC9iPlxuICAgICAgdXNlIHZpc2liaWxpdHkgaWNvbiB0byB0b2dnbGUgZGF0YXBvaW50LCBhbGFybSBvciBldmVudCB2aXNpYmlsaXR5IG9uIGNoYXJ0LiBBdCBsZWFzdCBvbmUgZGF0YXBvaW50IGlzIHJlcXVpcmVkIHRvIGRpc3BsYXkgY2hhcnQuXG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8Yj5BbGFybSBkZXRhaWxzPC9iPlxuICAgICAgQ2xpY2sgYWxhcm0gbGVnZW5kIGl0ZW0gdG8gaGlnaGxpZ2h0IGFyZWEgYmV0d2VlbiBhbGFybSByYWlzZWQgdGltZXN0YW1wIGFuZCBhbGFybSBjbGVhcmVkIHRpbWVzdGFtcC5cbiAgICAgIFlvdSBjYW4gYWxzbyBjbGljayBhbGFybSBtYXJrbGluZSBvbiBjaGFydCB0byBoaWdobGlnaHQgYWxhcm0gYW5kIHRvIHBhdXNlIHRvb2x0aXAuIENsaWNrIG9uIGhpZ2hsaWdodGVkIGFyZWEgb3IgbGVnZW5kIGl0ZW0gdG8gY2FuY2VsIGhpZ2hsaWdodGluZy5cbiAgICA8L2xpPlxuICA8L3VsPmApXG4gICk7XG4gIHJlYWRvbmx5IGRpc2FibGVab29tSW5MYWJlbCA9IGdldHRleHQoJ0Rpc2FibGUgem9vbSBpbicpO1xuICByZWFkb25seSBlbmFibGVab29tSW5MYWJlbCA9IGdldHRleHQoXG4gICAgJ0NsaWNrIHRvIGVuYWJsZSB6b29tLCB0aGVuIGNsaWNrIGFuZCBkcmFnIG9uIHRoZSBkZXNpcmVkIGFyZWEgaW4gdGhlIGNoYXJ0LidcbiAgKTtcbiAgcmVhZG9ubHkgaGlkZURhdGFwb2ludExhYmVsID0gZ2V0dGV4dCgnSGlkZSBkYXRhIHBvaW50Jyk7XG4gIHJlYWRvbmx5IHNob3dEYXRhcG9pbnRMYWJlbCA9IGdldHRleHQoJ1Nob3cgZGF0YSBwb2ludCcpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZTogV2lkZ2V0VGltZUNvbnRleHREYXRlUmFuZ2VTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cCA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLnRpbWVDb250cm9sc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZywgLi4udmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0YXBvaW50cz8uZm9yRWFjaChkcCA9PiB0aGlzLmFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkcCkpO1xuICAgIGlmICh0aGlzLmRpc3BsYXlDb25maWcuZGF0ZUZyb20gJiYgdGhpcy5kaXNwbGF5Q29uZmlnLmRhdGVUbykge1xuICAgICAgdGhpcy50aW1lUHJvcHMgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlDb25maWc/LmRhdGVUbyksXG4gICAgICAgIGludGVydmFsOiB0aGlzLmRpc3BsYXlDb25maWc/LmludGVydmFsLFxuICAgICAgICByZWFsdGltZTogdGhpcy5kaXNwbGF5Q29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUgPyBudWxsIDogdGhpcy5kaXNwbGF5Q29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZWREYXRhcG9pbnRzID0gdGhpcy5kaXNwbGF5Q29uZmlnPy5kYXRhcG9pbnRzPy5maWx0ZXIoZHAgPT4gZHAuX19hY3RpdmUpIHx8IFtdO1xuICAgIHRoaXMubG9hZGVkQWxhcm1zT3JFdmVudHMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlnPy5hbGFybXNFdmVudHNDb25maWdzPy5maWx0ZXIoYWxhcm1PckV2ZW50ID0+IGFsYXJtT3JFdmVudC5fX2FjdGl2ZSkgfHwgW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmRpc3BsYXlDb25maWcgfHwge30pO1xuICAgIGNvbnN0IGNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnID0gY2hhbmdlc1snY29uZmlnJ10/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoY29uZmlnPy5kYXRlICYmIGNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCAmJiB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGUpIHtcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5Q29uZmlnLnNsaWRlckNoYW5nZSkge1xuICAgICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS51cGRhdGVJbml0aWFsVGltZVJhbmdlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lUHJvcHNDaGFuZ2VkKHtcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRUb0RhdGU6IHRoaXMuZGlzcGxheUNvbmZpZz8uZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogdGhpcy5kaXNwbGF5Q29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IHRoaXMuZGlzcGxheUNvbmZpZz8ucmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmRpc3BsYXlDb25maWc/LmFnZ3JlZ2F0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0aW1lUHJvcHNDaGFuZ2VkKHRpbWVQcm9wczogVGltZUNvbnRleHRQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGNoVmFsdWVzID0ge1xuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUpLFxuICAgICAgaW50ZXJ2YWw6IHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgIC4uLih0aW1lUHJvcHMuYWdncmVnYXRpb24gJiYgeyBhZ2dyZWdhdGlvbjogdGltZVByb3BzLmFnZ3JlZ2F0aW9uIH0pLFxuICAgICAgLi4uKHRpbWVQcm9wcy5yZWFsdGltZSAmJiB7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSlcbiAgICB9O1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUocGF0Y2hWYWx1ZXMpO1xuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkVGltZUNvbnRleHQodGltZVByb3BzOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRUaW1lUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5Q29uZmlnPy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLndpZGdldFRpbWVDb250ZXh0RGF0ZVJhbmdlU2VydmljZS5lbWl0UHJvcGVydHlVcGRhdGUodGltZVByb3BzKTtcbiAgICB9XG4gICAgdGhpcy50aW1lQ29udHJvbHNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aW1lUHJvcHMpO1xuICAgIHRoaXMudGltZVByb3BzID0geyAuLi50aW1lUHJvcHMsIHJlYWx0aW1lOiBmYWxzZSB9O1xuICB9XG5cbiAgdXBkYXRlVGltZVJhbmdlT25SZWFsdGltZShcbiAgICB0aW1lUmFuZ2U6IFBpY2s8RGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLCAnZGF0ZUZyb20nIHwgJ2RhdGVUbyc+XG4gICk6IHZvaWQge1xuICAgIHRoaXMudGltZUNvbnRyb2xzRm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVJhbmdlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICB0b2dnbGVDaGFydChkYXRhcG9pbnQ6IERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRpc3BsYXlDb25maWc/LmRhdGFwb2ludHM/LmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSkubGVuZ3RoID09PSAxICYmXG4gICAgICBkYXRhcG9pbnQuX19hY3RpdmVcbiAgICApIHtcbiAgICAgIC8vIGF0IGxlYXN0IDEgZGF0YXBvaW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhcG9pbnQuX19hY3RpdmUgPSAhZGF0YXBvaW50Ll9fYWN0aXZlO1xuICAgIHRoaXMuaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmxvYWRlZERhdGFwb2ludHMuZmluZChkcCA9PiBkcC5sYWJlbCA9PT0gZGF0YXBvaW50LmxhYmVsKSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhcG9pbnRzLnB1c2goZGF0YXBvaW50KTtcbiAgICAgIHRoaXMuZGlzcGxheUNvbmZpZyA9IHsgLi4udGhpcy5kaXNwbGF5Q29uZmlnIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhcnRDb21wb25lbnQudG9nZ2xlRGF0YXBvaW50U2VyaWVzVmlzaWJpbGl0eShkYXRhcG9pbnQpO1xuICB9XG5cbiAgaGFuZGxlRGF0YXBvaW50T3V0T2ZTeW5jKGRwT3V0T2ZTeW5jOiBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gKGRwOiBLUElEZXRhaWxzKSA9PiBkcC5fX3RhcmdldD8uaWQgKyBkcC5mcmFnbWVudCArIGRwLnNlcmllcztcbiAgICBjb25zdCBkcE1hdGNoID0gdGhpcy5kaXNwbGF5Q29uZmlnPy5kYXRhcG9pbnRzPy5maW5kKGRwID0+IGtleShkcCkgPT09IGtleShkcE91dE9mU3luYykpO1xuICAgIGlmICghZHBNYXRjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFwb2ludHNPdXRPZlN5bmMuc2V0KGRwTWF0Y2gsIHRydWUpO1xuICB9XG5cbiAgdG9nZ2xlTWFya2VkQXJlYShhbGFybTogQWxhcm1EZXRhaWxzRXh0ZW5kZWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZWRNYXJrZWRBcmVhQWxhcm1UeXBlID0gYWxhcm0uZmlsdGVycy50eXBlO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaXRlbVR5cGU6IGFsYXJtLmZpbHRlcnMudHlwZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jaGFydENvbXBvbmVudC5vbkNoYXJ0Q2xpY2socGFyYW1zKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtRXZlbnRUeXBlKGFsYXJtT3JFdmVudDogQWxhcm1PckV2ZW50RXh0ZW5kZWQpOiB2b2lkIHtcbiAgICBpZiAoYWxhcm1PckV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJykge1xuICAgICAgdGhpcy5hbGFybXMgPSB0aGlzLmFsYXJtcy5tYXAoYWxhcm0gPT4ge1xuICAgICAgICBpZiAoYWxhcm0uZmlsdGVycy50eXBlID09PSBhbGFybU9yRXZlbnQuZmlsdGVycy50eXBlKSB7XG4gICAgICAgICAgYWxhcm0uX19oaWRkZW4gPSAhYWxhcm0uX19oaWRkZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsYXJtO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMubWFwKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnMudHlwZSA9PT0gYWxhcm1PckV2ZW50LmZpbHRlcnMudHlwZSkge1xuICAgICAgICAgIGV2ZW50Ll9faGlkZGVuID0gIWV2ZW50Ll9faGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubG9hZGVkQWxhcm1zT3JFdmVudHMuZmluZChhT3JFID0+IGFPckUuZmlsdGVycy50eXBlID09PSBhbGFybU9yRXZlbnQuZmlsdGVycy50eXBlKSkge1xuICAgICAgdGhpcy5sb2FkZWRBbGFybXNPckV2ZW50cy5wdXNoKGFsYXJtT3JFdmVudCk7XG4gICAgICB0aGlzLmRpc3BsYXlDb25maWcgPSB7IC4uLnRoaXMuZGlzcGxheUNvbmZpZyB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYXJ0Q29tcG9uZW50LnRvZ2dsZUFsYXJtRXZlbnRTZXJpZXNWaXNpYmlsaXR5KGFsYXJtT3JFdmVudCk7XG4gIH1cblxuICB1cGRhdGVBbGFybXNBbmRFdmVudHMoYWxhcm1zRXZlbnRzQ29uZmlnczogQWxhcm1PckV2ZW50RXh0ZW5kZWRbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1zID0gYWxhcm1zRXZlbnRzQ29uZmlncy5maWx0ZXIoXG4gICAgICBhbGFybSA9PiBhbGFybS50aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICApIGFzIEFsYXJtRGV0YWlsc0V4dGVuZGVkW107XG4gICAgdGhpcy5ldmVudHMgPSBhbGFybXNFdmVudHNDb25maWdzLmZpbHRlcihcbiAgICAgIGV2ZW50ID0+IGV2ZW50LnRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICkgYXMgRXZlbnREZXRhaWxzRXh0ZW5kZWRbXTtcbiAgICBpZiAodGhpcy5hbGFybXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLmFsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLl9fYWN0aXZlKSkge1xuICAgICAgdGhpcy5oYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTZXZlcml0eShldmVudFRhcmdldDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hbGFybXMgPSB0aGlzLmFsYXJtcy5tYXAoYWxhcm0gPT4ge1xuICAgICAgaWYgKCFhbGFybS5fX3NldmVyaXR5KSB7XG4gICAgICAgIGFsYXJtLl9fc2V2ZXJpdHkgPSBbXTtcbiAgICAgIH1cbiAgICAgIGFsYXJtLl9fc2V2ZXJpdHkgPSBPYmplY3Qua2V5cyhldmVudFRhcmdldC5zZXZlcml0eU9wdGlvbnMpLmZpbHRlcihcbiAgICAgICAgKHNldmVyaXR5KTogc2V2ZXJpdHkgaXMga2V5b2YgU2V2ZXJpdHlTZXR0aW5ncyA9PlxuICAgICAgICAgIGV2ZW50VGFyZ2V0LnNldmVyaXR5T3B0aW9uc1tzZXZlcml0eSBhcyBrZXlvZiBTZXZlcml0eVNldHRpbmdzXVxuICAgICAgKSBhcyBTZXZlcml0eVR5cGVbXTtcblxuICAgICAgaWYgKCFhbGFybS5fX3N0YXR1cykge1xuICAgICAgICBhbGFybS5fX3N0YXR1cyA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdHVzZXMgPSBPYmplY3Qua2V5cyhBTEFSTV9TVEFUVVNfTEFCRUxTKSBhcyBBbGFybVN0YXR1c1R5cGVbXTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkU3RhdHVzZXMgPSBldmVudFRhcmdldC5zaG93Q2xlYXJlZFxuICAgICAgICA/IHN0YXR1c2VzXG4gICAgICAgIDogc3RhdHVzZXMuZmlsdGVyKHN0YXR1cyA9PiBzdGF0dXMgIT09ICdDTEVBUkVEJyk7XG4gICAgICBhbGFybS5fX3N0YXR1cyA9IGZpbHRlcmVkU3RhdHVzZXM7XG4gICAgICByZXR1cm4gYWxhcm07XG4gICAgfSk7XG4gICAgdGhpcy5kaXNwbGF5Q29uZmlnID0geyAuLi50aGlzLmRpc3BsYXlDb25maWcgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRhdGFwb2ludDogS1BJRGV0YWlscykge1xuICAgIGlmICghdGhpcy5kYXNoYm9hcmRDb250ZXh0Q29tcG9uZW50Py5pc0RldmljZVR5cGVEYXNoYm9hcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBkYXRlRnJvbTogW3VuZGVmaW5lZCBhcyB1bmtub3duIGFzIERhdGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBkYXRlVG86IFt1bmRlZmluZWQgYXMgdW5rbm93biBhcyBEYXRlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW50ZXJ2YWw6IFtcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlnPy5pbnRlcnZhbCB8fCAoJ2hvdXJzJyBhcyBJbnRlcnZhbFsnaWQnXSksXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgXSxcbiAgICAgIGFnZ3JlZ2F0aW9uOiBbbnVsbCBhcyBhZ2dyZWdhdGlvblR5cGUgfCBudWxsLCBbXV0sXG4gICAgICByZWFsdGltZTogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dDogW2ZhbHNlLCBbXV1cbiAgICB9KTtcbiAgICBmb3JtLnBhdGNoVmFsdWUodGhpcy5kaXNwbGF5Q29uZmlnIHx8IHt9KTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTZcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgYS1pLXN0YXJ0XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICpuZ0lmPVwiIWRpc3BsYXlDb25maWc/LndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHRcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dyZWdhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0b29sdGlwPVwie3tcbiAgICAgICAgICAoZGlzcGxheUNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgICAgICAgID8gQUdHUkVHQVRJT05fVEVYVFNbZGlzcGxheUNvbmZpZy5hZ2dyZWdhdGlvbl1cbiAgICAgICAgICAgIDogQUdHUkVHQVRJT05fVEVYVFMudW5kZWZpbmVkXG4gICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgID5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgIFtjOHlJY29uXT1cIlxuICAgICAgICAgICAgZGlzcGxheUNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgICAgICAgICAgPyBBR0dSRUdBVElPTl9JQ09OU1tkaXNwbGF5Q29uZmlnLmFnZ3JlZ2F0aW9uXVxuICAgICAgICAgICAgICA6IEFHR1JFR0FUSU9OX0lDT05TLnVuZGVmaW5lZFxuICAgICAgICAgIFwiXG4gICAgICAgID48L2k+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGM4eS10aW1lLWNvbnRleHRcbiAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgKGNvbnRleHRDaGFuZ2UpPVwidGltZVByb3BzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2NoYW5nZWREYXRlQ29udGV4dF09XCJ0aW1lUHJvcHNcIlxuICAgICAgICBbY29udHJvbHNBdmFpbGFibGVdPVwie1xuICAgICAgICAgIHJlYWx0aW1lOiB0cnVlLFxuICAgICAgICAgIHRpbWVSYW5nZTogZGlzcGxheUNvbmZpZz8uZGlzcGxheURhdGVTZWxlY3Rpb24sXG4gICAgICAgICAgaW50ZXJ2YWw6IGRpc3BsYXlDb25maWc/LmRpc3BsYXlEYXRlU2VsZWN0aW9uLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uOiBkaXNwbGF5Q29uZmlnPy5kaXNwbGF5QWdncmVnYXRpb25TZWxlY3Rpb25cbiAgICAgICAgfVwiXG4gICAgICA+PC9jOHktdGltZS1jb250ZXh0PlxuICAgIDwvZGl2PlxuICAgIDxjOHktYWxhcm1zLWZpbHRlclxuICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzIGZvcm0tZ3JvdXAtc21cIlxuICAgICAgKm5nSWY9XCJoYXNBdExlYXN0T25lQWxhcm1BY3RpdmVcIlxuICAgICAgKGZpbHRlckFwcGxpZWQpPVwiZmlsdGVyU2V2ZXJpdHkoJGV2ZW50KVwiXG4gICAgPjwvYzh5LWFsYXJtcy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBmbGV4LW5vLXNocmlua1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NhdmUgYXMgaW1hZ2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgdG9vbHRpcD1cInt7ICdTYXZlIGFzIGltYWdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNoYXJ0LnNhdmVBc0ltYWdlKClcIlxuICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgICBjOHlJY29uPVwiaW1hZ2UtZmlsZS1jaGVja2VkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXJcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc20gbS1yLThcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3BvcG92ZXJdPVwibGVnZW5kSGVscFRlbXBsYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgID48L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93IHAtdC04IGQtZmxleCBhLWktc3RhcnQgZ2FwLTggcC1iLTRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYzh5LWRhdGFwb2ludC1waWxsIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICAgICB0aXRsZT1cInt7IGRhdGFwb2ludC5sYWJlbCB9fSAtIHt7IGRhdGFwb2ludC5fX3RhcmdldC5uYW1lIH19XCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YXBvaW50IG9mIGRpc3BsYXlDb25maWcuZGF0YXBvaW50c1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGRhdGFwb2ludC5fX2FjdGl2ZSB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBtLWwtNFwiXG4gICAgICAgICAgICBjOHlJY29uPVwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ0F0IGxlYXN0IDEgZGF0YSBwb2ludCBtdXN0IGJlIGFjdGl2ZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaGFzQXRMZWFzdE9uZURhdGFwb2ludEFjdGl2ZSAmJiBkYXRhcG9pbnQuX19hY3RpdmVcIlxuICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGxfX2J0blwiXG4gICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgIChkYXRhcG9pbnQuX19hY3RpdmUgPyBoaWRlRGF0YXBvaW50TGFiZWwgOiBzaG93RGF0YXBvaW50TGFiZWwpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fSBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hhcnQoZGF0YXBvaW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgICAgICAgW2M4eUljb25dPVwiZGF0YXBvaW50Ll9fYWN0aXZlID8gJ2V5ZSB0ZXh0LXByaW1hcnknIDogJ2V5ZS1zbGFzaCB0ZXh0LW11dGVkJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktZGF0YXBvaW50LXBpbGxfX2xhYmVsIGM4eS1kYXRhcG9pbnQtcGlsbF9fYnRuXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci00IGljb24tMTRcIlxuICAgICAgICAgICAgICBjOHlJY29uPVwiY2lyY2xlXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIGNvbG9yOiBkYXRhcG9pbnQuY29sb3JcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1tdXRlZCc6ICFkYXRhcG9pbnQuX19hY3RpdmUgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIHt7IGRhdGFwb2ludC5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC0xMFwiPlxuICAgICAgICAgICAgICAgIHt7IGRhdGFwb2ludC5fX3RhcmdldC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBtLWwtNFwiXG4gICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdNZWFzdXJlbWVudHMgcmVjZWl2ZWQgZm9yIHRoaXMgZGF0YSBwb2ludCBtYXkgYmUgb3V0IG9mIHN5bmMuJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhcG9pbnRzT3V0T2ZTeW5jLmdldChkYXRhcG9pbnQpXCJcbiAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQWxhcm1zICAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbGFybSBvZiBhbGFybXNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImM4eS1hbGFybS1waWxsIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgYWxhcm0uZmlsdGVycy50eXBlIH19IFwiXG4gICAgICAgICAgICAqbmdJZj1cImFsYXJtLl9fYWN0aXZlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2FybmluZyBtLWwtNFwiXG4gICAgICAgICAgICAgIGM4eUljb249XCJleGNsYW1hdGlvbi10cmlhbmdsZVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdBbGFybSBvZiB0aGlzIHR5cGUgaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQgb3V0c2lkZSBvZiB0aGUgc2VsZWN0ZWQgdGltZSByYW5nZSdcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImRpc3BsYXlDb25maWc/LmFjdGl2ZUFsYXJtVHlwZXNPdXRPZlJhbmdlPy5pbmNsdWRlcyhhbGFybS5maWx0ZXJzLnR5cGUpXCJcbiAgICAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktYWxhcm0tcGlsbF9fYnRuXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhbGFybS5maWx0ZXJzLnR5cGUgfX0gXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGFybUV2ZW50VHlwZShhbGFybSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi0xNFwiXG4gICAgICAgICAgICAgICAgW2M4eUljb25dPVwiYWxhcm0uX19oaWRkZW4gPyAnZXllLXNsYXNoIHRleHQtbXV0ZWQnIDogJ2V5ZSB0ZXh0LXByaW1hcnknXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1hbGFybS1waWxsX19sYWJlbCBjOHktYWxhcm0tcGlsbF9fYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1hcmtlZEFyZWEoYWxhcm0pXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIGFjdGl2ZTogIWlzTWFya2VkQXJlYUVuYWJsZWQgJiYgYWxhcm0uZmlsdGVycy50eXBlID09PSBlbmFibGVkTWFya2VkQXJlYUFsYXJtVHlwZVxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFsYXJtLmNvbG9yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1tdXRlZCc6IGFsYXJtLl9faGlkZGVuIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBhbGFybS5maWx0ZXJzLnR5cGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCB0ZXh0LTEwXCI+XG4gICAgICAgICAgICAgICAgICB7eyBhbGFybS5fX3RhcmdldC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRXZlbnRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBldmVudCBvZiBldmVudHNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImM4eS1ldmVudC1waWxsIGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgZXZlbnQuZmlsdGVycy50eXBlIH19XCJcbiAgICAgICAgICAgICpuZ0lmPVwiZXZlbnQuX19hY3RpdmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktZXZlbnQtcGlsbF9fYnRuXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBldmVudC5maWx0ZXJzLnR5cGUgfX0gXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGFybUV2ZW50VHlwZShldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi0xNFwiXG4gICAgICAgICAgICAgICAgW2M4eUljb25dPVwiZXZlbnQuX19oaWRkZW4gPyAnZXllLXNsYXNoIHRleHQtbXV0ZWQnIDogJ2V5ZSB0ZXh0LXByaW1hcnknXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1ldmVudC1waWxsX19sYWJlbCBjOHktZXZlbnQtcGlsbF9fYnRuXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZXZlbnQuY29sb3IgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHJva2VkLWljb25cIlxuICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImM4eS1ldmVudHNcIlxuICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtbXV0ZWQnOiBldmVudC5fX2hpZGRlbiB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgdGV4dC0xMFwiPlxuICAgICAgICAgICAgICAgICAge3sgZXZlbnQuX190YXJnZXQubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWNoYXJ0c1xuICAjY2hhcnRcbiAgW2NvbmZpZ109XCJkaXNwbGF5Q29uZmlnXCJcbiAgW2FsZXJ0c109XCJhbGVydHNcIlxuICAodXBkYXRlQWxhcm1zQW5kRXZlbnRzKT1cInVwZGF0ZUFsYXJtc0FuZEV2ZW50cygkZXZlbnQpXCJcbiAgKGNvbmZpZ0NoYW5nZU9uWm9vbU91dCk9XCJ1cGRhdGVEYXNoYm9hcmRUaW1lQ29udGV4dCgkZXZlbnQpXCJcbiAgKGRhdGFwb2ludE91dE9mU3luYyk9XCJoYW5kbGVEYXRhcG9pbnRPdXRPZlN5bmMoJGV2ZW50KVwiXG4gICh0aW1lUmFuZ2VDaGFuZ2VPblJlYWx0aW1lKT1cInVwZGF0ZVRpbWVSYW5nZU9uUmVhbHRpbWUoJGV2ZW50KVwiXG4gIChpc01hcmtlZEFyZWFFbmFibGVkKT1cImlzTWFya2VkQXJlYUVuYWJsZWQgPSAkZXZlbnRcIlxuPjwvYzh5LWNoYXJ0cz5cblxuPG5nLXRlbXBsYXRlICNsZWdlbmRIZWxwVGVtcGxhdGU+XG4gIDxkaXYgW2lubmVySFRNTF09XCJsZWdlbmRIZWxwXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -539,8 +539,7 @@ class BrandingComponent {
|
|
|
539
539
|
After customization, you can set your new variant as global or apply it to specific apps.
|
|
540
540
|
</p>
|
|
541
541
|
<p>
|
|
542
|
-
To revert changes, simply set the default branding as global or use the "Delete all
|
|
543
|
-
brandings" button at any time.
|
|
542
|
+
To revert changes, simply set the default branding as global or use the "Delete all variants" button at any time.
|
|
544
543
|
</p>`));
|
|
545
544
|
if (result === false || (typeof result === 'object' && !result.confirmed)) {
|
|
546
545
|
return;
|
|
@@ -597,11 +596,11 @@ class BrandingComponent {
|
|
|
597
596
|
}
|
|
598
597
|
}
|
|
599
598
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, deps: [{ token: i1$2.StoreBrandingService }, { token: i2$1.ActivatedRoute }, { token: i3.AppStateService }, { token: i1.ApplicationService }, { token: i3.ZipService }, { token: i3$1.StaticAssetsService }, { token: i2$1.Router }, { token: i1$3.BsModalService }, { token: i3.ModalService }, { token: i1$2.BrandingVersionService }, { token: i1$1.AddBrandingModalService }, { token: i3.AlertService }, { token: BrandingImportModalService }, { token: i1$2.BrandingTrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
600
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns
|
|
599
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }] }); }
|
|
601
600
|
}
|
|
602
601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, decorators: [{
|
|
603
602
|
type: Component,
|
|
604
|
-
args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns
|
|
603
|
+
args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
|
|
605
604
|
}], ctorParameters: () => [{ type: i1$2.StoreBrandingService }, { type: i2$1.ActivatedRoute }, { type: i3.AppStateService }, { type: i1.ApplicationService }, { type: i3.ZipService }, { type: i3$1.StaticAssetsService }, { type: i2$1.Router }, { type: i1$3.BsModalService }, { type: i3.ModalService }, { type: i1$2.BrandingVersionService }, { type: i1$1.AddBrandingModalService }, { type: i3.AlertService }, { type: BrandingImportModalService }, { type: i1$2.BrandingTrackingService }] });
|
|
606
605
|
|
|
607
606
|
class BrandingFormComponent {
|