@hestia-earth/ui-components 0.27.62 → 0.27.63
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/cycles/cycles-completeness/cycles-completeness.component.d.ts +27 -27
- package/cycles/cycles-nodes/cycles-nodes.component.d.ts +47 -46
- package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +14 -8
- package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +13 -6
- package/esm2022/files/files-error.model.mjs +6 -1
- package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +13 -6
- package/esm2022/sites/sites-nodes/sites-nodes.component.mjs +17 -9
- package/fesm2022/hestia-earth-ui-components.mjs +55 -22
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +38 -37
- package/package.json +1 -1
- package/sites/sites-nodes/sites-nodes.component.d.ts +39 -38
|
@@ -7,34 +7,33 @@ declare enum View {
|
|
|
7
7
|
logs = "Recalculations logs"
|
|
8
8
|
}
|
|
9
9
|
export declare class CyclesCompletenessComponent {
|
|
10
|
-
private
|
|
10
|
+
private readonly modalService;
|
|
11
|
+
private readonly nodeStoreService;
|
|
11
12
|
protected readonly faDownload: IconDefinition;
|
|
12
|
-
protected dataState: import("@angular/core").InputSignal<DataState>;
|
|
13
|
-
protected schemaBaseUrl: string;
|
|
14
|
-
protected defaultLabel: (node?: any) => any;
|
|
15
|
-
protected keyToLabel: (key: string) => string;
|
|
16
|
-
protected getCompleteness: (cycle: any) => any;
|
|
17
|
-
protected
|
|
18
|
-
protected
|
|
19
|
-
protected
|
|
20
|
-
protected View: typeof View;
|
|
21
|
-
protected viewIcon: {
|
|
13
|
+
protected readonly dataState: import("@angular/core").InputSignal<DataState>;
|
|
14
|
+
protected readonly schemaBaseUrl: string;
|
|
15
|
+
protected readonly defaultLabel: (node?: any) => any;
|
|
16
|
+
protected readonly keyToLabel: (key: string) => string;
|
|
17
|
+
protected readonly getCompleteness: (cycle: any) => any;
|
|
18
|
+
protected readonly nodeKey = NonBlankNodesKey.completeness;
|
|
19
|
+
protected readonly View: typeof View;
|
|
20
|
+
protected readonly viewIcon: {
|
|
22
21
|
"Table view": IconDefinition;
|
|
23
22
|
"Recalculations logs": IconDefinition;
|
|
24
23
|
};
|
|
25
|
-
private showView;
|
|
26
|
-
protected views: import("@angular/core").Signal<View[]>;
|
|
27
|
-
protected selectedView: import("@angular/core").WritableSignal<View>;
|
|
28
|
-
private originalCycles;
|
|
29
|
-
private _allCycles;
|
|
30
|
-
protected cycles: import("@angular/core").Signal<ICycleJSONLD[]>;
|
|
31
|
-
private selectedIndex;
|
|
32
|
-
private ogirinalSelectedCycle;
|
|
33
|
-
private selectedCycle;
|
|
34
|
-
protected selectedLogsKey: import("@angular/core").Signal<any>;
|
|
35
|
-
protected selectedOriginalValues: import("@angular/core").Signal<any>;
|
|
36
|
-
protected selectedRecalculatedValues: import("@angular/core").Signal<any>;
|
|
37
|
-
protected selectedNode: import("@angular/core").Signal<{
|
|
24
|
+
private readonly showView;
|
|
25
|
+
protected readonly views: import("@angular/core").Signal<View[]>;
|
|
26
|
+
protected readonly selectedView: import("@angular/core").WritableSignal<View>;
|
|
27
|
+
private readonly originalCycles;
|
|
28
|
+
private readonly _allCycles;
|
|
29
|
+
protected readonly cycles: import("@angular/core").Signal<ICycleJSONLD[]>;
|
|
30
|
+
private readonly selectedIndex;
|
|
31
|
+
private readonly ogirinalSelectedCycle;
|
|
32
|
+
private readonly selectedCycle;
|
|
33
|
+
protected readonly selectedLogsKey: import("@angular/core").Signal<any>;
|
|
34
|
+
protected readonly selectedOriginalValues: import("@angular/core").Signal<any>;
|
|
35
|
+
protected readonly selectedRecalculatedValues: import("@angular/core").Signal<any>;
|
|
36
|
+
protected readonly selectedNode: import("@angular/core").Signal<{
|
|
38
37
|
'@type': NodeType;
|
|
39
38
|
type: NodeType;
|
|
40
39
|
dataState: DataState;
|
|
@@ -89,9 +88,9 @@ export declare class CyclesCompletenessComponent {
|
|
|
89
88
|
'@id': string;
|
|
90
89
|
name: string;
|
|
91
90
|
}>;
|
|
92
|
-
protected hasData: import("@angular/core").Signal<number>;
|
|
93
|
-
protected isOriginal: import("@angular/core").Signal<boolean>;
|
|
94
|
-
protected completenessKeys: import("@angular/core").Signal<string[]>;
|
|
91
|
+
protected readonly hasData: import("@angular/core").Signal<number>;
|
|
92
|
+
protected readonly isOriginal: import("@angular/core").Signal<boolean>;
|
|
93
|
+
protected readonly completenessKeys: import("@angular/core").Signal<string[]>;
|
|
95
94
|
constructor();
|
|
96
95
|
protected trackById(_index: number, item: ICycleJSONLD): string;
|
|
97
96
|
protected selectIndex({ target: { value } }: {
|
|
@@ -99,6 +98,7 @@ export declare class CyclesCompletenessComponent {
|
|
|
99
98
|
value: any;
|
|
100
99
|
};
|
|
101
100
|
}): void;
|
|
101
|
+
protected showDownload(): void;
|
|
102
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<CyclesCompletenessComponent, never>;
|
|
103
103
|
static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessComponent, "he-cycles-completeness", never, { "dataState": { "alias": "dataState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
104
104
|
}
|
|
@@ -18,42 +18,42 @@ export declare enum CycleNodesKeyGroup {
|
|
|
18
18
|
}
|
|
19
19
|
type groupedNode = Animal | Transformation;
|
|
20
20
|
export declare class CyclesNodesComponent {
|
|
21
|
+
private readonly modalService;
|
|
21
22
|
private nodeStoreService;
|
|
22
23
|
protected readonly faDownload: IconDefinition;
|
|
23
|
-
protected dataState: import("@angular/core").InputSignal<DataState>;
|
|
24
|
-
protected nodeKeys: import("@angular/core").InputSignal<BlankNodesKey[]>;
|
|
25
|
-
protected nodeKeyGroup: import("@angular/core").InputSignal<CycleNodesKeyGroup>;
|
|
26
|
-
protected BlankNodesKey: typeof BlankNodesKey;
|
|
27
|
-
protected firstNodeKey: import("@angular/core").Signal<BlankNodesKey>;
|
|
28
|
-
protected selectedNodeKey: import("@angular/core").WritableSignal<BlankNodesKey>;
|
|
29
|
-
protected selectedGroupTerm: import("@angular/core").WritableSignal<Term>;
|
|
30
|
-
protected schemaBaseUrl: string;
|
|
31
|
-
protected propertyValue: (value: import("@hestia-earth/utils/dist/term").propertyValueType | import("@hestia-earth/utils/dist/term").propertyValueType[], termId?: string) => import("@hestia-earth/utils/dist/term").propertyValueType;
|
|
32
|
-
protected defaultLabel: (node?: any) => any;
|
|
33
|
-
protected
|
|
34
|
-
protected
|
|
35
|
-
protected
|
|
36
|
-
protected viewIcon: {
|
|
24
|
+
protected readonly dataState: import("@angular/core").InputSignal<DataState>;
|
|
25
|
+
protected readonly nodeKeys: import("@angular/core").InputSignal<BlankNodesKey[]>;
|
|
26
|
+
protected readonly nodeKeyGroup: import("@angular/core").InputSignal<CycleNodesKeyGroup>;
|
|
27
|
+
protected readonly BlankNodesKey: typeof BlankNodesKey;
|
|
28
|
+
protected readonly firstNodeKey: import("@angular/core").Signal<BlankNodesKey>;
|
|
29
|
+
protected readonly selectedNodeKey: import("@angular/core").WritableSignal<BlankNodesKey>;
|
|
30
|
+
protected readonly selectedGroupTerm: import("@angular/core").WritableSignal<Term>;
|
|
31
|
+
protected readonly schemaBaseUrl: string;
|
|
32
|
+
protected readonly propertyValue: (value: import("@hestia-earth/utils/dist/term").propertyValueType | import("@hestia-earth/utils/dist/term").propertyValueType[], termId?: string) => import("@hestia-earth/utils/dist/term").propertyValueType;
|
|
33
|
+
protected readonly defaultLabel: (node?: any) => any;
|
|
34
|
+
protected readonly headerKeys: import("@angular/core").Signal<string[]>;
|
|
35
|
+
protected readonly View: typeof View;
|
|
36
|
+
protected readonly viewIcon: {
|
|
37
37
|
"Table view": IconDefinition;
|
|
38
38
|
"Chart view": IconDefinition;
|
|
39
39
|
"Operations Timeline": IconDefinition;
|
|
40
40
|
"Recalculations logs": IconDefinition;
|
|
41
41
|
};
|
|
42
|
-
private showView;
|
|
43
|
-
protected views: import("@angular/core").Signal<View[]>;
|
|
44
|
-
protected selectedView: import("@angular/core").WritableSignal<View>;
|
|
45
|
-
private _allNodes;
|
|
46
|
-
private originalNodes;
|
|
47
|
-
private currentNodes;
|
|
48
|
-
protected originalCycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
|
|
49
|
-
protected cycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
|
|
50
|
-
private selectedIndex;
|
|
51
|
-
private ogirinalSelectedCycle;
|
|
52
|
-
private selectedCycle;
|
|
53
|
-
protected selectedLogsKey: import("@angular/core").Signal<any>;
|
|
54
|
-
protected selectedOriginalValues: import("@angular/core").Signal<any>;
|
|
55
|
-
protected selectedRecalculatedValues: import("@angular/core").Signal<any>;
|
|
56
|
-
protected selectedNode: import("@angular/core").Signal<{
|
|
42
|
+
private readonly showView;
|
|
43
|
+
protected readonly views: import("@angular/core").Signal<View[]>;
|
|
44
|
+
protected readonly selectedView: import("@angular/core").WritableSignal<View>;
|
|
45
|
+
private readonly _allNodes;
|
|
46
|
+
private readonly originalNodes;
|
|
47
|
+
private readonly currentNodes;
|
|
48
|
+
protected readonly originalCycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
|
|
49
|
+
protected readonly cycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
|
|
50
|
+
private readonly selectedIndex;
|
|
51
|
+
private readonly ogirinalSelectedCycle;
|
|
52
|
+
private readonly selectedCycle;
|
|
53
|
+
protected readonly selectedLogsKey: import("@angular/core").Signal<any>;
|
|
54
|
+
protected readonly selectedOriginalValues: import("@angular/core").Signal<any>;
|
|
55
|
+
protected readonly selectedRecalculatedValues: import("@angular/core").Signal<any>;
|
|
56
|
+
protected readonly selectedNode: import("@angular/core").Signal<{
|
|
57
57
|
'@type': NodeType;
|
|
58
58
|
type: NodeType;
|
|
59
59
|
dataState: DataState;
|
|
@@ -161,25 +161,25 @@ export declare class CyclesNodesComponent {
|
|
|
161
161
|
updatedVersion?: string[];
|
|
162
162
|
id?: string;
|
|
163
163
|
}>;
|
|
164
|
-
private isOriginal;
|
|
165
|
-
private originalValues;
|
|
166
|
-
private hasRecalculatedNodes;
|
|
167
|
-
protected showSwitchToRecalculated: import("@angular/core").Signal<boolean>;
|
|
168
|
-
protected timelineValues: import("@angular/core").Signal<blankNodesType[]>;
|
|
169
|
-
private enableTimeline;
|
|
170
|
-
protected isNodeKeyAllowed: import("@angular/core").Signal<boolean>;
|
|
171
|
-
private groupedNodes;
|
|
172
|
-
protected groupNodeTerms: import("@angular/core").Signal<Term[]>;
|
|
173
|
-
protected isGroupNode: import("@angular/core").Signal<boolean>;
|
|
174
|
-
protected isEmission: import("@angular/core").Signal<boolean>;
|
|
175
|
-
protected data: import("@angular/core").Signal<groupedEmissions | {
|
|
164
|
+
private readonly isOriginal;
|
|
165
|
+
private readonly originalValues;
|
|
166
|
+
private readonly hasRecalculatedNodes;
|
|
167
|
+
protected readonly showSwitchToRecalculated: import("@angular/core").Signal<boolean>;
|
|
168
|
+
protected readonly timelineValues: import("@angular/core").Signal<blankNodesType[]>;
|
|
169
|
+
private readonly enableTimeline;
|
|
170
|
+
protected readonly isNodeKeyAllowed: import("@angular/core").Signal<boolean>;
|
|
171
|
+
private readonly groupedNodes;
|
|
172
|
+
protected readonly groupNodeTerms: import("@angular/core").Signal<Term[]>;
|
|
173
|
+
protected readonly isGroupNode: import("@angular/core").Signal<boolean>;
|
|
174
|
+
protected readonly isEmission: import("@angular/core").Signal<boolean>;
|
|
175
|
+
protected readonly data: import("@angular/core").Signal<groupedEmissions | {
|
|
176
176
|
[k: string]: IGroupedKeys<Product>[];
|
|
177
177
|
}>;
|
|
178
|
-
protected dataKeys: import("@angular/core").Signal<string[]>;
|
|
179
|
-
protected hasData: import("@angular/core").Signal<boolean>;
|
|
180
|
-
protected filterTermTypes: import("@angular/core").Signal<TermTermType[]>;
|
|
181
|
-
protected filterTerm: import("@angular/core").WritableSignal<string>;
|
|
182
|
-
protected csvFilename: import("@angular/core").Signal<string>;
|
|
178
|
+
protected readonly dataKeys: import("@angular/core").Signal<string[]>;
|
|
179
|
+
protected readonly hasData: import("@angular/core").Signal<boolean>;
|
|
180
|
+
protected readonly filterTermTypes: import("@angular/core").Signal<TermTermType[]>;
|
|
181
|
+
protected readonly filterTerm: import("@angular/core").WritableSignal<string>;
|
|
182
|
+
protected readonly csvFilename: import("@angular/core").Signal<string>;
|
|
183
183
|
constructor();
|
|
184
184
|
private groupNodesByKey;
|
|
185
185
|
private groupEmissions;
|
|
@@ -190,6 +190,7 @@ export declare class CyclesNodesComponent {
|
|
|
190
190
|
};
|
|
191
191
|
}): void;
|
|
192
192
|
protected cycleNode(cycle: ICycleJSONLD | groupedNode): Term | ICycleJSONLD | groupedNode;
|
|
193
|
+
protected showDownload(): void;
|
|
193
194
|
static ɵfac: i0.ɵɵFactoryDeclaration<CyclesNodesComponent, never>;
|
|
194
195
|
static ɵcmp: i0.ɵɵComponentDeclaration<CyclesNodesComponent, "he-cycles-nodes", never, { "dataState": { "alias": "dataState"; "required": false; "isSignal": true; }; "nodeKeys": { "alias": "nodeKeys"; "required": true; "isSignal": true; }; "nodeKeyGroup": { "alias": "nodeKeyGroup"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
195
196
|
}
|
|
@@ -3,7 +3,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
|
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
4
|
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
5
5
|
import { faCalculator, faDownload, faList } from '@fortawesome/free-solid-svg-icons';
|
|
6
|
-
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
|
|
6
|
+
import { NgbModal, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
|
|
7
7
|
import { DataState } from '@hestia-earth/api';
|
|
8
8
|
import { NodeType, NonBlankNodesKey } from '@hestia-earth/schema';
|
|
9
9
|
import { keyToLabel } from '@hestia-earth/utils';
|
|
@@ -33,6 +33,7 @@ const headerKeys = ['cycle.id', 'cycle.@id', 'cycle.completeness.'];
|
|
|
33
33
|
const getCompleteness = (cycle) => cycle?.completeness || cycle?.dataCompleteness || {};
|
|
34
34
|
export class CyclesCompletenessComponent {
|
|
35
35
|
constructor() {
|
|
36
|
+
this.modalService = inject(NgbModal);
|
|
36
37
|
this.nodeStoreService = inject(HeNodeStoreService);
|
|
37
38
|
this.faDownload = faDownload;
|
|
38
39
|
this.dataState = input(DataState.original);
|
|
@@ -40,8 +41,6 @@ export class CyclesCompletenessComponent {
|
|
|
40
41
|
this.defaultLabel = defaultLabel;
|
|
41
42
|
this.keyToLabel = keyToLabel;
|
|
42
43
|
this.getCompleteness = getCompleteness;
|
|
43
|
-
this.headerKeys = headerKeys;
|
|
44
|
-
this.showDownload = false;
|
|
45
44
|
this.nodeKey = NonBlankNodesKey.completeness;
|
|
46
45
|
this.View = View;
|
|
47
46
|
this.viewIcon = viewIcon;
|
|
@@ -84,8 +83,16 @@ export class CyclesCompletenessComponent {
|
|
|
84
83
|
selectIndex({ target: { value } }) {
|
|
85
84
|
this.selectedIndex.set(+value);
|
|
86
85
|
}
|
|
86
|
+
showDownload() {
|
|
87
|
+
const instance = this.modalService.open(NodeCsvExportConfirmComponent);
|
|
88
|
+
const component = instance.componentInstance;
|
|
89
|
+
component.nodes.set(this.cycles());
|
|
90
|
+
component.filename.set('completeness.csv');
|
|
91
|
+
component.isUpload.set(false);
|
|
92
|
+
component.headerKeys.set(headerKeys);
|
|
93
|
+
}
|
|
87
94
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CyclesCompletenessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
88
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: CyclesCompletenessComponent, isStandalone: true, selector: "he-cycles-completeness", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button
|
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: CyclesCompletenessComponent, isStandalone: true, selector: "he-cycles-completeness", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (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 }\n </div>\n </div>\n }\n</div>\n\n@switch (selectedView()) {\n @case (View.table) {\n <div class=\"px-3 pb-3\">\n @if (hasData()) {\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 @for (completeness of completenessKeys(); track completeness) {\n <th [attr.title]=\"completeness\">\n <a [href]=\"schemaBaseUrl + '/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(i, cycle); 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 @for (key of completenessKeys(); track key) {\n <td class=\"is-nowrap\">\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 }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n }\n </div>\n }\n @case (View.logs) {\n @if (cycles().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\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 @for (value of cycles(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: 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: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showDeleted"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
89
96
|
}
|
|
90
97
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
|
|
91
98
|
type: Component,
|
|
@@ -97,8 +104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
97
104
|
BlankNodeStateComponent,
|
|
98
105
|
BlankNodeStateNoticeComponent,
|
|
99
106
|
FormsModule,
|
|
100
|
-
NodeLogsModelsComponent
|
|
101
|
-
|
|
102
|
-
], template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n [disableTooltip]=\"showDownload\"\n placement=\"bottom\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (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 }\n </div>\n </div>\n }\n</div>\n\n@switch (selectedView()) {\n @case (View.table) {\n <div class=\"px-3 pb-3\">\n @if (hasData()) {\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 @for (completeness of completenessKeys(); track completeness) {\n <th [attr.title]=\"completeness\">\n <a [href]=\"schemaBaseUrl + '/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(i, cycle); 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 @for (key of completenessKeys(); track key) {\n <td class=\"is-nowrap\">\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 }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n }\n </div>\n }\n @case (View.logs) {\n @if (cycles().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\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 @for (value of cycles(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n }\n }\n}\n\n@if (showDownload) {\n <he-node-csv-export-confirm\n [nodes]=\"cycles()\"\n filename=\"completeness.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n}\n" }]
|
|
107
|
+
NodeLogsModelsComponent
|
|
108
|
+
], template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button class=\"button is-small is-ghost\" (click)=\"showDownload()\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (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 }\n </div>\n </div>\n }\n</div>\n\n@switch (selectedView()) {\n @case (View.table) {\n <div class=\"px-3 pb-3\">\n @if (hasData()) {\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 @for (completeness of completenessKeys(); track completeness) {\n <th [attr.title]=\"completeness\">\n <a [href]=\"schemaBaseUrl + '/Completeness#' + completeness\" target=\"_blank\">\n {{ keyToLabel(completeness) }}\n </a>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(i, cycle); 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 @for (key of completenessKeys(); track key) {\n <td class=\"is-nowrap\">\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 }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n }\n </div>\n }\n @case (View.logs) {\n @if (cycles().length > 1) {\n <div class=\"field has-addons pt-2 px-3\">\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 @for (value of cycles(); track value; let i = $index) {\n <option [value]=\"i\">{{ i + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"></he-node-logs-models>\n }\n }\n}\n" }]
|
|
103
109
|
}], ctorParameters: () => [] });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFnQixRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFF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d0JBQ1YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7d0JBQzdCLFdBQVc7d0JBQ1gsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7cUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgSWNvbkRlZmluaXRpb24sIGZhQ2FsY3VsYXRvciwgZmFEb3dubG9hZCwgZmFMaXN0IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IE5nYlRvb2x0aXAgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQsIE5vZGVUeXBlLCBOb25CbGFua05vZGVzS2V5IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBpc1ZhbGlkS2V5IH0gZnJvbSAnLi4vLi4vY29tbW9uL25vZGUtdXRpbHMnO1xuaW1wb3J0IHsgZGVmYXVsdExhYmVsLCBzY2hlbWFCYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IGxvZ3NLZXkgfSBmcm9tICcuLi9jeWNsZXMubW9kZWwnO1xuaW1wb3J0IHsgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtY3N2LWV4cG9ydC1jb25maXJtL25vZGUtY3N2LWV4cG9ydC1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbGFua05vZGVTdGF0ZU5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ibGFuay1ub2RlLXN0YXRlLW5vdGljZS9ibGFuay1ub2RlLXN0YXRlLW5vdGljZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmxhbmtOb2RlU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmxhbmstbm9kZS1zdGF0ZS9ibGFuay1ub2RlLXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICdUYWJsZSB2aWV3JyxcbiAgbG9ncyA9ICdSZWNhbGN1bGF0aW9ucyBsb2dzJ1xufVxuXG5jb25zdCB2aWV3SWNvbjoge1xuICBbdmlldyBpbiBWaWV3XTogSWNvbkRlZmluaXRpb247XG59ID0ge1xuICBbVmlldy5sb2dzXTogZmFDYWxjdWxhdG9yLFxuICBbVmlldy50YWJsZV06IGZhTGlzdFxufTtcblxuY29uc3QgaGVhZGVyS2V5cyA9IFsnY3ljbGUuaWQnLCAnY3ljbGUuQGlkJywgJ2N5Y2xlLmNvbXBsZXRlbmVzcy4nXTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNjaGVtYSB2ZXJzaW9uIDwgMTRcbmNvbnN0IGdldENvbXBsZXRlbmVzcyA9IChjeWNsZTogYW55KSA9PiBjeWNsZT8uY29tcGxldGVuZXNzIHx8IGN5Y2xlPy5kYXRhQ29tcGxldGVuZXNzIHx8IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtY29tcGxldGVuZXNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdiVG9vbHRpcCxcbiAgICBGYUljb25Db21wb25lbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIE5vZGVMaW5rQ29tcG9uZW50LFxuICAgIEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50LFxuICAgIEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50LFxuICAgIE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzQ29tcGxldGVuZXNzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBub2RlU3RvcmVTZXJ2aWNlID0gaW5qZWN0KEhlTm9kZVN0b3JlU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRG93bmxvYWQgPSBmYURvd25sb2FkO1xuXG4gIHByb3RlY3RlZCBkYXRhU3RhdGUgPSBpbnB1dChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIHByb3RlY3RlZCBzY2hlbWFCYXNlVXJsID0gc2NoZW1hQmFzZVVybCgpO1xuICBwcm90ZWN0ZWQgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwcm90ZWN0ZWQga2V5VG9MYWJlbCA9IGtleVRvTGFiZWw7XG4gIHByb3RlY3RlZCBnZXRDb21wbGV0ZW5lc3MgPSBnZXRDb21wbGV0ZW5lc3M7XG4gIHByb3RlY3RlZCBoZWFkZXJLZXlzID0gaGVhZGVyS2V5cztcbiAgcHJvdGVjdGVkIHNob3dEb3dubG9hZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbm9kZUtleSA9IE5vbkJsYW5rTm9kZXNLZXkuY29tcGxldGVuZXNzO1xuXG4gIHByb3RlY3RlZCBWaWV3ID0gVmlldztcbiAgcHJvdGVjdGVkIHZpZXdJY29uID0gdmlld0ljb247XG4gIHByaXZhdGUgc2hvd1ZpZXcgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgKHtcbiAgICAgICAgW1ZpZXcubG9nc106ICF0aGlzLmlzT3JpZ2luYWwoKSxcbiAgICAgICAgW1ZpZXcudGFibGVdOiB0cnVlXG4gICAgICB9KSBhcyB7IFt2aWV3IGluIFZpZXddOiBib29sZWFuIH1cbiAgKTtcbiAgcHJvdGVjdGVkIHZpZXdzID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LnZhbHVlcyhWaWV3KS5maWx0ZXIodmlldyA9PiB0aGlzLnNob3dWaWV3KClbdmlld10pID8/IFtdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVmlldyA9IHNpZ25hbChWaWV3LnRhYmxlKTtcblxuICBwcml2YXRlIG9yaWdpbmFsQ3ljbGVzID0gdG9TaWduYWwoXG4gICAgdGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmRCeVN0YXRlJDxJQ3ljbGVKU09OTEQ+KE5vZGVUeXBlLkN5Y2xlLCBEYXRhU3RhdGUub3JpZ2luYWwpXG4gICk7XG4gIHByaXZhdGUgX2FsbEN5Y2xlcyA9IHRvU2lnbmFsKHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kJDxJQ3ljbGVKU09OTEQ+KE5vZGVUeXBlLkN5Y2xlKSk7XG4gIHByb3RlY3RlZCBjeWNsZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbGxDeWNsZXMoKT8ubWFwKGRhdGEgPT4gZGF0YVt0aGlzLmRhdGFTdGF0ZSgpXSkgfHwgW10pO1xuXG4gIHByaXZhdGUgc2VsZWN0ZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSBvZ2lyaW5hbFNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9yaWdpbmFsQ3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkQ3ljbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN5Y2xlcygpPy5bdGhpcy5zZWxlY3RlZEluZGV4KCldKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTG9nc0tleSA9IGNvbXB1dGVkKCgpID0+IGxvZ3NLZXkodGhpcy5zZWxlY3RlZEN5Y2xlKCkpKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiBnZXRDb21wbGV0ZW5lc3ModGhpcy5vZ2lyaW5hbFNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMgPSBjb21wdXRlZCgoKSA9PiBnZXRDb21wbGV0ZW5lc3ModGhpcy5zZWxlY3RlZEN5Y2xlKCkpKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZEN5Y2xlKClcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDeWNsZSgpLFxuICAgICAgICAgICdAdHlwZSc6IE5vZGVUeXBlLkN5Y2xlLFxuICAgICAgICAgIHR5cGU6IE5vZGVUeXBlLkN5Y2xlLFxuICAgICAgICAgIGRhdGFTdGF0ZTogRGF0YVN0YXRlLnJlY2FsY3VsYXRlZFxuICAgICAgICB9XG4gICAgICA6IG51bGxcbiAgKTtcblxuICBwcm90ZWN0ZWQgaGFzRGF0YSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCkubGVuZ3RoKTtcbiAgcHJvdGVjdGVkIGlzT3JpZ2luYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGFTdGF0ZSgpID09PSBEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIHByb3RlY3RlZCBjb21wbGV0ZW5lc3NLZXlzID0gY29tcHV0ZWQoKCkgPT5cbiAgICBPYmplY3Qua2V5cyhnZXRDb21wbGV0ZW5lc3ModGhpcy5zZWxlY3RlZEN5Y2xlKCkpKS5maWx0ZXIoaXNWYWxpZEtleSkuc29ydCgpXG4gICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBsb2dzIGRvZXMgbm90IHJlbWFpbiBkaXNwbGF5ZWQgd2hlbiBzd2l0Y2hpbmcgYmFjayB0byBvcmlnaW5hbCB2aWV3XG4gICAgICBpZiAodGhpcy5pc09yaWdpbmFsKCkgJiYgdGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gVmlldy5sb2dzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChWaWV3LnRhYmxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElDeWNsZUpTT05MRCkge1xuICAgIHJldHVybiBpdGVtWydAaWQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgQGlmIChzZWxlY3RlZFZpZXcoKSA9PT0gVmlldy50YWJsZSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiXG4gICAgICAgIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCJcbiAgICAgICAgbmdiVG9vbHRpcD1cIkRvd25sb2FkIGFzIENTVlwiXG4gICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCJzaG93RG93bmxvYWRcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFEb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAodmlld3MoKT8ubGVuZ3RoID4gMSkge1xuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgICBAZm9yICh2aWV3IG9mIHZpZXdzKCk7IHRyYWNrIHZpZXcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcoKSA9PT0gdmlld1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcuc2V0KHZpZXcpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInZpZXdJY29uW3ZpZXddXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPnt7IHZpZXcgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG5Ac3dpdGNoIChzZWxlY3RlZFZpZXcoKSkge1xuICBAY2FzZSAoVmlldy50YWJsZSkge1xuICAgIDxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIj5cbiAgICAgIEBpZiAoaGFzRGF0YSgpKSB7XG4gICAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICBAZm9yIChjb21wbGV0ZW5lc3Mgb2YgY29tcGxldGVuZXNzS2V5cygpOyB0cmFjayBjb21wbGV0ZW5lc3MpIHtcbiAgICAgICAgICAgICAgICAgIDx0aCBbYXR0ci50aXRsZV09XCJjb21wbGV0ZW5lc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwic2NoZW1hQmFzZVVybCArICcvQ29tcGxldGVuZXNzIycgKyBjb21wbGV0ZW5lc3NcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlUb0xhYmVsKGNvbXBsZXRlbmVzcykgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICBAZm9yIChjeWNsZSBvZiBjeWNsZXMoKTsgdHJhY2sgdHJhY2tCeUlkKGksIGN5Y2xlKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoY3ljbGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiY3ljbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKGN5Y2xlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIGNvbXBsZXRlbmVzc0tleXMoKTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldENvbXBsZXRlbmVzcyhjeWNsZSlba2V5XSA/ICdDb21wbGV0ZScgOiAnSW5jb21wbGV0ZScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cImdldENvbXBsZXRlbmVzcyhjeWNsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2hlLWRhdGEtdGFibGU+XG4gICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2tcIj5cbiAgICAgICAgICA8c3Bhbj5ObyBjb21wbGV0ZW5lc3MgZGF0YTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGNhc2UgKFZpZXcubG9ncykge1xuICAgIEBpZiAoY3ljbGVzKCkubGVuZ3RoID4gMSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGN5Y2xlcygpOyB0cmFjayB2YWx1ZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpXCI+e3sgaSArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbCh2YWx1ZSkgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgIDxoZS1ub2RlLWxvZ3MtbW9kZWxzXG4gICAgICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgW25vZGVLZXldPVwibm9kZUtleVwiXG4gICAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgICAgW29yaWdpbmFsVmFsdWVzXT1cInNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMoKVwiXG4gICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cbiAgICB9XG4gIH1cbn1cblxuQGlmIChzaG93RG93bmxvYWQpIHtcbiAgPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtXG4gICAgW25vZGVzXT1cImN5Y2xlcygpXCJcbiAgICBmaWxlbmFtZT1cImNvbXBsZXRlbmVzcy5jc3ZcIlxuICAgIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gICAgW2hlYWRlcktleXNdPVwiaGVhZGVyS2V5c1wiXG4gICAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiPjwvaGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0+XG59XG4iXX0=
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pF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Q0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7K0dBaEZVLDJCQUEyQjttR0FBM0IsMkJBQTJCLGtPQ3ZEeEMsNjhIQXlHQSwwREQzREksZUFBZSxrUEFDZixrQkFBa0IsdUdBQ2xCLGlCQUFpQiw0R0FDakIsdUJBQXVCLG1KQUN2Qiw2QkFBNkIsNEdBQzdCLFdBQVcsNE9BQ1gsdUJBQXVCOzs0RkFHZCwyQkFBMkI7a0JBakJ2QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0IsV0FBVzt3QkFDWCx1QkFBdUI7cUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgSWNvbkRlZmluaXRpb24sIGZhQ2FsY3VsYXRvciwgZmFEb3dubG9hZCwgZmFMaXN0IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JUb29sdGlwIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxELCBOb2RlVHlwZSwgTm9uQmxhbmtOb2Rlc0tleSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGtleVRvTGFiZWwgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgSGVOb2RlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNWYWxpZEtleSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGRlZmF1bHRMYWJlbCwgc2NoZW1hQmFzZVVybCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBsb2dzS2V5IH0gZnJvbSAnLi4vY3ljbGVzLm1vZGVsJztcbmltcG9ydCB7IE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWNzdi1leHBvcnQtY29uZmlybS9ub2RlLWNzdi1leHBvcnQtY29uZmlybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmxhbmtOb2RlU3RhdGVOb3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UvYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUvYmxhbmstbm9kZS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUxpbmtDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtbGluay9ub2RlLWxpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50JztcblxuZW51bSBWaWV3IHtcbiAgdGFibGUgPSAnVGFibGUgdmlldycsXG4gIGxvZ3MgPSAnUmVjYWxjdWxhdGlvbnMgbG9ncydcbn1cblxuY29uc3Qgdmlld0ljb246IHtcbiAgW3ZpZXcgaW4gVmlld106IEljb25EZWZpbml0aW9uO1xufSA9IHtcbiAgW1ZpZXcubG9nc106IGZhQ2FsY3VsYXRvcixcbiAgW1ZpZXcudGFibGVdOiBmYUxpc3Rcbn07XG5cbmNvbnN0IGhlYWRlcktleXMgPSBbJ2N5Y2xlLmlkJywgJ2N5Y2xlLkBpZCcsICdjeWNsZS5jb21wbGV0ZW5lc3MuJ107XG5cbi8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBzY2hlbWEgdmVyc2lvbiA8IDE0XG5jb25zdCBnZXRDb21wbGV0ZW5lc3MgPSAoY3ljbGU6IGFueSkgPT4gY3ljbGU/LmNvbXBsZXRlbmVzcyB8fCBjeWNsZT8uZGF0YUNvbXBsZXRlbmVzcyB8fCB7fTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtY3ljbGVzLWNvbXBsZXRlbmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nYlRvb2x0aXAsXG4gICAgRmFJY29uQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICBOb2RlTGlua0NvbXBvbmVudCxcbiAgICBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCxcbiAgICBCbGFua05vZGVTdGF0ZU5vdGljZUNvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOb2RlTG9nc01vZGVsc0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0NvbXBsZXRlbmVzc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE5nYk1vZGFsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlU3RvcmVTZXJ2aWNlID0gaW5qZWN0KEhlTm9kZVN0b3JlU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRG93bmxvYWQgPSBmYURvd25sb2FkO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhU3RhdGUgPSBpbnB1dChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzY2hlbWFCYXNlVXJsID0gc2NoZW1hQmFzZVVybCgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5VG9MYWJlbCA9IGtleVRvTGFiZWw7XG4gIHByb3RlY3RlZCByZWFkb25seSBnZXRDb21wbGV0ZW5lc3MgPSBnZXRDb21wbGV0ZW5lc3M7XG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlS2V5ID0gTm9uQmxhbmtOb2Rlc0tleS5jb21wbGV0ZW5lc3M7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5sb2dzXTogIXRoaXMuaXNPcmlnaW5hbCgpLFxuICAgICAgICBbVmlldy50YWJsZV06IHRydWVcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKFZpZXcpLmZpbHRlcih2aWV3ID0+IHRoaXMuc2hvd1ZpZXcoKVt2aWV3XSkgPz8gW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRWaWV3ID0gc2lnbmFsKFZpZXcudGFibGUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luYWxDeWNsZXMgPSB0b1NpZ25hbChcbiAgICB0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZEJ5U3RhdGUkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUsIERhdGFTdGF0ZS5vcmlnaW5hbClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsQ3ljbGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGN5Y2xlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2FsbEN5Y2xlcygpPy5tYXAoZGF0YSA9PiBkYXRhW3RoaXMuZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5sZW5ndGgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcmlnaW5hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YVN0YXRlKCkgPT09IERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbXBsZXRlbmVzc0tleXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIE9iamVjdC5rZXlzKGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpLmZpbHRlcihpc1ZhbGlkS2V5KS5zb3J0KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZCB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIG9yaWdpbmFsIHZpZXdcbiAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldygpID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSBhcyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudDtcbiAgICBjb21wb25lbnQubm9kZXMuc2V0KHRoaXMuY3ljbGVzKCkpO1xuICAgIGNvbXBvbmVudC5maWxlbmFtZS5zZXQoJ2NvbXBsZXRlbmVzcy5jc3YnKTtcbiAgICBjb21wb25lbnQuaXNVcGxvYWQuc2V0KGZhbHNlKTtcbiAgICBjb21wb25lbnQuaGVhZGVyS2V5cy5zZXQoaGVhZGVyS2V5cyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgQGlmIChzZWxlY3RlZFZpZXcoKSA9PT0gVmlldy50YWJsZSkge1xuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiIChjbGljayk9XCJzaG93RG93bmxvYWQoKVwiPlxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYURvd25sb2FkXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmICh2aWV3cygpPy5sZW5ndGggPiAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICAgIEBmb3IgKHZpZXcgb2Ygdmlld3MoKTsgdHJhY2sgdmlldykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwidmlld0ljb25bdmlld11cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tbW9iaWxlXCI+e3sgdmlldyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbkBzd2l0Y2ggKHNlbGVjdGVkVmlldygpKSB7XG4gIEBjYXNlIChWaWV3LnRhYmxlKSB7XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiPlxuICAgICAgQGlmIChoYXNEYXRhKCkpIHtcbiAgICAgICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbXBsZXRlbmVzcyBvZiBjb21wbGV0ZW5lc3NLZXlzKCk7IHRyYWNrIGNvbXBsZXRlbmVzcykge1xuICAgICAgICAgICAgICAgICAgPHRoIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJzY2hlbWFCYXNlVXJsICsgJy9Db21wbGV0ZW5lc3MjJyArIGNvbXBsZXRlbmVzc1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleVRvTGFiZWwoY29tcGxldGVuZXNzKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgIEBmb3IgKGN5Y2xlIG9mIGN5Y2xlcygpOyB0cmFjayB0cmFja0J5SWQoaSwgY3ljbGUpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJjeWNsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwoY3ljbGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICBAZm9yIChrZXkgb2YgY29tcGxldGVuZXNzS2V5cygpOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaXMtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0Q29tcGxldGVuZXNzKGN5Y2xlKVtrZXldID8gJ0NvbXBsZXRlJyA6ICdJbmNvbXBsZXRlJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwiZ2V0Q29tcGxldGVuZXNzKGN5Y2xlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2V5XT1cImtleVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvaGUtZGF0YS10YWJsZT5cbiAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9ja1wiPlxuICAgICAgICAgIDxzcGFuPk5vIGNvbXBsZXRlbmVzcyBkYXRhPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuICBAY2FzZSAoVmlldy5sb2dzKSB7XG4gICAgQGlmIChjeWNsZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGEgQ3ljbGU8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoIGlzLXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICAgICAgQGZvciAodmFsdWUgb2YgY3ljbGVzKCk7IHRyYWNrIHZhbHVlOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImlcIj57eyBpICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChzZWxlY3RlZE5vZGUoKSkge1xuICAgICAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAgICAgW25vZGVdPVwic2VsZWN0ZWROb2RlKClcIlxuICAgICAgICBbbm9kZUtleV09XCJub2RlS2V5XCJcbiAgICAgICAgW2xvZ3NLZXldPVwic2VsZWN0ZWRMb2dzS2V5KClcIlxuICAgICAgICBbb3JpZ2luYWxWYWx1ZXNdPVwic2VsZWN0ZWRPcmlnaW5hbFZhbHVlcygpXCJcbiAgICAgICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuICAgIH1cbiAgfVxufVxuIl19
|