@hestia-earth/ui-components 0.24.0-7 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +3 -3
- package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +3 -3
- package/esm2022/node/node-store.service.mjs +8 -6
- package/esm2022/node/node.service.mjs +1 -10
- package/fesm2022/hestia-earth-ui-components.mjs +11 -18
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-store.service.d.ts +6 -0
- package/node/node.service.d.ts +1 -2
- package/package.json +1 -1
|
@@ -86,12 +86,12 @@ export class CyclesCompletenessComponent {
|
|
|
86
86
|
this.selectedIndex.set(+value);
|
|
87
87
|
}
|
|
88
88
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: CyclesCompletenessComponent, deps: [{ token: i1.HeNodeStoreService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: CyclesCompletenessComponent, selector: "he-cycles-completeness", inputs: { dataState: "dataState" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"px-3 pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys()\" [attr.title]=\"completeness\">\n <a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let key of completenessKeys()\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\"></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n filename=\"completeness.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i10.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i11.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: CyclesCompletenessComponent, selector: "he-cycles-completeness", inputs: { dataState: "dataState" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"views()?.length > 1\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"px-3 pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys()\" [attr.title]=\"completeness\">\n <a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let key of completenessKeys()\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\"></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n filename=\"completeness.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i10.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i11.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
90
90
|
}
|
|
91
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
|
|
92
92
|
type: Component,
|
|
93
|
-
args: [{ selector: 'he-cycles-completeness', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"px-3 pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys()\" [attr.title]=\"completeness\">\n <a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let key of completenessKeys()\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\"></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n filename=\"completeness.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n" }]
|
|
93
|
+
args: [{ selector: 'he-cycles-completeness', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"views()?.length > 1\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"px-3 pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys()\" [attr.title]=\"completeness\">\n <a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span>{{ i + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let key of completenessKeys()\">\n <span>{{ getCompleteness(cycle)[key] ? 'Complete' : 'Incomplete' }}</span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"key\"></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n filename=\"completeness.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n" }]
|
|
94
94
|
}], ctorParameters: function () { return [{ type: i1.HeNodeStoreService }]; }, propDecorators: { dataState: [{
|
|
95
95
|
type: Input
|
|
96
96
|
}] } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUUxQyxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCw0QkFBb0IsQ0FBQTtJQUNwQixvQ0FBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSEksSUFBSSxLQUFKLElBQUksUUFHUjtBQUVELE1BQU0sUUFBUSxHQUVWO0lBQ0YsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWTtJQUN6QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNO0NBQ3JC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U0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRVMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQTFFVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixrR0NsQ3hDLDBsSUEwR0E7OzJGRHhFYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNO3lHQU0zQyxTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElDeWNsZUpTT05MRCwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBrZXlUb0xhYmVsIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vbkJsYW5rTm9kZXNLZXksIGlzVmFsaWRLZXkgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsLCBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgbG9nc0tleSB9IGZyb20gJy4uL2N5Y2xlcy5tb2RlbCc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ1RhYmxlIHZpZXcnLFxuICBsb2dzID0gJ1JlY2FsY3VsYXRpb25zIGxvZ3MnXG59XG5cbmNvbnN0IHZpZXdJY29uOiB7XG4gIFt2aWV3IGluIFZpZXddOiBzdHJpbmc7XG59ID0ge1xuICBbVmlldy5sb2dzXTogJ2NhbGN1bGF0b3InLFxuICBbVmlldy50YWJsZV06ICdsaXN0J1xufTtcblxuY29uc3QgaGVhZGVyS2V5cyA9IFsnY3ljbGUuaWQnLCAnY3ljbGUuQGlkJywgJ2N5Y2xlLmNvbXBsZXRlbmVzcy4nXTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNjaGVtYSB2ZXJzaW9uIDwgMTRcbmNvbnN0IGdldENvbXBsZXRlbmVzcyA9IChjeWNsZTogYW55KSA9PiBjeWNsZT8uY29tcGxldGVuZXNzIHx8IGN5Y2xlPy5kYXRhQ29tcGxldGVuZXNzIHx8IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtY29tcGxldGVuZXNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0NvbXBsZXRlbmVzc0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBfZGF0YVN0YXRlID0gc2lnbmFsKERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTdGF0ZSh2YWx1ZTogRGF0YVN0YXRlKSB7XG4gICAgdGhpcy5fZGF0YVN0YXRlLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHJvdGVjdGVkIGtleVRvTGFiZWwgPSBrZXlUb0xhYmVsO1xuICBwcm90ZWN0ZWQgZ2V0Q29tcGxldGVuZXNzID0gZ2V0Q29tcGxldGVuZXNzO1xuICBwcm90ZWN0ZWQgaGVhZGVyS2V5cyA9IGhlYWRlcktleXM7XG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG5vZGVLZXkgPSBOb25CbGFua05vZGVzS2V5LmNvbXBsZXRlbmVzcztcblxuICBwcm90ZWN0ZWQgVmlldyA9IFZpZXc7XG4gIHByb3RlY3RlZCB2aWV3SWNvbiA9IHZpZXdJY29uO1xuICBwcml2YXRlIHNob3dWaWV3ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIFtWaWV3LmxvZ3NdOiAhdGhpcy5pc09yaWdpbmFsKCksXG4gICAgICAgIFtWaWV3LnRhYmxlXTogdHJ1ZVxuICAgICAgfSkgYXMgeyBbdmlldyBpbiBWaWV3XTogYm9vbGVhbiB9XG4gICk7XG4gIHByb3RlY3RlZCB2aWV3cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXMoVmlldykuZmlsdGVyKHZpZXcgPT4gdGhpcy5zaG93VmlldygpW3ZpZXddKSA/PyBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFZpZXcgPSBzaWduYWwoVmlldy50YWJsZSk7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbEN5Y2xlcyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuICBwcml2YXRlIF9hbGxDeWNsZXMgPSB0b1NpZ25hbCh0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSkpO1xuICBwcm90ZWN0ZWQgY3ljbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsQ3ljbGVzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5fZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpKSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5sZW5ndGgpO1xuXG4gIHByb3RlY3RlZCBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGF0YVN0YXRlKCkgPT09IERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgcHJvdGVjdGVkIGNvbXBsZXRlbmVzc0tleXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIE9iamVjdC5rZXlzKGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpLmZpbHRlcihpc1ZhbGlkS2V5KS5zb3J0KClcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2U6IEhlTm9kZVN0b3JlU2VydmljZSkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gb3JpZ2luYWwgdmlld1xuICAgICAgaWYgKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcubG9ncykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQoVmlldy50YWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfSB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgrdmFsdWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBtLTBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcoKSA9PT0gVmlldy50YWJsZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiXG4gICAgICAgIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCJcbiAgICAgICAgbmdiVG9vbHRpcD1cIkRvd25sb2FkIGFzIENTVlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3MoKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInZpZXdJY29uW3ZpZXddXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFZpZXcoKVwiPlxuICA8ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgKm5nU3dpdGNoQ2FzZT1cIlZpZXcudGFibGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29tcGxldGVuZXNzIG9mIGNvbXBsZXRlbmVzc0tleXMoKVwiIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiPlxuICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9Db21wbGV0ZW5lc3MjJyArIGNvbXBsZXRlbmVzc1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgICAge3sga2V5VG9MYWJlbChjb21wbGV0ZW5lc3MpIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN5Y2xlIG9mIGN5Y2xlcygpOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiY3ljbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbChjeWNsZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBrZXkgb2YgY29tcGxldGVuZXNzS2V5cygpXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRDb21wbGV0ZW5lc3MoY3ljbGUpW2tleV0gPyAnQ29tcGxldGUnIDogJ0luY29tcGxldGUnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJnZXRDb21wbGV0ZW5lc3MoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cIl9kYXRhU3RhdGUoKVwiIFtzaG93QWdncmVnYXRlZF09XCJmYWxzZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXcubG9nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwiY3ljbGVzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwic2VsZWN0SW5kZXgoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgY3ljbGVzKCk7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8aGUtbm9kZS1sb2dzLW1vZGVsc1xuICAgICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICBbbm9kZV09XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICBbbm9kZUtleV09XCJub2RlS2V5XCJcbiAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9ja1wiPlxuICAgIDxzcGFuPk5vIGNvbXBsZXRlbmVzcyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybVxuICAqbmdJZj1cInNob3dEb3dubG9hZFwiXG4gIFtub2Rlc109XCJjeWNsZXMoKVwiXG4gIGZpbGVuYW1lPVwiY29tcGxldGVuZXNzLmNzdlwiXG4gIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cImhlYWRlcktleXNcIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCI+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cbiJdfQ==
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUUxQyxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCw0QkFBb0IsQ0FBQTtJQUNwQixvQ0FBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSEksSUFBSSxLQUFKLElBQUksUUFHUjtBQUVELE1BQU0sUUFBUSxHQUVWO0lBQ0YsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWTtJQUN6QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNO0NBQ3JC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U0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRVMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQTFFVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixrR0NsQ3hDLHduSUEwR0E7OzJGRHhFYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNO3lHQU0zQyxTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElDeWNsZUpTT05MRCwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBrZXlUb0xhYmVsIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vbkJsYW5rTm9kZXNLZXksIGlzVmFsaWRLZXkgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsLCBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgbG9nc0tleSB9IGZyb20gJy4uL2N5Y2xlcy5tb2RlbCc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ1RhYmxlIHZpZXcnLFxuICBsb2dzID0gJ1JlY2FsY3VsYXRpb25zIGxvZ3MnXG59XG5cbmNvbnN0IHZpZXdJY29uOiB7XG4gIFt2aWV3IGluIFZpZXddOiBzdHJpbmc7XG59ID0ge1xuICBbVmlldy5sb2dzXTogJ2NhbGN1bGF0b3InLFxuICBbVmlldy50YWJsZV06ICdsaXN0J1xufTtcblxuY29uc3QgaGVhZGVyS2V5cyA9IFsnY3ljbGUuaWQnLCAnY3ljbGUuQGlkJywgJ2N5Y2xlLmNvbXBsZXRlbmVzcy4nXTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNjaGVtYSB2ZXJzaW9uIDwgMTRcbmNvbnN0IGdldENvbXBsZXRlbmVzcyA9IChjeWNsZTogYW55KSA9PiBjeWNsZT8uY29tcGxldGVuZXNzIHx8IGN5Y2xlPy5kYXRhQ29tcGxldGVuZXNzIHx8IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtY29tcGxldGVuZXNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0NvbXBsZXRlbmVzc0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBfZGF0YVN0YXRlID0gc2lnbmFsKERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTdGF0ZSh2YWx1ZTogRGF0YVN0YXRlKSB7XG4gICAgdGhpcy5fZGF0YVN0YXRlLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHJvdGVjdGVkIGtleVRvTGFiZWwgPSBrZXlUb0xhYmVsO1xuICBwcm90ZWN0ZWQgZ2V0Q29tcGxldGVuZXNzID0gZ2V0Q29tcGxldGVuZXNzO1xuICBwcm90ZWN0ZWQgaGVhZGVyS2V5cyA9IGhlYWRlcktleXM7XG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG5vZGVLZXkgPSBOb25CbGFua05vZGVzS2V5LmNvbXBsZXRlbmVzcztcblxuICBwcm90ZWN0ZWQgVmlldyA9IFZpZXc7XG4gIHByb3RlY3RlZCB2aWV3SWNvbiA9IHZpZXdJY29uO1xuICBwcml2YXRlIHNob3dWaWV3ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIFtWaWV3LmxvZ3NdOiAhdGhpcy5pc09yaWdpbmFsKCksXG4gICAgICAgIFtWaWV3LnRhYmxlXTogdHJ1ZVxuICAgICAgfSkgYXMgeyBbdmlldyBpbiBWaWV3XTogYm9vbGVhbiB9XG4gICk7XG4gIHByb3RlY3RlZCB2aWV3cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXMoVmlldykuZmlsdGVyKHZpZXcgPT4gdGhpcy5zaG93VmlldygpW3ZpZXddKSA/PyBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFZpZXcgPSBzaWduYWwoVmlldy50YWJsZSk7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbEN5Y2xlcyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuICBwcml2YXRlIF9hbGxDeWNsZXMgPSB0b1NpZ25hbCh0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSkpO1xuICBwcm90ZWN0ZWQgY3ljbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsQ3ljbGVzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5fZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpKSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5sZW5ndGgpO1xuXG4gIHByb3RlY3RlZCBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZGF0YVN0YXRlKCkgPT09IERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgcHJvdGVjdGVkIGNvbXBsZXRlbmVzc0tleXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIE9iamVjdC5rZXlzKGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpLmZpbHRlcihpc1ZhbGlkS2V5KS5zb3J0KClcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2U6IEhlTm9kZVN0b3JlU2VydmljZSkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gb3JpZ2luYWwgdmlld1xuICAgICAgaWYgKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcubG9ncykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQoVmlldy50YWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfSB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgrdmFsdWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBtLTBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcoKSA9PT0gVmlldy50YWJsZVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiXG4gICAgICAgIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCJcbiAgICAgICAgbmdiVG9vbHRpcD1cIkRvd25sb2FkIGFzIENTVlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCJ2aWV3cygpPy5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3MoKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInZpZXdJY29uW3ZpZXddXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFZpZXcoKVwiPlxuICA8ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgKm5nU3dpdGNoQ2FzZT1cIlZpZXcudGFibGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29tcGxldGVuZXNzIG9mIGNvbXBsZXRlbmVzc0tleXMoKVwiIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiPlxuICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9Db21wbGV0ZW5lc3MjJyArIGNvbXBsZXRlbmVzc1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgICAge3sga2V5VG9MYWJlbChjb21wbGV0ZW5lc3MpIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN5Y2xlIG9mIGN5Y2xlcygpOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiY3ljbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbChjeWNsZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBrZXkgb2YgY29tcGxldGVuZXNzS2V5cygpXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRDb21wbGV0ZW5lc3MoY3ljbGUpW2tleV0gPyAnQ29tcGxldGUnIDogJ0luY29tcGxldGUnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJnZXRDb21wbGV0ZW5lc3MoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cIl9kYXRhU3RhdGUoKVwiIFtzaG93QWdncmVnYXRlZF09XCJmYWxzZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlZpZXcubG9nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwiY3ljbGVzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwic2VsZWN0SW5kZXgoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgY3ljbGVzKCk7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8aGUtbm9kZS1sb2dzLW1vZGVsc1xuICAgICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICBbbm9kZV09XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICBbbm9kZUtleV09XCJub2RlS2V5XCJcbiAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9ja1wiPlxuICAgIDxzcGFuPk5vIGNvbXBsZXRlbmVzcyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybVxuICAqbmdJZj1cInNob3dEb3dubG9hZFwiXG4gIFtub2Rlc109XCJjeWNsZXMoKVwiXG4gIGZpbGVuYW1lPVwiY29tcGxldGVuZXNzLmNzdlwiXG4gIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cImhlYWRlcktleXNcIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCI+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cbiJdfQ==
|
|
@@ -196,11 +196,11 @@ export class CyclesNodesComponent {
|
|
|
196
196
|
this.selectedIndex.set(+value);
|
|
197
197
|
}
|
|
198
198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: CyclesNodesComponent, deps: [{ token: i1.HeNodeStoreService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: CyclesNodesComponent, selector: "he-cycles-nodes", inputs: { dataState: "dataState", nodeKeys: "nodeKeys", nodeKeyGroup: "nodeKeyGroup" }, ngImport: i0, template: "<div class=\"tabs is-mb-1\" *ngIf=\"isGroupNode()\">\n <ul>\n <li *ngFor=\"let term of groupNodeTerms()\" [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n </ul>\n</div>\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView() === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"isNodeKeyAllowed()\">\n <ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"is-px-3 is-pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-bold\" *ngIf=\"dataKeys().length > 1\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <ng-container *ngIf=\"data()[dataKey]?.length\">\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n </ng-container>\n </ng-container>\n </tr>\n\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </ng-container>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let cycleIndex = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles()[0]\"></he-cycles-functional-unit-measure>\n </td>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <td\n class=\"is-nowrap\"\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span\n *ngIf=\"node.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.chart\">\n <ng-container [ngSwitch]=\"firstNodeKey()\">\n <he-cycles-result *ngSwitchCase=\"BlankNodesKey.inputs\" [cycles]=\"cycles()\"></he-cycles-result>\n <he-cycles-emissions-chart\n *ngSwitchCase=\"BlankNodesKey.emissions\"\n [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.timeline\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"_dataState()\"></he-cycles-nodes-timeline>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"tabs is-mb-2\" *ngIf=\"_nodeKeys().length > 1\">\n <ul>\n <li *ngFor=\"let nodeKey of _nodeKeys()\" [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n </ul>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n <div class=\"field has-addons is-py-2 is-px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let cycleIndex = index\" [value]=\"cycleIndex\">\n {{ cycleIndex + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i10.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i11.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i12.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i13.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i14.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: i15.CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "component", type: i16.CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { kind: "component", type: i17.CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: i18.CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "pipe", type: i19.CompoundPipe, name: "compound" }, { kind: "pipe", type: i20.DefaultPipe, name: "default" }, { kind: "pipe", type: i21.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i22.KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: i23.PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: CyclesNodesComponent, selector: "he-cycles-nodes", inputs: { dataState: "dataState", nodeKeys: "nodeKeys", nodeKeyGroup: "nodeKeyGroup" }, ngImport: i0, template: "<div class=\"tabs is-mb-1\" *ngIf=\"isGroupNode()\">\n <ul>\n <li *ngFor=\"let term of groupNodeTerms()\" [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n </ul>\n</div>\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView() === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"views()?.length > 1\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"isNodeKeyAllowed()\">\n <ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"is-px-3 is-pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-bold\" *ngIf=\"dataKeys().length > 1\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <ng-container *ngIf=\"data()[dataKey]?.length\">\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n </ng-container>\n </ng-container>\n </tr>\n\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </ng-container>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let cycleIndex = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles()[0]\"></he-cycles-functional-unit-measure>\n </td>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <td\n class=\"is-nowrap\"\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span\n *ngIf=\"node.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.chart\">\n <ng-container [ngSwitch]=\"firstNodeKey()\">\n <he-cycles-result *ngSwitchCase=\"BlankNodesKey.inputs\" [cycles]=\"cycles()\"></he-cycles-result>\n <he-cycles-emissions-chart\n *ngSwitchCase=\"BlankNodesKey.emissions\"\n [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.timeline\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"_dataState()\"></he-cycles-nodes-timeline>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"tabs is-mb-2\" *ngIf=\"_nodeKeys().length > 1\">\n <ul>\n <li *ngFor=\"let nodeKey of _nodeKeys()\" [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n </ul>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n <div class=\"field has-addons is-py-2 is-px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let cycleIndex = index\" [value]=\"cycleIndex\">\n {{ cycleIndex + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i10.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i11.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i12.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i13.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i14.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: i15.CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "component", type: i16.CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { kind: "component", type: i17.CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: i18.CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "pipe", type: i19.CompoundPipe, name: "compound" }, { kind: "pipe", type: i20.DefaultPipe, name: "default" }, { kind: "pipe", type: i21.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i22.KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: i23.PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
200
200
|
}
|
|
201
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: CyclesNodesComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
203
|
-
args: [{ selector: 'he-cycles-nodes', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs is-mb-1\" *ngIf=\"isGroupNode()\">\n <ul>\n <li *ngFor=\"let term of groupNodeTerms()\" [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n </ul>\n</div>\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView() === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"isNodeKeyAllowed()\">\n <ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"is-px-3 is-pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-bold\" *ngIf=\"dataKeys().length > 1\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <ng-container *ngIf=\"data()[dataKey]?.length\">\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n </ng-container>\n </ng-container>\n </tr>\n\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </ng-container>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let cycleIndex = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles()[0]\"></he-cycles-functional-unit-measure>\n </td>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <td\n class=\"is-nowrap\"\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span\n *ngIf=\"node.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.chart\">\n <ng-container [ngSwitch]=\"firstNodeKey()\">\n <he-cycles-result *ngSwitchCase=\"BlankNodesKey.inputs\" [cycles]=\"cycles()\"></he-cycles-result>\n <he-cycles-emissions-chart\n *ngSwitchCase=\"BlankNodesKey.emissions\"\n [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.timeline\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"_dataState()\"></he-cycles-nodes-timeline>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"tabs is-mb-2\" *ngIf=\"_nodeKeys().length > 1\">\n <ul>\n <li *ngFor=\"let nodeKey of _nodeKeys()\" [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n </ul>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n <div class=\"field has-addons is-py-2 is-px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let cycleIndex = index\" [value]=\"cycleIndex\">\n {{ cycleIndex + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"] }]
|
|
203
|
+
args: [{ selector: 'he-cycles-nodes', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs is-mb-1\" *ngIf=\"isGroupNode()\">\n <ul>\n <li *ngFor=\"let term of groupNodeTerms()\" [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n </ul>\n</div>\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView() === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView() === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"views()?.length > 1\">\n <div class=\"field has-addons\">\n <div class=\"control\" *ngFor=\"let view of views()\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView() === view\" (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"isNodeKeyAllowed()\">\n <ng-container [ngSwitch]=\"selectedView()\">\n <div class=\"is-px-3 is-pb-3\" *ngSwitchCase=\"View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-bold\" *ngIf=\"dataKeys().length > 1\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <ng-container *ngIf=\"data()[dataKey]?.length\">\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n </ng-container>\n </ng-container>\n </tr>\n\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </ng-container>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <th\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles(); trackBy: trackById; let cycleIndex = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle.term || cycle\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycles()[0]\"></he-cycles-functional-unit-measure>\n </td>\n\n <ng-container *ngFor=\"let dataKey of dataKeys(); let dataKeyLast = last\">\n <td\n class=\"is-nowrap\"\n *ngFor=\"let node of data()[dataKey]; let nodeLast = last\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span\n *ngIf=\"node.value.values[cycle['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n </div>\n\n <ng-container *ngSwitchCase=\"View.chart\">\n <ng-container [ngSwitch]=\"firstNodeKey()\">\n <he-cycles-result *ngSwitchCase=\"BlankNodesKey.inputs\" [cycles]=\"cycles()\"></he-cycles-result>\n <he-cycles-emissions-chart\n *ngSwitchCase=\"BlankNodesKey.emissions\"\n [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.timeline\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"_dataState()\"></he-cycles-nodes-timeline>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"View.logs\">\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n\n <div class=\"tabs is-mb-2\" *ngIf=\"_nodeKeys().length > 1\">\n <ul>\n <li *ngFor=\"let nodeKey of _nodeKeys()\" [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n </ul>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n <div class=\"field has-addons is-py-2 is-px-3\" *ngIf=\"cycles().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles(); let cycleIndex = index\" [value]=\"cycleIndex\">\n {{ cycleIndex + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"] }]
|
|
204
204
|
}], ctorParameters: function () { return [{ type: i1.HeNodeStoreService }]; }, propDecorators: { dataState: [{
|
|
205
205
|
type: Input
|
|
206
206
|
}], nodeKeys: [{
|
|
@@ -208,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
|
|
|
208
208
|
}], nodeKeyGroup: [{
|
|
209
209
|
type: Input
|
|
210
210
|
}] } });
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLW5vZGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLW5vZGVzL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1ub2Rlcy9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBSUwsUUFBUSxFQUlSLFlBQVksRUFJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGFBQWEsRUFBYSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRCxJQUFLLElBS0o7QUFMRCxXQUFLLElBQUk7SUFDUCw0QkFBb0IsQ0FBQTtJQUNwQiw0QkFBb0IsQ0FBQTtJQUNwQix3Q0FBZ0MsQ0FB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S0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVTLGFBQWEsQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNoRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQXRNVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrSUN0SGpDLGd5VUFxUEE7OzJGRC9IYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07eUdBSzNDLFNBQVM7c0JBRFosS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBUUYsWUFBWTtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQge1xuICBJQ3ljbGVKU09OTEQsXG4gIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBQcm9kdWN0LFxuICBOb2RlVHlwZSxcbiAgQW5pbWFsLFxuICBFbWlzc2lvbixcbiAgUHJhY3RpY2UsXG4gIFRlcm1UZXJtVHlwZSxcbiAgRW1pc3Npb25NZXRob2RUaWVyLFxuICBUZXJtLFxuICBUcmFuc2Zvcm1hdGlvblxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gub3JkZXJieSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEJsYW5rTm9kZXNLZXksIGJsYW5rTm9kZSwgZmlsdGVyQmxhbmtOb2RlLCBtZXRob2RUaWVyT3JkZXIgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBsb2dzS2V5IH0gZnJvbSAnLi4vY3ljbGVzLm1vZGVsJztcbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwTm9kZXNCeVRlcm0sIElHcm91cGVkS2V5cywgZ3JvdXBwZWRLZXlzIH0gZnJvbSAnLi4vLi4vY29tbW9uL25vZGUtdXRpbHMnO1xuaW1wb3J0IHsgYmFzZVVybCwgZGVmYXVsdExhYmVsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuZW51bSBWaWV3IHtcbiAgdGFibGUgPSAnVGFibGUgdmlldycsXG4gIGNoYXJ0ID0gJ0NoYXJ0IHZpZXcnLFxuICB0aW1lbGluZSA9ICdPcGVyYXRpb25zIFRpbWVsaW5lJyxcbiAgbG9ncyA9ICdSZWNhbGN1bGF0aW9ucyBsb2dzJ1xufVxuXG5jb25zdCB0aW1lbGluZVRlcm1UeXBlID0gW1Rlcm1UZXJtVHlwZS5vcGVyYXRpb25dO1xuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleTtcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ0FuaW1hbCBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuYW5pbWFscztcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ0VtaXNzaW9uIGV4dGVuZHMgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnM7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdJbnB1dCBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuaW5wdXRzO1xufVxuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnUHJhY3RpY2UgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LnByYWN0aWNlcztcbn1cblxuY29uc3Qgdmlld0ljb246IHtcbiAgW3ZpZXcgaW4gVmlld106IHN0cmluZztcbn0gPSB7XG4gIFtWaWV3LmNoYXJ0XTogJ2NoYXJ0LWJhcicsXG4gIFtWaWV3LmxvZ3NdOiAnY2FsY3VsYXRvcicsXG4gIFtWaWV3LnRhYmxlXTogJ2xpc3QnLFxuICBbVmlldy50aW1lbGluZV06ICdsaXN0LWFsdCdcbn07XG5cbmNvbnN0IG5vZGVLZXlWaWV3czoge1xuICBbdHlwZSBpbiBCbGFua05vZGVzS2V5XT86IFZpZXdbXTtcbn0gPSB7XG4gIFtCbGFua05vZGVzS2V5LmFuaW1hbHNdOiBbVmlldy50YWJsZV0sXG4gIFtCbGFua05vZGVzS2V5LmVtaXNzaW9uc106IFtWaWV3LnRhYmxlLCBWaWV3LmNoYXJ0LCBWaWV3LmxvZ3NdLFxuICBbQmxhbmtOb2Rlc0tleS5pbnB1dHNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkucHJvZHVjdHNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkucHJhY3RpY2VzXTogW1ZpZXcudGFibGUsIFZpZXcudGltZWxpbmUsIFZpZXcubG9nc11cbn07XG5cbi8vIGVuYWJsZVxuY29uc3Qgbm9kZUtleUZpbHRlclRlcm1UeXBlczoge1xuICBbdHlwZSBpbiBCbGFua05vZGVzS2V5XT86IFRlcm1UZXJtVHlwZVtdO1xufSA9IHtcbiAgW0JsYW5rTm9kZXNLZXkuZW1pc3Npb25zXTogW1Rlcm1UZXJtVHlwZS5lbWlzc2lvbl1cbn07XG5cbmNvbnN0IGZpbHRlclZhbHVlc1RpbWVsaW5lID0gKHZhbHVlczogYmxhbmtOb2RlW10pID0+IHZhbHVlcy5maWx0ZXIocCA9PiB0aW1lbGluZVRlcm1UeXBlLmluY2x1ZGVzKHAudGVybT8udGVybVR5cGUpKTtcblxudHlwZSBncm91cGVkRW1pc3Npb25zID0ge1xuICBbbWV0aG9kVGllciBpbiBFbWlzc2lvbk1ldGhvZFRpZXJdOiBJR3JvdXBlZEtleXM8RW1pc3Npb24+W107XG59O1xuXG5leHBvcnQgZW51bSBDeWNsZU5vZGVzS2V5R3JvdXAge1xuICBhbmltYWxzID0gJ2FuaW1hbHMnLFxuICB0cmFuc2Zvcm1hdGlvbnMgPSAndHJhbnNmb3JtYXRpb25zJ1xufVxuXG50eXBlIGdyb3VwZWROb2RlID0gQW5pbWFsIHwgVHJhbnNmb3JtYXRpb247XG5cbmNvbnN0IGN5Y2xlR3JvdXBOb2RlID1cbiAgKGN5Y2xlPzogSUN5Y2xlSlNPTkxEKSA9PlxuICAobm9kZT86IGdyb3VwZWROb2RlKTogZ3JvdXBlZE5vZGUgJiB7IG5hbWU6IHN0cmluZzsgJ0BpZCc6IHN0cmluZyB9ID0+ICh7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBjeWNsZT8ubmFtZSxcbiAgICAnQGlkJzogY3ljbGU/LlsnQGlkJ10gLy8gc2V0IEBpZCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGxvZ3MgZnJvbSB0aGUgQ3ljbGVcbiAgfSk7XG5cbmNvbnN0IGN5Y2xlR3JvdXBOb2RlcyA9IChncm91cEtleTogQ3ljbGVOb2Rlc0tleUdyb3VwLCBjeWNsZT86IElDeWNsZUpTT05MRCk6IGdyb3VwZWROb2RlW10gPT5cbiAgKGN5Y2xlPy5bZ3JvdXBLZXldIHx8IFtdKS5tYXAoY3ljbGVHcm91cE5vZGUoY3ljbGUpKTtcblxuY29uc3QgZmlsdGVyR3JvdXBOb2Rlc0J5VGVybSA9IChncm91cEtleTogQ3ljbGVOb2Rlc0tleUdyb3VwLCBjeWNsZXM6IElDeWNsZUpTT05MRFtdLCB0ZXJtPzogVGVybSk6IGdyb3VwZWROb2RlW10gPT5cbiAgY3ljbGVzLm1hcChjeWNsZSA9PlxuICAgIGN5Y2xlR3JvdXBOb2RlKGN5Y2xlKShcbiAgICAgICgoY3ljbGU/Lltncm91cEtleV0gYXMgZ3JvdXBlZE5vZGVbXSkgfHwgW10pLmZpbHRlcihCb29sZWFuKS5maW5kKG5vZGUgPT4gbm9kZS50ZXJtPy5uYW1lID09PSB0ZXJtPy5uYW1lKVxuICAgIClcbiAgKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtY3ljbGVzLW5vZGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNOb2Rlc0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBfZGF0YVN0YXRlID0gc2lnbmFsKERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIEJsYW5rTm9kZXNLZXkgPSBCbGFua05vZGVzS2V5O1xuICBwcm90ZWN0ZWQgZmlyc3ROb2RlS2V5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fbm9kZUtleXMoKT8uWzBdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZUtleSA9IHNpZ25hbCh1bmRlZmluZWQgYXMgQmxhbmtOb2Rlc0tleSk7XG5cbiAgcHJvdGVjdGVkIF9ub2RlS2V5cyA9IHNpZ25hbChbXSBhcyBCbGFua05vZGVzS2V5W10pO1xuICBASW5wdXQoKVxuICBzZXQgbm9kZUtleXModmFsdWU6IEJsYW5rTm9kZXNLZXlbXSkge1xuICAgIHRoaXMuX25vZGVLZXlzLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHcm91cFRlcm0gPSBzaWduYWwodW5kZWZpbmVkIGFzIFRlcm0pO1xuICBwcm90ZWN0ZWQgX25vZGVLZXlHcm91cCA9IHNpZ25hbCh1bmRlZmluZWQgYXMgQ3ljbGVOb2Rlc0tleUdyb3VwKTtcbiAgQElucHV0KClcbiAgc2V0IG5vZGVLZXlHcm91cCh2YWx1ZTogQ3ljbGVOb2Rlc0tleUdyb3VwKSB7XG4gICAgdGhpcy5fbm9kZUtleUdyb3VwLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlO1xuICBwcm90ZWN0ZWQgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwcm90ZWN0ZWQgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGhlYWRlcktleXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgJ2N5Y2xlLmlkJyxcbiAgICAnY3ljbGUuQGlkJyxcbiAgICAndHJhbnNmb3JtYXRpb24uaWQnLFxuICAgICd0cmFuc2Zvcm1hdGlvbi5AaWQnLFxuICAgIC4uLnRoaXMuX25vZGVLZXlzKCkuZmxhdE1hcChrZXkgPT4gW2BjeWNsZS4ke2tleX0uYCwgYHRyYW5zZm9ybWF0aW9uLiR7a2V5fS5gXSlcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zID8gdGhpcy5jeWNsZXMoKS5sZW5ndGggPiAxIDogdHJ1ZSxcbiAgICAgICAgW1ZpZXcubG9nc106ICF0aGlzLmlzT3JpZ2luYWwoKSxcbiAgICAgICAgW1ZpZXcudGFibGVdOiB0cnVlLFxuICAgICAgICBbVmlldy50aW1lbGluZV06IHRoaXMuZW5hYmxlVGltZWxpbmUoKVxuICAgICAgfSkgYXMgeyBbdmlldyBpbiBWaWV3XTogYm9vbGVhbiB9XG4gICk7XG4gIHByb3RlY3RlZCB2aWV3cyA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlWaWV3c1t0aGlzLnNlbGVjdGVkTm9kZUtleSgpXT8uZmlsdGVyKHZpZXcgPT4gdGhpcy5zaG93VmlldygpW3ZpZXddKSA/PyBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFZpZXcgPSBzaWduYWwoVmlldy50YWJsZSk7XG5cbiAgcHJpdmF0ZSBfYWxsTm9kZXMgPSB0b1NpZ25hbCh0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSkpO1xuICBwcml2YXRlIG9yaWdpbmFsTm9kZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbGxOb2RlcygpPy5tYXAoZGF0YSA9PiBkYXRhW0RhdGFTdGF0ZS5vcmlnaW5hbF0pIHx8IFtdKTtcbiAgcHJpdmF0ZSBjdXJyZW50Tm9kZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbGxOb2RlcygpPy5tYXAoZGF0YSA9PiBkYXRhW3RoaXMuX2RhdGFTdGF0ZSgpXSkgfHwgW10pO1xuXG4gIC8vIGNhbiBiZSBDeWNsZSBvciBUcmFuc2Zvcm1hdGlvblxuICBwcm90ZWN0ZWQgb3JpZ2luYWxDeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX25vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5fbm9kZUtleUdyb3VwKCksIHRoaXMub3JpZ2luYWxOb2RlcygpLCB0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkpXG4gICAgICA6IHRoaXMub3JpZ2luYWxOb2RlcygpXG4gICk7XG4gIHByb3RlY3RlZCBjeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX25vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5fbm9kZUtleUdyb3VwKCksIHRoaXMuY3VycmVudE5vZGVzKCksIHRoaXMuc2VsZWN0ZWRHcm91cFRlcm0oKSlcbiAgICAgIDogdGhpcy5jdXJyZW50Tm9kZXMoKVxuICApO1xuXG4gIHByaXZhdGUgc2VsZWN0ZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSBvZ2lyaW5hbFNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9yaWdpbmFsQ3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN5Y2xlcygpPy5bdGhpcy5zZWxlY3RlZEluZGV4KCldKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTG9nc0tleSA9IGNvbXB1dGVkKCgpID0+IGxvZ3NLZXkodGhpcy5zZWxlY3RlZEN5Y2xlKCkpKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkQ3ljbGUoKT8uW3RoaXMuc2VsZWN0ZWROb2RlS2V5KCldIHx8IFtdKTtcbiAgLy8gVE9ETzogaGFuZGxlIHRyYW5zZm9ybWF0aW9uIGFuZCBub24taW5kZXhlZCBub2RlcyBvbiBDRVxuICBwcm90ZWN0ZWQgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByaXZhdGUgaXNPcmlnaW5hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2RhdGFTdGF0ZSgpID09PSBEYXRhU3RhdGUub3JpZ2luYWwpO1xuICBwcml2YXRlIG9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuaXNPcmlnaW5hbCgpID8gbnVsbCA6IHRoaXMub3JpZ2luYWxDeWNsZXMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmN5Y2xlcygpLnNvbWUoY3ljbGUgPT4gIWN5Y2xlLmFnZ3JlZ2F0ZWQpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHRpbWVsaW5lVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gZmlsdGVyVmFsdWVzVGltZWxpbmUodGhpcy5zZWxlY3RlZEN5Y2xlKCk/Llt0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSB8fCBbXSkpO1xuICBwcml2YXRlIGVuYWJsZVRpbWVsaW5lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50aW1lbGluZVZhbHVlcygpLmxlbmd0aCA+IDApO1xuXG4gIHByb3RlY3RlZCBpc05vZGVLZXlBbGxvd2VkID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleVZpZXdzW3RoaXMuZmlyc3ROb2RlS2V5KCldLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRWaWV3KCkpKTtcblxuICBwcml2YXRlIGdyb3VwZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+IGN5Y2xlR3JvdXBOb2Rlcyh0aGlzLl9ub2RlS2V5R3JvdXAoKSwgdGhpcy5vcmlnaW5hbE5vZGVzKCk/LlswXSkpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOb2RlVGVybXMgPSBjb21wdXRlZCgoKSA9PiB1bmlxdWUodGhpcy5ncm91cGVkTm9kZXMoKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSkpO1xuICBwcm90ZWN0ZWQgaXNHcm91cE5vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9ub2RlS2V5R3JvdXAoKSAmJiB0aGlzLmdyb3VwZWROb2RlcygpPy5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgaXNFbWlzc2lvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zKTtcblxuICBwcm90ZWN0ZWQgZGF0YSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pc0VtaXNzaW9uKClcbiAgICAgID8gdGhpcy5ncm91cEVtaXNzaW9ucygpXG4gICAgICA6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLl9ub2RlS2V5cygpLm1hcChub2RlS2V5ID0+IFtub2RlS2V5LCB0aGlzLmdyb3VwTm9kZXNCeUtleSh7IG5vZGVLZXkgfSldKSlcbiAgKTtcbiAgcHJvdGVjdGVkIGRhdGFLZXlzID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5kYXRhKCkpKTtcblxuICBwcm90ZWN0ZWQgaGFzRGF0YSA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXModGhpcy5kYXRhKCkpLmZsYXQoKS5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyVGVybVR5cGVzID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleUZpbHRlclRlcm1UeXBlc1t0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICBwcm90ZWN0ZWQgY3N2RmlsZW5hbWUgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9ub2RlS2V5cygpLmpvaW4oJy0nKX0uY3N2YCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlU3RvcmVTZXJ2aWNlOiBIZU5vZGVTdG9yZVNlcnZpY2UpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBsb2dzIGRvZXMgbm90IHJlbWFpbiBkaXNwbGF5ZWQgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBvcmlnaW5hbCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldygpID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQoVmlldy50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZUtleSgpIHx8ICF0aGlzLl9ub2RlS2V5cygpLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVLZXkuc2V0KHRoaXMuZmlyc3ROb2RlS2V5KCkpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChWaWV3LnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpIHx8ICF0aGlzLmdyb3VwTm9kZVRlcm1zKCkuaW5jbHVkZXModGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cFRlcm0uc2V0KHRoaXMuZ3JvdXBOb2RlVGVybXMoKVswXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cE5vZGVzQnlLZXk8XG4gICAgVCBleHRlbmRzIElDeWNsZUNvbmZpZyxcbiAgICBSID0gVCBleHRlbmRzIElDeWNsZUNvbmZpZ0FuaW1hbFxuICAgICAgPyBBbmltYWxcbiAgICAgIDogVCBleHRlbmRzIElDeWNsZUNvbmZpZ0VtaXNzaW9uXG4gICAgICA/IEVtaXNzaW9uXG4gICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdJbnB1dFxuICAgICAgPyBIZXN0aWFJbnB1dFxuICAgICAgOiBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnUHJhY3RpY2VcbiAgICAgID8gUHJhY3RpY2VcbiAgICAgIDogUHJvZHVjdFxuICA+KHsgbm9kZUtleSB9OiBUKTogSUdyb3VwZWRLZXlzPFI+W10ge1xuICAgIGNvbnN0IG5vZGVzUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlLCBSPihcbiAgICAgIHRoaXMuY3ljbGVzKCksXG4gICAgICBub2RlS2V5LFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlcygpLFxuICAgICAgZmlsdGVyQmxhbmtOb2RlKHRoaXMuZmlsdGVyVGVybSgpKVxuICAgICk7XG4gICAgcmV0dXJuIG9yZGVyQnkoZ3JvdXBwZWRLZXlzKG5vZGVzUGVyQ3ljbGUpLCBbJ2tleSddLCBbJ2FzYyddKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBFbWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW1pc3Npb25zUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlLCBFbWlzc2lvbj4oXG4gICAgICB0aGlzLmN5Y2xlcygpLFxuICAgICAgQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMsXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICBjb25zdCB2YWx1ZXM6IElHcm91cGVkS2V5czxFbWlzc2lvbj5bXSA9IG9yZGVyQnkoZ3JvdXBwZWRLZXlzKGVtaXNzaW9uc1BlckN5Y2xlKSwgWydrZXknXSwgWydhc2MnXSk7XG4gICAgY29uc3QgbWV0aG9kVGllcnMgPSBvcmRlckJ5KFxuICAgICAgdW5pcXVlKHZhbHVlcy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllcikpLm1hcChtZXRob2RUaWVyID0+ICh7XG4gICAgICAgIG1ldGhvZFRpZXIsXG4gICAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKG1ldGhvZFRpZXIpXG4gICAgICB9KSksXG4gICAgICBbJ21ldGhvZFRpZXJPcmRlciddLFxuICAgICAgWydhc2MnXVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIG1ldGhvZFRpZXJzLm1hcCgoeyBtZXRob2RUaWVyIH0pID0+IFttZXRob2RUaWVyLCB2YWx1ZXMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlLm1ldGhvZFRpZXIgPT09IG1ldGhvZFRpZXIpXSlcbiAgICApIGFzIGdyb3VwZWRFbWlzc2lvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyOiBhbnksIGNvbnRleHQ6IGFueSkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbHRlckJ5VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlclRlcm0uc2V0KHRlcm0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYnMgaXMtbWItMVwiICpuZ0lmPVwiaXNHcm91cE5vZGUoKVwiPlxuICA8dWw+XG4gICAgPGxpICpuZ0Zvcj1cImxldCB0ZXJtIG9mIGdyb3VwTm9kZVRlcm1zKClcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkR3JvdXBUZXJtKCkgPT09IHRlcm1cIj5cbiAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZEdyb3VwVGVybS5zZXQodGVybSlcIj57eyB0ZXJtLm5hbWUgfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBpcy1tLTBcIiAqbmdJZj1cImhhc0RhdGEoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cInNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlXCI+XG4gICAgPGhlLXNlYXJjaC1leHRlbmRcbiAgICAgIGNsYXNzPVwiaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHRlcm1zIGJ5IG5hbWVcIlxuICAgICAgKHNlYXJjaCk9XCJmaWx0ZXJCeVRlcm0oJGV2ZW50KVwiPjwvaGUtc2VhcmNoLWV4dGVuZD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3MoKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInZpZXdJY29uW3ZpZXddXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNOb2RlS2V5QWxsb3dlZCgpXCI+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkVmlldygpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlzLXB4LTMgaXMtcGItM1wiICpuZ1N3aXRjaENhc2U9XCJWaWV3LnRhYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICAgICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGRcIiAqbmdJZj1cImRhdGFLZXlzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj48L3RoPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YUtleSBvZiBkYXRhS2V5cygpOyBsZXQgZGF0YUtleUxhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YSgpW2RhdGFLZXldPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwiZGF0YSgpW2RhdGFLZXldLmxlbmd0aFwiIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cIiFkYXRhS2V5TGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRhdGFLZXkgfCBrZXlUb0xhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+PC90aD5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgbGV0IGRhdGFLZXlMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgbGV0IG5vZGVMYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cIm5vZGUudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJpcy1pdGFsaWMgaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvQ3ljbGUjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgICAgIDwvdGg+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IGxldCBkYXRhS2V5TGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhKClbZGF0YUtleV07IGxldCBub2RlTGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJub2RlLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLnVuaXRzIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxoZS10ZXJtcy11bml0cy1kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXJtXT1cIm5vZGUudmFsdWUudGVybVwiPjwvaGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3ljbGUgb2YgY3ljbGVzKCk7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGN5Y2xlSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJjeWNsZS50ZXJtIHx8IGN5Y2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3ljbGVJbmRleCArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbChjeWNsZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZSBbY3ljbGVdPVwiY3ljbGVzKClbMF1cIj48L2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZT5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgbGV0IGRhdGFLZXlMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyBsZXQgbm9kZUxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXTsgZWxzZSBlbXB0eVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNwPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogbm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXSwgY3ljbGU6IGN5Y2xlLCBrZXk6IGRhdGFLZXkgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlKG5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0udmFsdWUsIG5vZGUudmFsdWUudGVybVsnQGlkJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByZWNpc2lvbjogM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZWZhdWx0OiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS5ub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PVwidmFsdWVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvaGUtZGF0YS10YWJsZT5cblxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJWaWV3LmNoYXJ0XCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaXJzdE5vZGVLZXkoKVwiPlxuICAgICAgICA8aGUtY3ljbGVzLXJlc3VsdCAqbmdTd2l0Y2hDYXNlPVwiQmxhbmtOb2Rlc0tleS5pbnB1dHNcIiBbY3ljbGVzXT1cImN5Y2xlcygpXCI+PC9oZS1jeWNsZXMtcmVzdWx0PlxuICAgICAgICA8aGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJCbGFua05vZGVzS2V5LmVtaXNzaW9uc1wiXG4gICAgICAgICAgW2N5Y2xlc109XCJjeWNsZXMoKVwiPjwvaGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlldy50aW1lbGluZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEN5Y2xlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpcy1weC0zIGlzLXBiLTNcIj5cbiAgICAgICAgPGhlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZVxuICAgICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwidGltZWxpbmVWYWx1ZXMoKVwiXG4gICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZT5cblxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJWaWV3LmxvZ3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RDeWNsZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0yXCIgKm5nSWY9XCJfbm9kZUtleXMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG5vZGVLZXkgb2YgX25vZGVLZXlzKClcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkTm9kZUtleSgpID09PSBub2RlS2V5XCI+XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0ZWROb2RlS2V5LnNldChub2RlS2V5KVwiPnt7IG5vZGVLZXkgfCBrZXlUb0xhYmVsIH19PC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgW25vZGVLZXldPVwic2VsZWN0ZWROb2RlS2V5KClcIlxuICAgICAgICBbbG9nc0tleV09XCJzZWxlY3RlZExvZ3NLZXkoKVwiXG4gICAgICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgICAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cInNlbGVjdGVkUmVjYWxjdWxhdGVkVmFsdWVzKClcIlxuICAgICAgICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlcygpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm1cbiAgKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiY3ljbGVzKClcIlxuICBbZmlsZW5hbWVdPVwiY3N2RmlsZW5hbWUoKVwiXG4gIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cImhlYWRlcktleXMoKVwiXG4gIChjbG9zZWQpPVwic2hvd0Rvd25sb2FkID0gZmFsc2VcIj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJpcy1wdC0zIGhhcy10ZXh0LWNlbnRlcmVkXCI+XG4gICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1wbC0xXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZmlsdGVyVGVybSgpXCI+bWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWE8L3NwYW4+XG4gICAgPHNwYW4+Ljwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dTd2l0Y2hUb1JlY2FsY3VsYXRlZCgpXCI+XG4gICAgICBTd2l0Y2ggdG9cbiAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgIHZlcnNpb24uXG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImN5Y2xlXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImtleVwiPlxuICA8cD5cbiAgICA8Yj57eyBkZWZhdWx0TGFiZWwobm9kZSkgfX08L2I+XG4gIDwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCJcbiAgICBbbm9kZVR5cGVdPVwibm9kZVsnQHR5cGUnXVwiXG4gICAgW2RhdGFLZXldPVwia2V5XCI+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdEN5Y2xlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBpcy1weS0yIGlzLXB4LTNcIiAqbmdJZj1cImN5Y2xlcygpLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBjeWNsZXMoKTsgbGV0IGN5Y2xlSW5kZXggPSBpbmRleFwiIFt2YWx1ZV09XCJjeWNsZUluZGV4XCI+XG4gICAgICAgICAgICB7eyBjeWNsZUluZGV4ICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLW5vZGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLW5vZGVzL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1ub2Rlcy9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBSUwsUUFBUSxFQUlSLFlBQVksRUFJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGFBQWEsRUFBYSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRCxJQUFLLElBS0o7QUFMRCxXQUFLLElBQUk7SUFDUCw0QkFBb0IsQ0FBQTtJQUNwQiw0QkFBb0IsQ0FBQTtJQUNwQix3Q0FBZ0MsQ0FB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S0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVTLGFBQWEsQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNoRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQXRNVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrSUN0SGpDLDh6VUFxUEE7OzJGRC9IYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07eUdBSzNDLFNBQVM7c0JBRFosS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBUUYsWUFBWTtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQge1xuICBJQ3ljbGVKU09OTEQsXG4gIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBQcm9kdWN0LFxuICBOb2RlVHlwZSxcbiAgQW5pbWFsLFxuICBFbWlzc2lvbixcbiAgUHJhY3RpY2UsXG4gIFRlcm1UZXJtVHlwZSxcbiAgRW1pc3Npb25NZXRob2RUaWVyLFxuICBUZXJtLFxuICBUcmFuc2Zvcm1hdGlvblxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gub3JkZXJieSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEJsYW5rTm9kZXNLZXksIGJsYW5rTm9kZSwgZmlsdGVyQmxhbmtOb2RlLCBtZXRob2RUaWVyT3JkZXIgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBsb2dzS2V5IH0gZnJvbSAnLi4vY3ljbGVzLm1vZGVsJztcbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdyb3VwTm9kZXNCeVRlcm0sIElHcm91cGVkS2V5cywgZ3JvdXBwZWRLZXlzIH0gZnJvbSAnLi4vLi4vY29tbW9uL25vZGUtdXRpbHMnO1xuaW1wb3J0IHsgYmFzZVVybCwgZGVmYXVsdExhYmVsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuZW51bSBWaWV3IHtcbiAgdGFibGUgPSAnVGFibGUgdmlldycsXG4gIGNoYXJ0ID0gJ0NoYXJ0IHZpZXcnLFxuICB0aW1lbGluZSA9ICdPcGVyYXRpb25zIFRpbWVsaW5lJyxcbiAgbG9ncyA9ICdSZWNhbGN1bGF0aW9ucyBsb2dzJ1xufVxuXG5jb25zdCB0aW1lbGluZVRlcm1UeXBlID0gW1Rlcm1UZXJtVHlwZS5vcGVyYXRpb25dO1xuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleTtcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ0FuaW1hbCBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuYW5pbWFscztcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ0VtaXNzaW9uIGV4dGVuZHMgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnM7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdJbnB1dCBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuaW5wdXRzO1xufVxuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnUHJhY3RpY2UgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LnByYWN0aWNlcztcbn1cblxuY29uc3Qgdmlld0ljb246IHtcbiAgW3ZpZXcgaW4gVmlld106IHN0cmluZztcbn0gPSB7XG4gIFtWaWV3LmNoYXJ0XTogJ2NoYXJ0LWJhcicsXG4gIFtWaWV3LmxvZ3NdOiAnY2FsY3VsYXRvcicsXG4gIFtWaWV3LnRhYmxlXTogJ2xpc3QnLFxuICBbVmlldy50aW1lbGluZV06ICdsaXN0LWFsdCdcbn07XG5cbmNvbnN0IG5vZGVLZXlWaWV3czoge1xuICBbdHlwZSBpbiBCbGFua05vZGVzS2V5XT86IFZpZXdbXTtcbn0gPSB7XG4gIFtCbGFua05vZGVzS2V5LmFuaW1hbHNdOiBbVmlldy50YWJsZV0sXG4gIFtCbGFua05vZGVzS2V5LmVtaXNzaW9uc106IFtWaWV3LnRhYmxlLCBWaWV3LmNoYXJ0LCBWaWV3LmxvZ3NdLFxuICBbQmxhbmtOb2Rlc0tleS5pbnB1dHNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkucHJvZHVjdHNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkucHJhY3RpY2VzXTogW1ZpZXcudGFibGUsIFZpZXcudGltZWxpbmUsIFZpZXcubG9nc11cbn07XG5cbi8vIGVuYWJsZVxuY29uc3Qgbm9kZUtleUZpbHRlclRlcm1UeXBlczoge1xuICBbdHlwZSBpbiBCbGFua05vZGVzS2V5XT86IFRlcm1UZXJtVHlwZVtdO1xufSA9IHtcbiAgW0JsYW5rTm9kZXNLZXkuZW1pc3Npb25zXTogW1Rlcm1UZXJtVHlwZS5lbWlzc2lvbl1cbn07XG5cbmNvbnN0IGZpbHRlclZhbHVlc1RpbWVsaW5lID0gKHZhbHVlczogYmxhbmtOb2RlW10pID0+IHZhbHVlcy5maWx0ZXIocCA9PiB0aW1lbGluZVRlcm1UeXBlLmluY2x1ZGVzKHAudGVybT8udGVybVR5cGUpKTtcblxudHlwZSBncm91cGVkRW1pc3Npb25zID0ge1xuICBbbWV0aG9kVGllciBpbiBFbWlzc2lvbk1ldGhvZFRpZXJdOiBJR3JvdXBlZEtleXM8RW1pc3Npb24+W107XG59O1xuXG5leHBvcnQgZW51bSBDeWNsZU5vZGVzS2V5R3JvdXAge1xuICBhbmltYWxzID0gJ2FuaW1hbHMnLFxuICB0cmFuc2Zvcm1hdGlvbnMgPSAndHJhbnNmb3JtYXRpb25zJ1xufVxuXG50eXBlIGdyb3VwZWROb2RlID0gQW5pbWFsIHwgVHJhbnNmb3JtYXRpb247XG5cbmNvbnN0IGN5Y2xlR3JvdXBOb2RlID1cbiAgKGN5Y2xlPzogSUN5Y2xlSlNPTkxEKSA9PlxuICAobm9kZT86IGdyb3VwZWROb2RlKTogZ3JvdXBlZE5vZGUgJiB7IG5hbWU6IHN0cmluZzsgJ0BpZCc6IHN0cmluZyB9ID0+ICh7XG4gICAgLi4ubm9kZSxcbiAgICBuYW1lOiBjeWNsZT8ubmFtZSxcbiAgICAnQGlkJzogY3ljbGU/LlsnQGlkJ10gLy8gc2V0IEBpZCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGxvZ3MgZnJvbSB0aGUgQ3ljbGVcbiAgfSk7XG5cbmNvbnN0IGN5Y2xlR3JvdXBOb2RlcyA9IChncm91cEtleTogQ3ljbGVOb2Rlc0tleUdyb3VwLCBjeWNsZT86IElDeWNsZUpTT05MRCk6IGdyb3VwZWROb2RlW10gPT5cbiAgKGN5Y2xlPy5bZ3JvdXBLZXldIHx8IFtdKS5tYXAoY3ljbGVHcm91cE5vZGUoY3ljbGUpKTtcblxuY29uc3QgZmlsdGVyR3JvdXBOb2Rlc0J5VGVybSA9IChncm91cEtleTogQ3ljbGVOb2Rlc0tleUdyb3VwLCBjeWNsZXM6IElDeWNsZUpTT05MRFtdLCB0ZXJtPzogVGVybSk6IGdyb3VwZWROb2RlW10gPT5cbiAgY3ljbGVzLm1hcChjeWNsZSA9PlxuICAgIGN5Y2xlR3JvdXBOb2RlKGN5Y2xlKShcbiAgICAgICgoY3ljbGU/Lltncm91cEtleV0gYXMgZ3JvdXBlZE5vZGVbXSkgfHwgW10pLmZpbHRlcihCb29sZWFuKS5maW5kKG5vZGUgPT4gbm9kZS50ZXJtPy5uYW1lID09PSB0ZXJtPy5uYW1lKVxuICAgIClcbiAgKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtY3ljbGVzLW5vZGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNOb2Rlc0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBfZGF0YVN0YXRlID0gc2lnbmFsKERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIEJsYW5rTm9kZXNLZXkgPSBCbGFua05vZGVzS2V5O1xuICBwcm90ZWN0ZWQgZmlyc3ROb2RlS2V5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fbm9kZUtleXMoKT8uWzBdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZUtleSA9IHNpZ25hbCh1bmRlZmluZWQgYXMgQmxhbmtOb2Rlc0tleSk7XG5cbiAgcHJvdGVjdGVkIF9ub2RlS2V5cyA9IHNpZ25hbChbXSBhcyBCbGFua05vZGVzS2V5W10pO1xuICBASW5wdXQoKVxuICBzZXQgbm9kZUtleXModmFsdWU6IEJsYW5rTm9kZXNLZXlbXSkge1xuICAgIHRoaXMuX25vZGVLZXlzLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHcm91cFRlcm0gPSBzaWduYWwodW5kZWZpbmVkIGFzIFRlcm0pO1xuICBwcm90ZWN0ZWQgX25vZGVLZXlHcm91cCA9IHNpZ25hbCh1bmRlZmluZWQgYXMgQ3ljbGVOb2Rlc0tleUdyb3VwKTtcbiAgQElucHV0KClcbiAgc2V0IG5vZGVLZXlHcm91cCh2YWx1ZTogQ3ljbGVOb2Rlc0tleUdyb3VwKSB7XG4gICAgdGhpcy5fbm9kZUtleUdyb3VwLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlO1xuICBwcm90ZWN0ZWQgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwcm90ZWN0ZWQgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGhlYWRlcktleXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgJ2N5Y2xlLmlkJyxcbiAgICAnY3ljbGUuQGlkJyxcbiAgICAndHJhbnNmb3JtYXRpb24uaWQnLFxuICAgICd0cmFuc2Zvcm1hdGlvbi5AaWQnLFxuICAgIC4uLnRoaXMuX25vZGVLZXlzKCkuZmxhdE1hcChrZXkgPT4gW2BjeWNsZS4ke2tleX0uYCwgYHRyYW5zZm9ybWF0aW9uLiR7a2V5fS5gXSlcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zID8gdGhpcy5jeWNsZXMoKS5sZW5ndGggPiAxIDogdHJ1ZSxcbiAgICAgICAgW1ZpZXcubG9nc106ICF0aGlzLmlzT3JpZ2luYWwoKSxcbiAgICAgICAgW1ZpZXcudGFibGVdOiB0cnVlLFxuICAgICAgICBbVmlldy50aW1lbGluZV06IHRoaXMuZW5hYmxlVGltZWxpbmUoKVxuICAgICAgfSkgYXMgeyBbdmlldyBpbiBWaWV3XTogYm9vbGVhbiB9XG4gICk7XG4gIHByb3RlY3RlZCB2aWV3cyA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlWaWV3c1t0aGlzLnNlbGVjdGVkTm9kZUtleSgpXT8uZmlsdGVyKHZpZXcgPT4gdGhpcy5zaG93VmlldygpW3ZpZXddKSA/PyBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFZpZXcgPSBzaWduYWwoVmlldy50YWJsZSk7XG5cbiAgcHJpdmF0ZSBfYWxsTm9kZXMgPSB0b1NpZ25hbCh0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZCQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSkpO1xuICBwcml2YXRlIG9yaWdpbmFsTm9kZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbGxOb2RlcygpPy5tYXAoZGF0YSA9PiBkYXRhW0RhdGFTdGF0ZS5vcmlnaW5hbF0pIHx8IFtdKTtcbiAgcHJpdmF0ZSBjdXJyZW50Tm9kZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbGxOb2RlcygpPy5tYXAoZGF0YSA9PiBkYXRhW3RoaXMuX2RhdGFTdGF0ZSgpXSkgfHwgW10pO1xuXG4gIC8vIGNhbiBiZSBDeWNsZSBvciBUcmFuc2Zvcm1hdGlvblxuICBwcm90ZWN0ZWQgb3JpZ2luYWxDeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX25vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5fbm9kZUtleUdyb3VwKCksIHRoaXMub3JpZ2luYWxOb2RlcygpLCB0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkpXG4gICAgICA6IHRoaXMub3JpZ2luYWxOb2RlcygpXG4gICk7XG4gIHByb3RlY3RlZCBjeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX25vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5fbm9kZUtleUdyb3VwKCksIHRoaXMuY3VycmVudE5vZGVzKCksIHRoaXMuc2VsZWN0ZWRHcm91cFRlcm0oKSlcbiAgICAgIDogdGhpcy5jdXJyZW50Tm9kZXMoKVxuICApO1xuXG4gIHByaXZhdGUgc2VsZWN0ZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSBvZ2lyaW5hbFNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9yaWdpbmFsQ3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN5Y2xlcygpPy5bdGhpcy5zZWxlY3RlZEluZGV4KCldKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTG9nc0tleSA9IGNvbXB1dGVkKCgpID0+IGxvZ3NLZXkodGhpcy5zZWxlY3RlZEN5Y2xlKCkpKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkQ3ljbGUoKT8uW3RoaXMuc2VsZWN0ZWROb2RlS2V5KCldIHx8IFtdKTtcbiAgLy8gVE9ETzogaGFuZGxlIHRyYW5zZm9ybWF0aW9uIGFuZCBub24taW5kZXhlZCBub2RlcyBvbiBDRVxuICBwcm90ZWN0ZWQgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByaXZhdGUgaXNPcmlnaW5hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2RhdGFTdGF0ZSgpID09PSBEYXRhU3RhdGUub3JpZ2luYWwpO1xuICBwcml2YXRlIG9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuaXNPcmlnaW5hbCgpID8gbnVsbCA6IHRoaXMub3JpZ2luYWxDeWNsZXMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmN5Y2xlcygpLnNvbWUoY3ljbGUgPT4gIWN5Y2xlLmFnZ3JlZ2F0ZWQpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHRpbWVsaW5lVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gZmlsdGVyVmFsdWVzVGltZWxpbmUodGhpcy5zZWxlY3RlZEN5Y2xlKCk/Llt0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSB8fCBbXSkpO1xuICBwcml2YXRlIGVuYWJsZVRpbWVsaW5lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50aW1lbGluZVZhbHVlcygpLmxlbmd0aCA+IDApO1xuXG4gIHByb3RlY3RlZCBpc05vZGVLZXlBbGxvd2VkID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleVZpZXdzW3RoaXMuZmlyc3ROb2RlS2V5KCldLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRWaWV3KCkpKTtcblxuICBwcml2YXRlIGdyb3VwZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+IGN5Y2xlR3JvdXBOb2Rlcyh0aGlzLl9ub2RlS2V5R3JvdXAoKSwgdGhpcy5vcmlnaW5hbE5vZGVzKCk/LlswXSkpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOb2RlVGVybXMgPSBjb21wdXRlZCgoKSA9PiB1bmlxdWUodGhpcy5ncm91cGVkTm9kZXMoKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSkpO1xuICBwcm90ZWN0ZWQgaXNHcm91cE5vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9ub2RlS2V5R3JvdXAoKSAmJiB0aGlzLmdyb3VwZWROb2RlcygpPy5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgaXNFbWlzc2lvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zKTtcblxuICBwcm90ZWN0ZWQgZGF0YSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pc0VtaXNzaW9uKClcbiAgICAgID8gdGhpcy5ncm91cEVtaXNzaW9ucygpXG4gICAgICA6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLl9ub2RlS2V5cygpLm1hcChub2RlS2V5ID0+IFtub2RlS2V5LCB0aGlzLmdyb3VwTm9kZXNCeUtleSh7IG5vZGVLZXkgfSldKSlcbiAgKTtcbiAgcHJvdGVjdGVkIGRhdGFLZXlzID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5kYXRhKCkpKTtcblxuICBwcm90ZWN0ZWQgaGFzRGF0YSA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXModGhpcy5kYXRhKCkpLmZsYXQoKS5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyVGVybVR5cGVzID0gY29tcHV0ZWQoKCkgPT4gbm9kZUtleUZpbHRlclRlcm1UeXBlc1t0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICBwcm90ZWN0ZWQgY3N2RmlsZW5hbWUgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLl9ub2RlS2V5cygpLmpvaW4oJy0nKX0uY3N2YCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlU3RvcmVTZXJ2aWNlOiBIZU5vZGVTdG9yZVNlcnZpY2UpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBsb2dzIGRvZXMgbm90IHJlbWFpbiBkaXNwbGF5ZWQgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBvcmlnaW5hbCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldygpID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQoVmlldy50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZUtleSgpIHx8ICF0aGlzLl9ub2RlS2V5cygpLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVLZXkuc2V0KHRoaXMuZmlyc3ROb2RlS2V5KCkpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChWaWV3LnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpIHx8ICF0aGlzLmdyb3VwTm9kZVRlcm1zKCkuaW5jbHVkZXModGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cFRlcm0uc2V0KHRoaXMuZ3JvdXBOb2RlVGVybXMoKVswXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cE5vZGVzQnlLZXk8XG4gICAgVCBleHRlbmRzIElDeWNsZUNvbmZpZyxcbiAgICBSID0gVCBleHRlbmRzIElDeWNsZUNvbmZpZ0FuaW1hbFxuICAgICAgPyBBbmltYWxcbiAgICAgIDogVCBleHRlbmRzIElDeWNsZUNvbmZpZ0VtaXNzaW9uXG4gICAgICA/IEVtaXNzaW9uXG4gICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdJbnB1dFxuICAgICAgPyBIZXN0aWFJbnB1dFxuICAgICAgOiBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnUHJhY3RpY2VcbiAgICAgID8gUHJhY3RpY2VcbiAgICAgIDogUHJvZHVjdFxuICA+KHsgbm9kZUtleSB9OiBUKTogSUdyb3VwZWRLZXlzPFI+W10ge1xuICAgIGNvbnN0IG5vZGVzUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlLCBSPihcbiAgICAgIHRoaXMuY3ljbGVzKCksXG4gICAgICBub2RlS2V5LFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlcygpLFxuICAgICAgZmlsdGVyQmxhbmtOb2RlKHRoaXMuZmlsdGVyVGVybSgpKVxuICAgICk7XG4gICAgcmV0dXJuIG9yZGVyQnkoZ3JvdXBwZWRLZXlzKG5vZGVzUGVyQ3ljbGUpLCBbJ2tleSddLCBbJ2FzYyddKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBFbWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW1pc3Npb25zUGVyQ3ljbGUgPSBncm91cE5vZGVzQnlUZXJtPElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlLCBFbWlzc2lvbj4oXG4gICAgICB0aGlzLmN5Y2xlcygpLFxuICAgICAgQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMsXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICBjb25zdCB2YWx1ZXM6IElHcm91cGVkS2V5czxFbWlzc2lvbj5bXSA9IG9yZGVyQnkoZ3JvdXBwZWRLZXlzKGVtaXNzaW9uc1BlckN5Y2xlKSwgWydrZXknXSwgWydhc2MnXSk7XG4gICAgY29uc3QgbWV0aG9kVGllcnMgPSBvcmRlckJ5KFxuICAgICAgdW5pcXVlKHZhbHVlcy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllcikpLm1hcChtZXRob2RUaWVyID0+ICh7XG4gICAgICAgIG1ldGhvZFRpZXIsXG4gICAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKG1ldGhvZFRpZXIpXG4gICAgICB9KSksXG4gICAgICBbJ21ldGhvZFRpZXJPcmRlciddLFxuICAgICAgWydhc2MnXVxuICAgICk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIG1ldGhvZFRpZXJzLm1hcCgoeyBtZXRob2RUaWVyIH0pID0+IFttZXRob2RUaWVyLCB2YWx1ZXMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlLm1ldGhvZFRpZXIgPT09IG1ldGhvZFRpZXIpXSlcbiAgICApIGFzIGdyb3VwZWRFbWlzc2lvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyOiBhbnksIGNvbnRleHQ6IGFueSkge1xuICAgIHJldHVybiBwb3BvdmVyLmlzT3BlbigpID8gcG9wb3Zlci5jbG9zZSgpIDogcG9wb3Zlci5vcGVuKGNvbnRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbHRlckJ5VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlclRlcm0uc2V0KHRlcm0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYnMgaXMtbWItMVwiICpuZ0lmPVwiaXNHcm91cE5vZGUoKVwiPlxuICA8dWw+XG4gICAgPGxpICpuZ0Zvcj1cImxldCB0ZXJtIG9mIGdyb3VwTm9kZVRlcm1zKClcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkR3JvdXBUZXJtKCkgPT09IHRlcm1cIj5cbiAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZEdyb3VwVGVybS5zZXQodGVybSlcIj57eyB0ZXJtLm5hbWUgfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBpcy1tLTBcIiAqbmdJZj1cImhhc0RhdGEoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cInNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlXCI+XG4gICAgPGhlLXNlYXJjaC1leHRlbmRcbiAgICAgIGNsYXNzPVwiaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHRlcm1zIGJ5IG5hbWVcIlxuICAgICAgKHNlYXJjaCk9XCJmaWx0ZXJCeVRlcm0oJGV2ZW50KVwiPjwvaGUtc2VhcmNoLWV4dGVuZD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCJ2aWV3cygpPy5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3MoKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInZpZXdJY29uW3ZpZXddXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNOb2RlS2V5QWxsb3dlZCgpXCI+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkVmlldygpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlzLXB4LTMgaXMtcGItM1wiICpuZ1N3aXRjaENhc2U9XCJWaWV3LnRhYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICAgICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LWJvbGRcIiAqbmdJZj1cImRhdGFLZXlzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj48L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj48L3RoPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YUtleSBvZiBkYXRhS2V5cygpOyBsZXQgZGF0YUtleUxhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YSgpW2RhdGFLZXldPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwiZGF0YSgpW2RhdGFLZXldLmxlbmd0aFwiIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cIiFkYXRhS2V5TGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRhdGFLZXkgfCBrZXlUb0xhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+PC90aD5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgbGV0IGRhdGFLZXlMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgbGV0IG5vZGVMYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cIm5vZGUudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJpcy1pdGFsaWMgaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvQ3ljbGUjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgICAgIDwvdGg+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhS2V5IG9mIGRhdGFLZXlzKCk7IGxldCBkYXRhS2V5TGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhKClbZGF0YUtleV07IGxldCBub2RlTGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJub2RlLnZhbHVlLnRlcm0udW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLnVuaXRzIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxoZS10ZXJtcy11bml0cy1kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXJtXT1cIm5vZGUudmFsdWUudGVybVwiPjwvaGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3ljbGUgb2YgY3ljbGVzKCk7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGN5Y2xlSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJjeWNsZS50ZXJtIHx8IGN5Y2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3ljbGVJbmRleCArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbChjeWNsZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZSBbY3ljbGVdPVwiY3ljbGVzKClbMF1cIj48L2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZT5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgbGV0IGRhdGFLZXlMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyBsZXQgbm9kZUxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXTsgZWxzZSBlbXB0eVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNwPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVQb3BvdmVyKHAsIHsgZGF0YTogbm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXSwgY3ljbGU6IGN5Y2xlLCBrZXk6IGRhdGFLZXkgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlKG5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0udmFsdWUsIG5vZGUudmFsdWUudGVybVsnQGlkJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByZWNpc2lvbjogM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZWZhdWx0OiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS5ub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PVwidmFsdWVcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvaGUtZGF0YS10YWJsZT5cblxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJWaWV3LmNoYXJ0XCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaXJzdE5vZGVLZXkoKVwiPlxuICAgICAgICA8aGUtY3ljbGVzLXJlc3VsdCAqbmdTd2l0Y2hDYXNlPVwiQmxhbmtOb2Rlc0tleS5pbnB1dHNcIiBbY3ljbGVzXT1cImN5Y2xlcygpXCI+PC9oZS1jeWNsZXMtcmVzdWx0PlxuICAgICAgICA8aGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJCbGFua05vZGVzS2V5LmVtaXNzaW9uc1wiXG4gICAgICAgICAgW2N5Y2xlc109XCJjeWNsZXMoKVwiPjwvaGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiVmlldy50aW1lbGluZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEN5Y2xlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpcy1weC0zIGlzLXBiLTNcIj5cbiAgICAgICAgPGhlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZVxuICAgICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwidGltZWxpbmVWYWx1ZXMoKVwiXG4gICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZT5cblxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJWaWV3LmxvZ3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RDeWNsZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0yXCIgKm5nSWY9XCJfbm9kZUtleXMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG5vZGVLZXkgb2YgX25vZGVLZXlzKClcIiBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkTm9kZUtleSgpID09PSBub2RlS2V5XCI+XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0ZWROb2RlS2V5LnNldChub2RlS2V5KVwiPnt7IG5vZGVLZXkgfCBrZXlUb0xhYmVsIH19PC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgW25vZGVLZXldPVwic2VsZWN0ZWROb2RlS2V5KClcIlxuICAgICAgICBbbG9nc0tleV09XCJzZWxlY3RlZExvZ3NLZXkoKVwiXG4gICAgICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgICAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cInNlbGVjdGVkUmVjYWxjdWxhdGVkVmFsdWVzKClcIlxuICAgICAgICBbZmlsdGVyVGVybVR5cGVzXT1cImZpbHRlclRlcm1UeXBlcygpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm1cbiAgKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiY3ljbGVzKClcIlxuICBbZmlsZW5hbWVdPVwiY3N2RmlsZW5hbWUoKVwiXG4gIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cImhlYWRlcktleXMoKVwiXG4gIChjbG9zZWQpPVwic2hvd0Rvd25sb2FkID0gZmFsc2VcIj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJpcy1wdC0zIGhhcy10ZXh0LWNlbnRlcmVkXCI+XG4gICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1wbC0xXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZmlsdGVyVGVybSgpXCI+bWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWE8L3NwYW4+XG4gICAgPHNwYW4+Ljwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dTd2l0Y2hUb1JlY2FsY3VsYXRlZCgpXCI+XG4gICAgICBTd2l0Y2ggdG9cbiAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgIHZlcnNpb24uXG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImN5Y2xlXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImtleVwiPlxuICA8cD5cbiAgICA8Yj57eyBkZWZhdWx0TGFiZWwobm9kZSkgfX08L2I+XG4gIDwvcD5cbiAgPGhlLW5vZGUtdmFsdWUtZGV0YWlsc1xuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCJcbiAgICBbbm9kZVR5cGVdPVwibm9kZVsnQHR5cGUnXVwiXG4gICAgW2RhdGFLZXldPVwia2V5XCI+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdEN5Y2xlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBpcy1weS0yIGlzLXB4LTNcIiAqbmdJZj1cImN5Y2xlcygpLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBjeWNsZXMoKTsgbGV0IGN5Y2xlSW5kZXggPSBpbmRleFwiIFt2YWx1ZV09XCJjeWNsZUluZGV4XCI+XG4gICAgICAgICAgICB7eyBjeWNsZUluZGV4ICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|