@hestia-earth/ui-components 0.27.34 → 0.27.37

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.
Files changed (29) hide show
  1. package/common/link-key-value/link-key-value.component.d.ts +1 -1
  2. package/common/utils.d.ts +4 -1
  3. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +1 -1
  4. package/cycles/cycles-nodes/cycles-nodes.component.d.ts +1 -1
  5. package/esm2022/common/link-key-value/link-key-value.component.mjs +5 -5
  6. package/esm2022/common/schema-version-link/schema-version-link.component.mjs +3 -3
  7. package/esm2022/common/utils.mjs +15 -8
  8. package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +5 -5
  9. package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +5 -5
  10. package/esm2022/engine/engine-orchestrator-edit/engine-orchestrator-edit.component.mjs +3 -3
  11. package/esm2022/engine/engine.service.mjs +2 -2
  12. package/esm2022/files/files-error.model.mjs +3 -3
  13. package/esm2022/files/files-form.model.mjs +3 -3
  14. package/esm2022/files/files-upload-errors/files-upload-errors.component.mjs +2 -3
  15. package/esm2022/glossary/glossary.service.mjs +3 -4
  16. package/esm2022/impact-assessments/impact-assessments-graph/impact-assessments-graph.component.mjs +5 -5
  17. package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +5 -5
  18. package/esm2022/node/node-logs-models/node-logs-models.component.mjs +5 -5
  19. package/esm2022/node/node-value-details/node-value-details.component.mjs +5 -5
  20. package/esm2022/node/node.service.mjs +3 -3
  21. package/esm2022/schema/schema.service.mjs +3 -5
  22. package/esm2022/sites/sites-maps/sites-maps.component.mjs +2 -2
  23. package/fesm2022/hestia-earth-ui-components.mjs +43 -39
  24. package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
  25. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +1 -1
  26. package/node/node-logs-models/node-logs-models.component.d.ts +1 -1
  27. package/node/node-value-details/node-value-details.component.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/schema/schema.service.d.ts +0 -2
@@ -13,7 +13,7 @@ export declare class LinkKeyValueComponent {
13
13
  protected isUndefined: <T>(value: T, allowNull?: boolean) => boolean;
14
14
  protected minMaxValue: (min?: number, max?: number) => string;
15
15
  get isInlineBlock(): boolean;
16
- protected baseUrl: string;
16
+ protected schemaBaseUrl: string;
17
17
  protected toString: (value: any) => any;
18
18
  protected type: import("@angular/core").Signal<any>;
19
19
  protected value: import("@angular/core").Signal<any>;
package/common/utils.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  export declare const gitHome = "https://gitlab.com/hestia-earth";
2
2
  export declare const gitBranch: () => "develop" | "master";
3
3
  export declare const isChrome: () => boolean;
4
- export declare const baseUrl: () => string;
4
+ export declare const baseUrl: (allowLocalhost?: boolean) => string;
5
5
  export declare const baseApiUrl: () => string;
6
6
  export declare const isExternal: () => boolean;
7
+ export declare const schemaBaseUrl: (version?: string) => string;
8
+ export declare const schemaDataBaseUrl: (version?: string) => string;
9
+ export declare const glossaryBaseUrl: (allowLocalhost?: boolean) => string;
7
10
  export declare const handleAPIError: (err: any) => never;
8
11
  export declare const errorText: (error: any) => string;
9
12
  export declare const filterParams: (obj: any) => {
@@ -10,7 +10,7 @@ export declare class CyclesCompletenessComponent {
10
10
  private nodeStoreService;
11
11
  protected readonly faDownload: IconDefinition;
12
12
  protected dataState: import("@angular/core").InputSignal<DataState>;
13
- protected baseUrl: string;
13
+ protected schemaBaseUrl: string;
14
14
  protected defaultLabel: (node?: any) => any;
15
15
  protected keyToLabel: (key: string) => string;
16
16
  protected getCompleteness: (cycle: any) => any;
@@ -27,7 +27,7 @@ export declare class CyclesNodesComponent {
27
27
  protected firstNodeKey: import("@angular/core").Signal<BlankNodesKey>;
28
28
  protected selectedNodeKey: import("@angular/core").WritableSignal<BlankNodesKey>;
29
29
  protected selectedGroupTerm: import("@angular/core").WritableSignal<Term>;
30
- protected baseUrl: string;
30
+ protected schemaBaseUrl: string;
31
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
32
  protected defaultLabel: (node?: any) => any;
33
33
  protected showDownload: boolean;
@@ -3,7 +3,7 @@ import { NgTemplateOutlet } from '@angular/common';
3
3
  import { isExpandable } from '@hestia-earth/schema';
4
4
  import { isUndefined, toPrecision } from '@hestia-earth/utils';
5
5
  import get from 'lodash.get';
6
- import { baseUrl } from '../utils';
6
+ import { baseUrl, schemaBaseUrl } from '../utils';
7
7
  import { BlankNodeStateComponent } from '../blank-node-state/blank-node-state.component';
8
8
  import * as i0 from "@angular/core";
9
9
  const valueLink = (value) => isExpandable(value) && value['@id'] ? [baseUrl(), value['@type'].toLowerCase(), value['@id']].join('/') : null;
@@ -39,7 +39,7 @@ export class LinkKeyValueComponent {
39
39
  this.valueLink = valueLink;
40
40
  this.isUndefined = isUndefined;
41
41
  this.minMaxValue = minMaxValue;
42
- this.baseUrl = baseUrl();
42
+ this.schemaBaseUrl = schemaBaseUrl();
43
43
  this.toString = toString;
44
44
  this.type = computed(() => this.node()?.['@type'] || this.node()?.type);
45
45
  this.value = computed(() => get(this.node(), this.key()));
@@ -53,13 +53,13 @@ export class LinkKeyValueComponent {
53
53
  return isExpandable(value) && 'term' in value;
54
54
  }
55
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: LinkKeyValueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: LinkKeyValueComponent, isStandalone: true, selector: "he-link-key-value", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: true, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-inline-block": "this.isInlineBlock" } }, ngImport: i0, template: "@if (hasValue()) {\n <a class=\"is-dark\" [href]=\"baseUrl + '/schema/' + type() + '#' + key()\" target=\"_blank\">\n <b>{{ key() }}</b>\n </a>\n <span class=\"pr-2\">:</span>\n @if (isArray()) {\n <div class=\"array-container is-pl-2\">\n @for (v of value(); track v) {\n @if (isBlankNode(v)) {\n <div>\n <a class=\"is-dark\" [href]=\"valueLink(v.term)\">{{ v.term.name || v.term['@id'] }}</a>\n <span>:</span>\n @if (!isUndefined(v.value)) {\n <span class=\"is-pl-2\">\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v.value }\"></ng-container>\n </span>\n }\n @if (!isUndefined(v.min) || !isUndefined(v.max)) {\n <small class=\"is-pl-1\">({{ minMaxValue(v.min, v.max) }})</small>\n }\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"v\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"value\"\n linkClass=\"is-dark\"></he-blank-node-state>\n </div>\n } @else {\n <p>\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v }\"></ng-container>\n </p>\n }\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: value() }\"></ng-container>\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key()\"\n linkClass=\"is-dark\"></he-blank-node-state>\n }\n} @else if (!!defaultValue()) {\n <span>{{ defaultValue() }}</span>\n}\n\n<ng-template #valueContent let-v=\"value\">\n <span class=\"is-inline-block is-nowrap\" [innerHtml]=\"toString(v)\"></span>\n</ng-template>\n", styles: [":host{display:block}:host a.has-text-white:hover,:host a.has-text-white.is-hovered{text-decoration:underline}.array-container{max-height:100px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: LinkKeyValueComponent, isStandalone: true, selector: "he-link-key-value", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, nodeType: { classPropertyName: "nodeType", publicName: "nodeType", isSignal: true, isRequired: true, transformFunction: null }, dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: true, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-inline-block": "this.isInlineBlock" } }, ngImport: i0, template: "@if (hasValue()) {\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key()\" target=\"_blank\">\n <b>{{ key() }}</b>\n </a>\n <span class=\"pr-2\">:</span>\n @if (isArray()) {\n <div class=\"array-container is-pl-2\">\n @for (v of value(); track v) {\n @if (isBlankNode(v)) {\n <div>\n <a class=\"is-dark\" [href]=\"valueLink(v.term)\">{{ v.term.name || v.term['@id'] }}</a>\n <span>:</span>\n @if (!isUndefined(v.value)) {\n <span class=\"is-pl-2\">\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v.value }\"></ng-container>\n </span>\n }\n @if (!isUndefined(v.min) || !isUndefined(v.max)) {\n <small class=\"is-pl-1\">({{ minMaxValue(v.min, v.max) }})</small>\n }\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"v\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"value\"\n linkClass=\"is-dark\"></he-blank-node-state>\n </div>\n } @else {\n <p>\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v }\"></ng-container>\n </p>\n }\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: value() }\"></ng-container>\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key()\"\n linkClass=\"is-dark\"></he-blank-node-state>\n }\n} @else if (!!defaultValue()) {\n <span>{{ defaultValue() }}</span>\n}\n\n<ng-template #valueContent let-v=\"value\">\n <span class=\"is-inline-block is-nowrap\" [innerHtml]=\"toString(v)\"></span>\n</ng-template>\n", styles: [":host{display:block}:host a.has-text-white:hover,:host a.has-text-white.is-hovered{text-decoration:underline}.array-container{max-height:100px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
57
  }
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: LinkKeyValueComponent, decorators: [{
59
59
  type: Component,
60
- args: [{ selector: 'he-link-key-value', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgTemplateOutlet, BlankNodeStateComponent], template: "@if (hasValue()) {\n <a class=\"is-dark\" [href]=\"baseUrl + '/schema/' + type() + '#' + key()\" target=\"_blank\">\n <b>{{ key() }}</b>\n </a>\n <span class=\"pr-2\">:</span>\n @if (isArray()) {\n <div class=\"array-container is-pl-2\">\n @for (v of value(); track v) {\n @if (isBlankNode(v)) {\n <div>\n <a class=\"is-dark\" [href]=\"valueLink(v.term)\">{{ v.term.name || v.term['@id'] }}</a>\n <span>:</span>\n @if (!isUndefined(v.value)) {\n <span class=\"is-pl-2\">\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v.value }\"></ng-container>\n </span>\n }\n @if (!isUndefined(v.min) || !isUndefined(v.max)) {\n <small class=\"is-pl-1\">({{ minMaxValue(v.min, v.max) }})</small>\n }\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"v\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"value\"\n linkClass=\"is-dark\"></he-blank-node-state>\n </div>\n } @else {\n <p>\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v }\"></ng-container>\n </p>\n }\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: value() }\"></ng-container>\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key()\"\n linkClass=\"is-dark\"></he-blank-node-state>\n }\n} @else if (!!defaultValue()) {\n <span>{{ defaultValue() }}</span>\n}\n\n<ng-template #valueContent let-v=\"value\">\n <span class=\"is-inline-block is-nowrap\" [innerHtml]=\"toString(v)\"></span>\n</ng-template>\n", styles: [":host{display:block}:host a.has-text-white:hover,:host a.has-text-white.is-hovered{text-decoration:underline}.array-container{max-height:100px;overflow-y:auto}\n"] }]
60
+ args: [{ selector: 'he-link-key-value', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgTemplateOutlet, BlankNodeStateComponent], template: "@if (hasValue()) {\n <a class=\"is-dark\" [href]=\"schemaBaseUrl + '/' + type() + '#' + key()\" target=\"_blank\">\n <b>{{ key() }}</b>\n </a>\n <span class=\"pr-2\">:</span>\n @if (isArray()) {\n <div class=\"array-container is-pl-2\">\n @for (v of value(); track v) {\n @if (isBlankNode(v)) {\n <div>\n <a class=\"is-dark\" [href]=\"valueLink(v.term)\">{{ v.term.name || v.term['@id'] }}</a>\n <span>:</span>\n @if (!isUndefined(v.value)) {\n <span class=\"is-pl-2\">\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v.value }\"></ng-container>\n </span>\n }\n @if (!isUndefined(v.min) || !isUndefined(v.max)) {\n <small class=\"is-pl-1\">({{ minMaxValue(v.min, v.max) }})</small>\n }\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"v\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n key=\"value\"\n linkClass=\"is-dark\"></he-blank-node-state>\n </div>\n } @else {\n <p>\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: v }\"></ng-container>\n </p>\n }\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"valueContent; context: { value: value() }\"></ng-container>\n <he-blank-node-state\n class=\"pl-1\"\n [node]=\"node()\"\n [nodeType]=\"nodeType()\"\n [dataState]=\"dataState()\"\n [dataKey]=\"dataKey()\"\n [key]=\"key()\"\n linkClass=\"is-dark\"></he-blank-node-state>\n }\n} @else if (!!defaultValue()) {\n <span>{{ defaultValue() }}</span>\n}\n\n<ng-template #valueContent let-v=\"value\">\n <span class=\"is-inline-block is-nowrap\" [innerHtml]=\"toString(v)\"></span>\n</ng-template>\n", styles: [":host{display:block}:host a.has-text-white:hover,:host a.has-text-white.is-hovered{text-decoration:underline}.array-container{max-height:100px;overflow-y:auto}\n"] }]
61
61
  }], propDecorators: { isInlineBlock: [{
62
62
  type: HostBinding,
63
63
  args: ['class.is-inline-block']
64
64
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1rZXktdmFsdWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9saW5rLWtleS12YWx1ZS9saW5rLWtleS12YWx1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL2xpbmsta2V5LXZhbHVlL2xpbmsta2V5LXZhbHVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0FBRXpGLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FDL0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFakgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQUUsSUFBYSxFQUFFLEVBQUUsQ0FDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUV0RixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFbEgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFZLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDakQsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVwSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQ3RCLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILEdBQUcsRUFNSixFQUFFLEVBQUUsQ0FDSDtJQUNFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM3RixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFB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LENBQzFCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDOUcsQ0FBQztLQUtIO0lBbEJDLElBQ0ksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFZUyxXQUFXLENBQUMsS0FBVTtRQUM5QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQ2hELENBQUM7OEdBL0JVLHFCQUFxQjtrR0FBckIscUJBQXFCLHE1QkNqRWxDLDI1REFzREEsMk5EU1ksZ0JBQWdCLG9KQUFFLHVCQUF1Qjs7MkZBRXhDLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQzs4QkFpQmhELGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBpc0V4cGFuZGFibGUsIE5vZGVUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQsIHRvUHJlY2lzaW9uIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuXG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQmxhbmtOb2RlU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9ibGFuay1ub2RlLXN0YXRlL2JsYW5rLW5vZGUtc3RhdGUuY29tcG9uZW50JztcblxuY29uc3QgdmFsdWVMaW5rID0gKHZhbHVlOiBhbnkpID0+XG4gIGlzRXhwYW5kYWJsZSh2YWx1ZSkgJiYgdmFsdWVbJ0BpZCddID8gW2Jhc2VVcmwoKSwgdmFsdWVbJ0B0eXBlJ10udG9Mb3dlckNhc2UoKSwgdmFsdWVbJ0BpZCddXS5qb2luKCcvJykgOiBudWxsO1xuXG5jb25zdCB2YWx1ZUxpbmtSZWYgPSAodmFsdWU6IGFueSwgaHJlZj86IHN0cmluZykgPT5cbiAgaHJlZiA/IGA8YSBjbGFzcz1cImlzLWRhcmtcIiBocmVmPVwiJHtocmVmfVwiPiR7dmFsdWUubmFtZSB8fCB2YWx1ZVsnQGlkJ119PC9hPmAgOiBudWxsO1xuXG5jb25zdCB2YWx1ZVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh2YWx1ZVZhbHVlKS5qb2luKCcsICcpIDogdG9QcmVjaXNpb24odmFsdWUpKTtcblxuY29uc3QgbWluTWF4VmFsdWUgPSAobWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpID0+XG4gIFtpc1VuZGVmaW5lZChtaW4pID8gJycgOiBgTWluOiAke3ZhbHVlVmFsdWUobWluKX1gLCBpc1VuZGVmaW5lZChtYXgpID8gJycgOiBgTWF4OiAke3ZhbHVlVmFsdWUobWF4KX1gXS5qb2luKCc7ICcpO1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9ICh7XG4gIHRlcm0sXG4gIHZhbHVlLFxuICBtaW4sXG4gIG1heFxufToge1xuICB0ZXJtOiBhbnk7XG4gIHZhbHVlPzogbnVtYmVyIHwgYm9vbGVhbjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59KSA9PlxuICBbXG4gICAgW3ZhbHVlTGlua1JlZih0ZXJtLCB2YWx1ZUxpbmsodGVybSkpLCBpc1VuZGVmaW5lZCh2YWx1ZSkgPyAnJyA6IHZhbHVlVmFsdWUodmFsdWUpXS5qb2luKCc6ICcpLFxuICAgIFtpc1VuZGVmaW5lZChtaW4pID8gJycgOiBgTWluOiAke3ZhbHVlVmFsdWUobWluKX1gLCBpc1VuZGVmaW5lZChtYXgpID8gJycgOiBgTWF4OiAke3ZhbHVlVmFsdWUobWF4KX1gXS5qb2luKCc7ICcpXG4gIF0uam9pbignIC0gJyk7XG5cbmNvbnN0IHN0cmluZ01hcHBlcjoge1xuICBbdHlwZTogc3RyaW5nXTogKHZhbHVlPzogYW55KSA9PiBzdHJpbmc7XG59ID0ge1xuICBudW1iZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBgJHt0b1ByZWNpc2lvbih2YWx1ZSwgMyl9YCxcbiAgdW5kZWZpbmVkOiAoKSA9PiAnJyxcbiAgYmxhbmtOb2RlOiB2YWx1ZSA9PlxuICAgICd0ZXJtJyBpbiB2YWx1ZSA/IGJsYW5rTm9kZVZhbHVlKHZhbHVlKSA6IHZhbHVlTGlua1JlZih2YWx1ZSwgdmFsdWVMaW5rKHZhbHVlKSkgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZVsnQGlkJ10sXG4gIG9iamVjdDogdmFsdWUgPT5cbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyB2YWx1ZS5tYXAodG9TdHJpbmcpLmpvaW4oJywgJylcbiAgICAgIDogdmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgID8gdmFsdWUudG9KU09OKClcbiAgICAgICAgOiBpc0V4cGFuZGFibGUodmFsdWUpXG4gICAgICAgICAgPyBzdHJpbmdNYXBwZXIuYmxhbmtOb2RlKHZhbHVlKVxuICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpXG59O1xuXG5jb25zdCB0b1N0cmluZyA9ICh2YWx1ZTogYW55KSA9PlxuICAodHlwZW9mIHZhbHVlKSBpbiBzdHJpbmdNYXBwZXIgPyBzdHJpbmdNYXBwZXJbdHlwZW9mIHZhbHVlXSh2YWx1ZSkgOiB2YWx1ZS50b1N0cmluZygpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1saW5rLWtleS12YWx1ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9saW5rLWtleS12YWx1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpbmsta2V5LXZhbHVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgQmxhbmtOb2RlU3RhdGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIExpbmtLZXlWYWx1ZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBub2RlID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBwcm90ZWN0ZWQgbm9kZVR5cGUgPSBpbnB1dC5yZXF1aXJlZDxOb2RlVHlwZT4oKTtcbiAgcHJvdGVjdGVkIGRhdGFTdGF0ZSA9IGlucHV0LnJlcXVpcmVkPERhdGFTdGF0ZT4oKTtcbiAgcHJvdGVjdGVkIGRhdGFLZXkgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cbiAgcHJvdGVjdGVkIGtleSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRWYWx1ZSA9IGlucHV0PGFueT4oJycpO1xuXG4gIHByb3RlY3RlZCBpc0V4cGFuZGFibGUgPSBpc0V4cGFuZGFibGU7XG4gIHByb3RlY3RlZCB2YWx1ZUxpbmsgPSB2YWx1ZUxpbms7XG4gIHByb3RlY3RlZCBpc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgbWluTWF4VmFsdWUgPSBtaW5NYXhWYWx1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWlubGluZS1ibG9jaycpXG4gIGdldCBpc0lubGluZUJsb2NrKCkge1xuICAgIHJldHVybiB0aGlzLmlzQXJyYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXNlVXJsID0gYmFzZVVybCgpO1xuICBwcm90ZWN0ZWQgdG9TdHJpbmcgPSB0b1N0cmluZztcblxuICBwcm90ZWN0ZWQgdHlwZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9kZSgpPy5bJ0B0eXBlJ10gfHwgdGhpcy5ub2RlKCk/LnR5cGUpO1xuICBwcm90ZWN0ZWQgdmFsdWUgPSBjb21wdXRlZCgoKSA9PiBnZXQodGhpcy5ub2RlKCksIHRoaXMua2V5KCkpKTtcbiAgcHJvdGVjdGVkIGhhc1ZhbHVlID0gY29tcHV0ZWQoKCkgPT4gIWlzVW5kZWZpbmVkKHRoaXMudmFsdWUoKSkpO1xuICBwcm90ZWN0ZWQgaXNBcnJheSA9IGNvbXB1dGVkKFxuICAgICgpID0+IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSgpKSAmJiBbdGhpcy52YWx1ZSgpLmxlbmd0aCA+IDEsIGlzRXhwYW5kYWJsZSh0aGlzLnZhbHVlKCk/LlswXSldLnNvbWUoQm9vbGVhbilcbiAgKTtcblxuICBwcm90ZWN0ZWQgaXNCbGFua05vZGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBpc0V4cGFuZGFibGUodmFsdWUpICYmICd0ZXJtJyBpbiB2YWx1ZTtcbiAgfVxufVxuIiwiQGlmIChoYXNWYWx1ZSgpKSB7XG4gIDxhIGNsYXNzPVwiaXMtZGFya1wiIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgdHlwZSgpICsgJyMnICsga2V5KClcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8Yj57eyBrZXkoKSB9fTwvYj5cbiAgPC9hPlxuICA8c3BhbiBjbGFzcz1cInByLTJcIj46PC9zcGFuPlxuICBAaWYgKGlzQXJyYXkoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJhcnJheS1jb250YWluZXIgaXMtcGwtMlwiPlxuICAgICAgQGZvciAodiBvZiB2YWx1ZSgpOyB0cmFjayB2KSB7XG4gICAgICAgIEBpZiAoaXNCbGFua05vZGUodikpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgW2hyZWZdPVwidmFsdWVMaW5rKHYudGVybSlcIj57eyB2LnRlcm0ubmFtZSB8fCB2LnRlcm1bJ0BpZCddIH19PC9hPlxuICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoIWlzVW5kZWZpbmVkKHYudmFsdWUpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtcGwtMlwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZUNvbnRlbnQ7IGNvbnRleHQ6IHsgdmFsdWU6IHYudmFsdWUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1VuZGVmaW5lZCh2Lm1pbikgfHwgIWlzVW5kZWZpbmVkKHYubWF4KSkge1xuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpcy1wbC0xXCI+KHt7IG1pbk1heFZhbHVlKHYubWluLCB2Lm1heCkgfX0pPC9zbWFsbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICAgICAgICAgIGNsYXNzPVwicGwtMVwiXG4gICAgICAgICAgICAgIFtub2RlXT1cInZcIlxuICAgICAgICAgICAgICBbbm9kZVR5cGVdPVwibm9kZVR5cGUoKVwiXG4gICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICBbZGF0YUtleV09XCJkYXRhS2V5KClcIlxuICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgIGxpbmtDbGFzcz1cImlzLWRhcmtcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZhbHVlQ29udGVudDsgY29udGV4dDogeyB2YWx1ZTogdiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9wPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH0gQGVsc2Uge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZUNvbnRlbnQ7IGNvbnRleHQ6IHsgdmFsdWU6IHZhbHVlKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICBjbGFzcz1cInBsLTFcIlxuICAgICAgW25vZGVdPVwibm9kZSgpXCJcbiAgICAgIFtub2RlVHlwZV09XCJub2RlVHlwZSgpXCJcbiAgICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIlxuICAgICAgW2RhdGFLZXldPVwiZGF0YUtleSgpXCJcbiAgICAgIFtrZXldPVwia2V5KClcIlxuICAgICAgbGlua0NsYXNzPVwiaXMtZGFya1wiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgfVxufSBAZWxzZSBpZiAoISFkZWZhdWx0VmFsdWUoKSkge1xuICA8c3Bhbj57eyBkZWZhdWx0VmFsdWUoKSB9fTwvc3Bhbj5cbn1cblxuPG5nLXRlbXBsYXRlICN2YWx1ZUNvbnRlbnQgbGV0LXY9XCJ2YWx1ZVwiPlxuICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1ub3dyYXBcIiBbaW5uZXJIdG1sXT1cInRvU3RyaW5nKHYpXCI+PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1rZXktdmFsdWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9saW5rLWtleS12YWx1ZS9saW5rLWtleS12YWx1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL2xpbmsta2V5LXZhbHVlL2xpbmsta2V5LXZhbHVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOztBQUV6RixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQy9CLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRWpILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBVSxFQUFFLElBQWEsRUFBRSxFQUFFLENBQ2pELElBQUksQ0FBQyxD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TyxHQUFHLFFBQVEsQ0FDMUIsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUM5RyxDQUFDO0tBS0g7SUFsQkMsSUFDSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQVlTLFdBQVcsQ0FBQyxLQUFVO1FBQzlCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDaEQsQ0FBQzs4R0EvQlUscUJBQXFCO2tHQUFyQixxQkFBcUIscTVCQ2pFbEMsMDVEQXNEQSwyTkRTWSxnQkFBZ0Isb0pBQUUsdUJBQXVCOzsyRkFFeEMscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixDQUFDOzhCQWlCaEQsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IGlzRXhwYW5kYWJsZSwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCwgdG9QcmVjaXNpb24gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5cbmltcG9ydCB7IGJhc2VVcmwsIHNjaGVtYUJhc2VVcmwgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2JsYW5rLW5vZGUtc3RhdGUvYmxhbmstbm9kZS1zdGF0ZS5jb21wb25lbnQnO1xuXG5jb25zdCB2YWx1ZUxpbmsgPSAodmFsdWU6IGFueSkgPT5cbiAgaXNFeHBhbmRhYmxlKHZhbHVlKSAmJiB2YWx1ZVsnQGlkJ10gPyBbYmFzZVVybCgpLCB2YWx1ZVsnQHR5cGUnXS50b0xvd2VyQ2FzZSgpLCB2YWx1ZVsnQGlkJ11dLmpvaW4oJy8nKSA6IG51bGw7XG5cbmNvbnN0IHZhbHVlTGlua1JlZiA9ICh2YWx1ZTogYW55LCBocmVmPzogc3RyaW5nKSA9PlxuICBocmVmID8gYDxhIGNsYXNzPVwiaXMtZGFya1wiIGhyZWY9XCIke2hyZWZ9XCI+JHt2YWx1ZS5uYW1lIHx8IHZhbHVlWydAaWQnXX08L2E+YCA6IG51bGw7XG5cbmNvbnN0IHZhbHVlVmFsdWUgPSAodmFsdWU6IGFueSkgPT4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHZhbHVlVmFsdWUpLmpvaW4oJywgJykgOiB0b1ByZWNpc2lvbih2YWx1ZSkpO1xuXG5jb25zdCBtaW5NYXhWYWx1ZSA9IChtaW4/OiBudW1iZXIsIG1heD86IG51bWJlcikgPT5cbiAgW2lzVW5kZWZpbmVkKG1pbikgPyAnJyA6IGBNaW46ICR7dmFsdWVWYWx1ZShtaW4pfWAsIGlzVW5kZWZpbmVkKG1heCkgPyAnJyA6IGBNYXg6ICR7dmFsdWVWYWx1ZShtYXgpfWBdLmpvaW4oJzsgJyk7XG5cbmNvbnN0IGJsYW5rTm9kZVZhbHVlID0gKHtcbiAgdGVybSxcbiAgdmFsdWUsXG4gIG1pbixcbiAgbWF4XG59OiB7XG4gIHRlcm06IGFueTtcbiAgdmFsdWU/OiBudW1iZXIgfCBib29sZWFuO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbn0pID0+XG4gIFtcbiAgICBbdmFsdWVMaW5rUmVmKHRlcm0sIHZhbHVlTGluayh0ZXJtKSksIGlzVW5kZWZpbmVkKHZhbHVlKSA/ICcnIDogdmFsdWVWYWx1ZSh2YWx1ZSldLmpvaW4oJzogJyksXG4gICAgW2lzVW5kZWZpbmVkKG1pbikgPyAnJyA6IGBNaW46ICR7dmFsdWVWYWx1ZShtaW4pfWAsIGlzVW5kZWZpbmVkKG1heCkgPyAnJyA6IGBNYXg6ICR7dmFsdWVWYWx1ZShtYXgpfWBdLmpvaW4oJzsgJylcbiAgXS5qb2luKCcgLSAnKTtcblxuY29uc3Qgc3RyaW5nTWFwcGVyOiB7XG4gIFt0eXBlOiBzdHJpbmddOiAodmFsdWU/OiBhbnkpID0+IHN0cmluZztcbn0gPSB7XG4gIG51bWJlcjogKHZhbHVlOiBudW1iZXIpID0+IGAke3RvUHJlY2lzaW9uKHZhbHVlLCAzKX1gLFxuICB1bmRlZmluZWQ6ICgpID0+ICcnLFxuICBibGFua05vZGU6IHZhbHVlID0+XG4gICAgJ3Rlcm0nIGluIHZhbHVlID8gYmxhbmtOb2RlVmFsdWUodmFsdWUpIDogdmFsdWVMaW5rUmVmKHZhbHVlLCB2YWx1ZUxpbmsodmFsdWUpKSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlWydAaWQnXSxcbiAgb2JqZWN0OiB2YWx1ZSA9PlxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICA/IHZhbHVlLm1hcCh0b1N0cmluZykuam9pbignLCAnKVxuICAgICAgOiB2YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgPyB2YWx1ZS50b0pTT04oKVxuICAgICAgICA6IGlzRXhwYW5kYWJsZSh2YWx1ZSlcbiAgICAgICAgICA/IHN0cmluZ01hcHBlci5ibGFua05vZGUodmFsdWUpXG4gICAgICAgICAgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMilcbn07XG5cbmNvbnN0IHRvU3RyaW5nID0gKHZhbHVlOiBhbnkpID0+XG4gICh0eXBlb2YgdmFsdWUpIGluIHN0cmluZ01hcHBlciA/IHN0cmluZ01hcHBlclt0eXBlb2YgdmFsdWVdKHZhbHVlKSA6IHZhbHVlLnRvU3RyaW5nKCk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWxpbmsta2V5LXZhbHVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmsta2V5LXZhbHVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGluay1rZXktdmFsdWUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0LCBCbGFua05vZGVTdGF0ZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTGlua0tleVZhbHVlQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIG5vZGUgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG4gIHByb3RlY3RlZCBub2RlVHlwZSA9IGlucHV0LnJlcXVpcmVkPE5vZGVUeXBlPigpO1xuICBwcm90ZWN0ZWQgZGF0YVN0YXRlID0gaW5wdXQucmVxdWlyZWQ8RGF0YVN0YXRlPigpO1xuICBwcm90ZWN0ZWQgZGF0YUtleSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQga2V5ID0gaW5wdXQ8c3RyaW5nPigpO1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZhbHVlID0gaW5wdXQ8YW55PignJyk7XG5cbiAgcHJvdGVjdGVkIGlzRXhwYW5kYWJsZSA9IGlzRXhwYW5kYWJsZTtcbiAgcHJvdGVjdGVkIHZhbHVlTGluayA9IHZhbHVlTGluaztcbiAgcHJvdGVjdGVkIGlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gIHByb3RlY3RlZCBtaW5NYXhWYWx1ZSA9IG1pbk1heFZhbHVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtaW5saW5lLWJsb2NrJylcbiAgZ2V0IGlzSW5saW5lQmxvY2soKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcnJheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNjaGVtYUJhc2VVcmwgPSBzY2hlbWFCYXNlVXJsKCk7XG4gIHByb3RlY3RlZCB0b1N0cmluZyA9IHRvU3RyaW5nO1xuXG4gIHByb3RlY3RlZCB0eXBlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5ub2RlKCk/LlsnQHR5cGUnXSB8fCB0aGlzLm5vZGUoKT8udHlwZSk7XG4gIHByb3RlY3RlZCB2YWx1ZSA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLm5vZGUoKSwgdGhpcy5rZXkoKSkpO1xuICBwcm90ZWN0ZWQgaGFzVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAhaXNVbmRlZmluZWQodGhpcy52YWx1ZSgpKSk7XG4gIHByb3RlY3RlZCBpc0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKCkpICYmIFt0aGlzLnZhbHVlKCkubGVuZ3RoID4gMSwgaXNFeHBhbmRhYmxlKHRoaXMudmFsdWUoKT8uWzBdKV0uc29tZShCb29sZWFuKVxuICApO1xuXG4gIHByb3RlY3RlZCBpc0JsYW5rTm9kZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGlzRXhwYW5kYWJsZSh2YWx1ZSkgJiYgJ3Rlcm0nIGluIHZhbHVlO1xuICB9XG59XG4iLCJAaWYgKGhhc1ZhbHVlKCkpIHtcbiAgPGEgY2xhc3M9XCJpcy1kYXJrXCIgW2hyZWZdPVwic2NoZW1hQmFzZVVybCArICcvJyArIHR5cGUoKSArICcjJyArIGtleSgpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgPGI+e3sga2V5KCkgfX08L2I+XG4gIDwvYT5cbiAgPHNwYW4gY2xhc3M9XCJwci0yXCI+Ojwvc3Bhbj5cbiAgQGlmIChpc0FycmF5KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXJyYXktY29udGFpbmVyIGlzLXBsLTJcIj5cbiAgICAgIEBmb3IgKHYgb2YgdmFsdWUoKTsgdHJhY2sgdikge1xuICAgICAgICBAaWYgKGlzQmxhbmtOb2RlKHYpKSB7XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtZGFya1wiIFtocmVmXT1cInZhbHVlTGluayh2LnRlcm0pXCI+e3sgdi50ZXJtLm5hbWUgfHwgdi50ZXJtWydAaWQnXSB9fTwvYT5cbiAgICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG4gICAgICAgICAgICBAaWYgKCFpc1VuZGVmaW5lZCh2LnZhbHVlKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVDb250ZW50OyBjb250ZXh0OiB7IHZhbHVlOiB2LnZhbHVlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaXNVbmRlZmluZWQodi5taW4pIHx8ICFpc1VuZGVmaW5lZCh2Lm1heCkpIHtcbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaXMtcGwtMVwiPih7eyBtaW5NYXhWYWx1ZSh2Lm1pbiwgdi5tYXgpIH19KTwvc21hbGw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZVxuICAgICAgICAgICAgICBjbGFzcz1cInBsLTFcIlxuICAgICAgICAgICAgICBbbm9kZV09XCJ2XCJcbiAgICAgICAgICAgICAgW25vZGVUeXBlXT1cIm5vZGVUeXBlKClcIlxuICAgICAgICAgICAgICBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgW2RhdGFLZXldPVwiZGF0YUtleSgpXCJcbiAgICAgICAgICAgICAga2V5PVwidmFsdWVcIlxuICAgICAgICAgICAgICBsaW5rQ2xhc3M9XCJpcy1kYXJrXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZUNvbnRlbnQ7IGNvbnRleHQ6IHsgdmFsdWU6IHYgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVDb250ZW50OyBjb250ZXh0OiB7IHZhbHVlOiB2YWx1ZSgpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZVxuICAgICAgY2xhc3M9XCJwbC0xXCJcbiAgICAgIFtub2RlXT1cIm5vZGUoKVwiXG4gICAgICBbbm9kZVR5cGVdPVwibm9kZVR5cGUoKVwiXG4gICAgICBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCJcbiAgICAgIFtkYXRhS2V5XT1cImRhdGFLZXkoKVwiXG4gICAgICBba2V5XT1cImtleSgpXCJcbiAgICAgIGxpbmtDbGFzcz1cImlzLWRhcmtcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gIH1cbn0gQGVsc2UgaWYgKCEhZGVmYXVsdFZhbHVlKCkpIHtcbiAgPHNwYW4+e3sgZGVmYXVsdFZhbHVlKCkgfX08L3NwYW4+XG59XG5cbjxuZy10ZW1wbGF0ZSAjdmFsdWVDb250ZW50IGxldC12PVwidmFsdWVcIj5cbiAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtbm93cmFwXCIgW2lubmVySHRtbF09XCJ0b1N0cmluZyh2KVwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
2
  import { FaIconComponent } from '@fortawesome/angular-fontawesome';
3
3
  import { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons';
4
- import { baseUrl } from '../utils';
4
+ import { schemaBaseUrl } from '../utils';
5
5
  import * as i0 from "@angular/core";
6
6
  export class SchemaVersionLinkComponent {
7
7
  constructor() {
@@ -9,7 +9,7 @@ export class SchemaVersionLinkComponent {
9
9
  this.node = input.required();
10
10
  this.showExternalLink = input(true);
11
11
  this.linkClass = input('');
12
- this.url = computed(() => [baseUrl(), 'schema', this.node().schemaVersion, this.node()['@type']].filter(Boolean).join('/'));
12
+ this.url = computed(() => [schemaBaseUrl(this.node().schemaVersion), this.node()['@type']].filter(Boolean).join('/'));
13
13
  }
14
14
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: SchemaVersionLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
15
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: SchemaVersionLinkComponent, isStandalone: true, selector: "he-schema-version-link", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null }, showExternalLink: { classPropertyName: "showExternalLink", publicName: "showExternalLink", isSignal: true, isRequired: false, transformFunction: null }, linkClass: { classPropertyName: "linkClass", publicName: "linkClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<a [href]=\"url()\" target=\"_blank\" [class]=\"linkClass()\" (click)=\"$event.stopPropagation()\">\n <ng-content></ng-content>\n @if (showExternalLink()) {\n <fa-icon class=\"ml-2\" [icon]=\"faExternalLinkAlt\" size=\"sm\"></fa-icon>\n }\n</a>\n", styles: ["a{color:inherit}\n"], 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
18
18
  type: Component,
19
19
  args: [{ selector: 'he-schema-version-link', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FaIconComponent], template: "<a [href]=\"url()\" target=\"_blank\" [class]=\"linkClass()\" (click)=\"$event.stopPropagation()\">\n <ng-content></ng-content>\n @if (showExternalLink()) {\n <fa-icon class=\"ml-2\" [icon]=\"faExternalLinkAlt\" size=\"sm\"></fa-icon>\n }\n</a>\n", styles: ["a{color:inherit}\n"] }]
20
20
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBVW5DLE1BQU0sT0FBTywwQkFBMEI7SUFSdkM7UUFTcUIsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFFL0MsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztRQUM3QixxQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsY0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QixRQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1QixDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ2pHLENBQUM7S0FDSDs4R0FWWSwwQkFBMEI7a0dBQTFCLDBCQUEwQiwrZUNkdkMsOFBBTUEsNEVETVksZUFBZTs7MkZBRWQsMEJBQTBCO2tCQVJ0QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhRXh0ZXJuYWxMaW5rQWx0IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcblxuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtc2NoZW1hLXZlcnNpb24tbGluaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlbWEtdmVyc2lvbi1saW5rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZhSWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgU2NoZW1hVmVyc2lvbkxpbmtDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFFeHRlcm5hbExpbmtBbHQgPSBmYUV4dGVybmFsTGlua0FsdDtcblxuICBwcm90ZWN0ZWQgbm9kZSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcbiAgcHJvdGVjdGVkIHNob3dFeHRlcm5hbExpbmsgPSBpbnB1dCh0cnVlKTtcbiAgcHJvdGVjdGVkIGxpbmtDbGFzcyA9IGlucHV0KCcnKTtcblxuICBwcm90ZWN0ZWQgdXJsID0gY29tcHV0ZWQoKCkgPT5cbiAgICBbYmFzZVVybCgpLCAnc2NoZW1hJywgdGhpcy5ub2RlKCkuc2NoZW1hVmVyc2lvbiwgdGhpcy5ub2RlKClbJ0B0eXBlJ11dLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJylcbiAgKTtcbn1cbiIsIjxhIFtocmVmXT1cInVybCgpXCIgdGFyZ2V0PVwiX2JsYW5rXCIgW2NsYXNzXT1cImxpbmtDbGFzcygpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIEBpZiAoc2hvd0V4dGVybmFsTGluaygpKSB7XG4gICAgPGZhLWljb24gY2xhc3M9XCJtbC0yXCIgW2ljb25dPVwiZmFFeHRlcm5hbExpbmtBbHRcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gIH1cbjwvYT5cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBVXpDLE1BQU0sT0FBTywwQkFBMEI7SUFSdkM7UUFTcUIsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFFL0MsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztRQUM3QixxQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsY0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QixRQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDM0YsQ0FBQztLQUNIOzhHQVZZLDBCQUEwQjtrR0FBMUIsMEJBQTBCLCtlQ2R2Qyw4UEFNQSw0RURNWSxlQUFlOzsyRkFFZCwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFFeHRlcm5hbExpbmtBbHQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5pbXBvcnQgeyBzY2hlbWFCYXNlVXJsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1zY2hlbWEtdmVyc2lvbi1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVtYS12ZXJzaW9uLWxpbmsuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY2hlbWEtdmVyc2lvbi1saW5rLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRmFJY29uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBTY2hlbWFWZXJzaW9uTGlua0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUV4dGVybmFsTGlua0FsdCA9IGZhRXh0ZXJuYWxMaW5rQWx0O1xuXG4gIHByb3RlY3RlZCBub2RlID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBwcm90ZWN0ZWQgc2hvd0V4dGVybmFsTGluayA9IGlucHV0KHRydWUpO1xuICBwcm90ZWN0ZWQgbGlua0NsYXNzID0gaW5wdXQoJycpO1xuXG4gIHByb3RlY3RlZCB1cmwgPSBjb21wdXRlZCgoKSA9PlxuICAgIFtzY2hlbWFCYXNlVXJsKHRoaXMubm9kZSgpLnNjaGVtYVZlcnNpb24pLCB0aGlzLm5vZGUoKVsnQHR5cGUnXV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKVxuICApO1xufVxuIiwiPGEgW2hyZWZdPVwidXJsKClcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbY2xhc3NdPVwibGlua0NsYXNzKClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgQGlmIChzaG93RXh0ZXJuYWxMaW5rKCkpIHtcbiAgICA8ZmEtaWNvbiBjbGFzcz1cIm1sLTJcIiBbaWNvbl09XCJmYUV4dGVybmFsTGlua0FsdFwiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgfVxuPC9hPlxuIl19
@@ -1,13 +1,20 @@
1
1
  import get from 'lodash.get';
2
- import { SchemaType } from '@hestia-earth/schema';
2
+ import { SchemaType, SCHEMA_VERSION } from '@hestia-earth/schema';
3
3
  export const gitHome = 'https://gitlab.com/hestia-earth';
4
4
  export const gitBranch = () => (['dev', 'staging'].some(env => baseUrl().includes(env)) ? 'develop' : 'master');
5
5
  export const isChrome = () => window.navigator.userAgent.includes('Chrome');
6
- export const baseUrl = () => window.location.origin?.includes('localhost') || window.location.origin?.includes('hestia.earth')
7
- ? window.location.origin
8
- : 'https://www.hestia.earth';
9
- export const baseApiUrl = () => baseUrl().replace('www', 'api');
6
+ export const baseUrl = (allowLocalhost = true) => window.location.origin?.includes('localhost')
7
+ ? allowLocalhost
8
+ ? window.location.origin
9
+ : 'https://www-dev.hestia.earth'
10
+ : window.location.origin?.includes('hestia.earth')
11
+ ? window.location.origin
12
+ : 'https://www.hestia.earth';
13
+ export const baseApiUrl = () => baseUrl(false).replace('www', 'api');
10
14
  export const isExternal = () => baseUrl() !== window.location.origin;
15
+ export const schemaBaseUrl = (version) => [baseUrl(), 'schema', version].filter(Boolean).join('/');
16
+ export const schemaDataBaseUrl = (version) => [baseUrl(false), 'schema-data', version || SCHEMA_VERSION].filter(Boolean).join('/');
17
+ export const glossaryBaseUrl = (allowLocalhost = true) => [baseUrl(allowLocalhost), 'glossary'].filter(Boolean).join('/');
11
18
  const parseErrorStatus = (error) => (error?.statusText || '').toLowerCase().replace(/\s/g, '-');
12
19
  const parseErrorMessage = (error) => get(error, 'error.error', get(error, 'error.message', get(error, 'error', get(error, 'message', error))));
13
20
  export const handleAPIError = (err) => {
@@ -106,9 +113,9 @@ export const reportIssueUrl = (repository, template) => `${gitHome}/${repository
106
113
  export const changelogUrl = (repository) => `${gitHome}/${repository}/-/blob/master/CHANGELOG.md`;
107
114
  export const contactUsEmail = 'community@hestia.earth';
108
115
  export const externalLink = (href, text) => `<a href="${href}" target="_blank">${text}</a>`;
109
- export const glossaryLink = (text) => externalLink(`${baseUrl()}/glossary`, text);
116
+ export const glossaryLink = (text) => externalLink(glossaryBaseUrl(), text);
110
117
  export const nodeLink = ({ '@type': type, '@id': id, name }) => type && id ? `<a href="/${type.toLowerCase()}/${id}" target="_blank">${name || id}</a>` : null;
111
- export const schemaLink = (type, title = type) => `<a href="${baseUrl()}/schema/${type}" target="_blank">${title}</a>`;
118
+ export const schemaLink = (type, title = type) => `<a href="${schemaBaseUrl()}/${type}" target="_blank">${title}</a>`;
112
119
  export const code = (text) => `<code>${text}</code>`;
113
120
  export const contactUsLink = (text = 'contact us') => `<a href="mailto:${contactUsEmail}">${text}</a>`;
114
121
  export const reportIssueLink = (repository, template, text = 'here') => externalLink(reportIssueUrl(repository, template), text);
@@ -121,4 +128,4 @@ export const bytesSize = (bytes) => {
121
128
  const i = isNaN(bytes) || bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));
122
129
  return `${isNaN(bytes) ? 0 : parseFloat((bytes / Math.pow(1024, i)).toFixed(2))} ${sizes[i]}`;
123
130
  };
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVoSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN4QixDQUFDLENBQUMsMEJBQTBCLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8s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ZW50IjpbImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgeyBJU2l0ZUpTT05MRCwgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIFNjaGVtYVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmV4cG9ydCBjb25zdCBnaXRIb21lID0gJ2h0dHBzOi8vZ2l0bGFiLmNvbS9oZXN0aWEtZWFydGgnO1xuZXhwb3J0IGNvbnN0IGdpdEJyYW5jaCA9ICgpID0+IChbJ2RldicsICdzdGFnaW5nJ10uc29tZShlbnYgPT4gYmFzZVVybCgpLmluY2x1ZGVzKGVudikpID8gJ2RldmVsb3AnIDogJ21hc3RlcicpO1xuXG5leHBvcnQgY29uc3QgaXNDaHJvbWUgPSAoKSA9PiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcygnQ2hyb21lJyk7XG5cbmV4cG9ydCBjb25zdCBiYXNlVXJsID0gKCkgPT5cbiAgd2luZG93LmxvY2F0aW9uLm9yaWdpbj8uaW5jbHVkZXMoJ2xvY2FsaG9zdCcpIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4/LmluY2x1ZGVzKCdoZXN0aWEuZWFydGgnKVxuICAgID8gd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgIDogJ2h0dHBzOi8vd3d3Lmhlc3RpYS5lYXJ0aCc7XG5cbmV4cG9ydCBjb25zdCBiYXNlQXBpVXJsID0gKCkgPT4gYmFzZVVybCgpLnJlcGxhY2UoJ3d3dycsICdhcGknKTtcblxuZXhwb3J0IGNvbnN0IGlzRXh0ZXJuYWwgPSAoKSA9PiBiYXNlVXJsKCkgIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG5cbmNvbnN0IHBhcnNlRXJyb3JTdGF0dXMgPSAoZXJyb3I6IGFueSkgPT4gKGVycm9yPy5zdGF0dXNUZXh0IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCAnLScpO1xuXG5jb25zdCBwYXJzZUVycm9yTWVzc2FnZSA9IChlcnJvcjogYW55KSA9PlxuICBnZXQoZXJyb3IsICdlcnJvci5lcnJvcicsIGdldChlcnJvciwgJ2Vycm9yLm1lc3NhZ2UnLCBnZXQoZXJyb3IsICdlcnJvcicsIGdldChlcnJvciwgJ21lc3NhZ2UnLCBlcnJvcikpKSk7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVBUElFcnJvciA9IChlcnI6IGFueSkgPT4ge1xuICBsZXQgZXJyb3I7XG4gIHRyeSB7XG4gICAgZXJyb3IgPSBwYXJzZUVycm9yTWVzc2FnZShlcnIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclRleHQgPSAoZXJyb3I6IGFueSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIGNvbnN0IGVyciA9IHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgcmV0dXJuIHBhcnNlRXJyb3JTdGF0dXMoZXJyKSB8fCBlcnI7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyUGFyYW1zID0gKG9iajogYW55KSA9PiB7XG4gIGNvbnN0IHJlczoge1xuICAgIFt4OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqKVxuICAgIC5zb3J0KClcbiAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzW2tleV0gPSBgJHt2YWx1ZX1gO1xuICAgICAgfVxuICAgIH0pO1xuICByZXR1cm4gcmVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHdhaXRGb3IgPSAodmFyaWFibGU6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+XG4gIGdldCh3aW5kb3csIHZhcmlhYmxlLCBmYWxzZSkgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dCgoKSA9PiB3YWl0Rm9yKHZhcmlhYmxlLCBjYWxsYmFjayksIDEwMCk7XG5cbmV4cG9ydCBjb25zdCBib3R0b20gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGVkQmVsb3cgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IChlbGVtZW50ID8gd2luZG93LnNjcm9sbFkgPiBib3R0b20oZWxlbWVudCkgOiBmYWxzZSk7XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsID0gKGlkOiBzdHJpbmcsIHJldHJpZXMgPSAwKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBzZXRUaW1lb3V0KCgpID0+IChlbCA/IGVsLnNjcm9sbEludG9WaWV3KCkgOiByZXRyaWVzIDwgMTAgPyBzY3JvbGxUb0VsKGlkLCByZXRyaWVzICsgMSkgOiBudWxsKSwgMTAwKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbmV4cG9ydCBjb25zdCBzYWZlSlNPTlBhcnNlID0gPFQ+KHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKEpTT04ucGFyc2UodmFsdWUpIGFzIFQpIDogdmFsdWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzYWZlSlNPTlN0cmluZ2lmeSA9ICh2YWx1ZTogc3RyaW5nKSA9PiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuZXhwb3J0IGNvbnN0IGFycmF5VmFsdWUgPSAodmFsdWVzOiBhbnlbXSwgaXNBdmVyYWdlOiBib29sZWFuKSA9PlxuICAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycikgPT4gcHJldiArIHBhcnNlRmxvYXQoYCR7Y3Vycn1gKSwgMCkgLyAoaXNBdmVyYWdlID8gdmFsdWVzLmxlbmd0aCA6IDEpO1xuXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSAodGV4dCA9ICcnLCBtYXhsZW5ndGggPSAyMCkgPT5cbiAgdGV4dC5sZW5ndGggPiBtYXhsZW5ndGggPyBgJHt0ZXh0LnN1YnN0cmluZygwLCBtYXhsZW5ndGgpfS4uLmAgOiB0ZXh0O1xuXG5jb25zdCBtYXBzUXVlcnkgPSAnaHR0cDovL21hcHMuZ29vZ2xlLmNvbS8/cT0nO1xuXG5leHBvcnQgY29uc3QgbWFwc1VybCA9IChsb2NhdGlvbj86IHsgbGF0PzogbnVtYmVyOyBsbmc/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSkgPT5cbiAgbG9jYXRpb25cbiAgICA/IGxvY2F0aW9uLmxhdCAmJiBsb2NhdGlvbi5sbmdcbiAgICAgID8gYCR7bWFwc1F1ZXJ5fSR7bG9jYXRpb24ubGF0fSwke2xvY2F0aW9uLmxuZ31gXG4gICAgICA6IGxvY2F0aW9uLm5hbWVcbiAgICAgICAgPyBgJHttYXBzUXVlcnl9JHtlbmNvZGVVUkkobG9jYXRpb24ubmFtZSl9YFxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBub2RlRGVmYXVsdExhYmVsOiB7XG4gIFt0eXBlIGluIFNjaGVtYVR5cGVdPzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xufSA9IHtcbiAgW1NjaGVtYVR5cGUuSW1wYWN0QXNzZXNzbWVudF06ICh7IG5hbWUsIGNvdW50cnksIGVuZERhdGUsIHByb2R1Y3QgfTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpID0+XG4gICAgbmFtZVxuICAgICAgPyBuYW1lLnJlcGxhY2UoYCR7cHJvZHVjdD8udGVybT8ubmFtZX0sIGAsICcnKVxuICAgICAgOiBbcHJvZHVjdD8udGVybT8ubmFtZSwgY291bnRyeT8ubmFtZSwgZW5kRGF0ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyksXG4gIFtTY2hlbWFUeXBlLlNpdGVdOiAoeyBuYW1lLCBkZXNjcmlwdGlvbiB9OiBJU2l0ZUpTT05MRCkgPT4gbmFtZSB8fCBkZXNjcmlwdGlvbiEsXG4gIFtTY2hlbWFUeXBlLlRyYW5zZm9ybWF0aW9uXTogKHsgbmFtZSwgdGVybSB9OiBhbnkpID0+IG5hbWUgfHwgdGVybT8ubmFtZVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMYWJlbCA9IChub2RlPzogYW55KSA9PlxuICBub2RlXG4gICAgPyAobm9kZVsnQHR5cGUnXSBpbiBub2RlRGVmYXVsdExhYmVsID8gbm9kZURlZmF1bHRMYWJlbFtub2RlWydAdHlwZSddXShub2RlKSA6IG5vZGUubmFtZSkgfHwgbm9kZVsnQGlkJ10gfHwgbm9kZS5pZFxuICAgIDogJyc7XG5cbmV4cG9ydCBjb25zdCByZXBlYXQgPSAodGltZXMgPSAwKSA9PiBBcnJheS5mcm9tKEFycmF5KHRpbWVzKSwgTWF0aC5yYW5kb20pO1xuXG5leHBvcnQgY29uc3QgY29weU9iamVjdCA9IChkYXRhPzogYW55KSA9PiAoZGF0YSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIDogbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKGE6IGFueSwgYjogYW55KSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYik7XG5cbmV4cG9ydCBjb25zdCB0eXBlYWhlYWRGb2N1cyA9IChlOiBFdmVudCkgPT4ge1xuICBpZiAoZS5idWJibGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4gZS50YXJnZXQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKSwgMCk7XG59O1xuXG5leHBvcnQgZW51bSBSZXBvc2l0b3J5IHtcbiAgZ2xvc3NhcnkgPSAnaGVzdGlhLWdsb3NzYXJ5JyxcbiAgbW9kZWxzID0gJ2hlc3RpYS1lbmdpbmUtbW9kZWxzJyxcbiAgb3JjaGVzdHJhdG9yID0gJ2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yJyxcbiAgYWdncmVnYXRpb24gPSAnaGVzdGlhLWFnZ3JlZ2F0aW9uLWVuZ2luZScsXG4gIGNvbW11bml0eSA9ICdoZXN0aWEtY29tbXVuaXR5LWVkaXRpb24nLFxuICBwb29yZW5lbWVjayA9ICdoZXN0aWEtY29udmVydC1wb29yZS1uZW1lY2VrJyxcbiAgZnJvbnRlbmQgPSAnaGVzdGlhLWZyb250LWVuZCcsXG4gIHNjaGVtYSA9ICdoZXN0aWEtc2NoZW1hJ1xufVxuXG5leHBvcnQgZW51bSBUZW1wbGF0ZSB7XG4gIGJ1ZyA9ICdidWcnLFxuICBmZWF0dXJlID0gJ2ZlYXR1cmUnXG59XG5cbmV4cG9ydCBjb25zdCByZXBvcnRJc3N1ZVVybCA9IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5LCB0ZW1wbGF0ZT86IFRlbXBsYXRlKSA9PlxuICBgJHtnaXRIb21lfS8ke3JlcG9zaXRvcnl9Ly0vaXNzdWVzL25ldyR7dGVtcGxhdGUgPyBgP2lzc3VhYmxlX3RlbXBsYXRlPSR7dGVtcGxhdGV9YCA6ICcnfWA7XG5cbmV4cG9ydCBjb25zdCBjaGFuZ2Vsb2dVcmwgPSAocmVwb3NpdG9yeTogUmVwb3NpdG9yeSkgPT4gYCR7Z2l0SG9tZX0vJHtyZXBvc2l0b3J5fS8tL2Jsb2IvbWFzdGVyL0NIQU5HRUxPRy5tZGA7XG5cbmV4cG9ydCBjb25zdCBjb250YWN0VXNFbWFpbCA9ICdjb21tdW5pdHlAaGVzdGlhLmVhcnRoJztcbmV4cG9ydCBjb25zdCBleHRlcm5hbExpbmsgPSAoaHJlZjogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IGA8YSBocmVmPVwiJHtocmVmfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGV4dH08L2E+YDtcbmV4cG9ydCBjb25zdCBnbG9zc2FyeUxpbmsgPSAodGV4dDogc3RyaW5nKSA9PiBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeWAsIHRleHQpO1xuZXhwb3J0IGNvbnN0IG5vZGVMaW5rID0gKHsgJ0B0eXBlJzogdHlwZSwgJ0BpZCc6IGlkLCBuYW1lIH06IHsgJ0B0eXBlJzogc3RyaW5nOyAnQGlkJzogc3RyaW5nOyBuYW1lPzogc3RyaW5nIH0pID0+XG4gIHR5cGUgJiYgaWQgPyBgPGEgaHJlZj1cIi8ke3R5cGUudG9Mb3dlckNhc2UoKX0vJHtpZH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke25hbWUgfHwgaWR9PC9hPmAgOiBudWxsO1xuZXhwb3J0IGNvbnN0IHNjaGVtYUxpbmsgPSAodHlwZTogc3RyaW5nLCB0aXRsZSA9IHR5cGUpID0+XG4gIGA8YSBocmVmPVwiJHtiYXNlVXJsKCl9L3NjaGVtYS8ke3R5cGV9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHt0aXRsZX08L2E+YDtcbmV4cG9ydCBjb25zdCBjb2RlID0gKHRleHQ6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pID0+IGA8Y29kZT4ke3RleHR9PC9jb2RlPmA7XG5leHBvcnQgY29uc3QgY29udGFjdFVzTGluayA9ICh0ZXh0ID0gJ2NvbnRhY3QgdXMnKSA9PiBgPGEgaHJlZj1cIm1haWx0bzoke2NvbnRhY3RVc0VtYWlsfVwiPiR7dGV4dH08L2E+YDtcbmV4cG9ydCBjb25zdCByZXBvcnRJc3N1ZUxpbmsgPSAocmVwb3NpdG9yeTogUmVwb3NpdG9yeSwgdGVtcGxhdGU/OiBUZW1wbGF0ZSwgdGV4dCA9ICdoZXJlJykgPT5cbiAgZXh0ZXJuYWxMaW5rKHJlcG9ydElzc3VlVXJsKHJlcG9zaXRvcnksIHRlbXBsYXRlKSwgdGV4dCk7XG5cbmludGVyZmFjZSBJR2l0bGFiUmF3UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHdoZXJlIHRoZSBmaWxlIGlzIGxvY2F0ZWQuXG4gICAqL1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGZpbGUsIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSB1cmwgb2YgdGhlIEhFU1RJQSBBUEkuXG4gICAqL1xuICBhcGlVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoLCB1c2luZyB0aGUgZGVmYXVsdCBicmFuY2ggYmFzZWQgb24gdGhlIGVudmlyb25tZW50LlxuICAgKi9cbiAgYnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVybCB0byBmZXRjaCByYXcgY29udGVudCBmcm9tIEdpdGxhYiwgYnlwYXNzaW5nIENPUlMgaXNzdWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2l0bGFiUmF3VXJsID0gKHsgcmVwb3NpdG9yeSwgcGF0aCwgYXBpVXJsLCBicmFuY2ggfTogSUdpdGxhYlJhd1BhcmFtcykgPT5cbiAgYCR7YXBpVXJsIHx8IGJhc2VBcGlVcmwoKX0vZ2l0bGFiL3Jhdz9yZXBvc2l0b3J5PSR7cmVwb3NpdG9yeX0mYnJhbmNoPSR7XG4gICAgYnJhbmNoIHx8IGdpdEJyYW5jaCgpXG4gIH0mcGF0aD0ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX1gO1xuXG5jb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcblxuZXhwb3J0IGNvbnN0IGJ5dGVzU2l6ZSA9IChieXRlczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGkgPSBpc05hTihieXRlcykgfHwgYnl0ZXMgPT09IDAgPyAwIDogTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSk7XG4gIHJldHVybiBgJHtpc05hTihieXRlcykgPyAwIDogcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBpKSkudG9GaXhlZCgyKSl9ICR7c2l6ZXNbaV19YDtcbn07XG4iXX0=
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQXdDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsaUNBQWlDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFaEgsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU1RSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FDL0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMzQyxDQUFDLENBQUMsY0FBYztRQUNkLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDeEIsQ0FBQyxDQUFDLDhCQUE4QjtJQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUNoRCxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ3hCLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxV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QU0sSUFBSSxTQUFTLEVBQ3JCLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUV0QyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUN6QyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7IElTaXRlSlNPTkxELCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgU2NoZW1hVHlwZSwgU0NIRU1BX1ZFUlNJT04gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmV4cG9ydCBjb25zdCBnaXRIb21lID0gJ2h0dHBzOi8vZ2l0bGFiLmNvbS9oZXN0aWEtZWFydGgnO1xuZXhwb3J0IGNvbnN0IGdpdEJyYW5jaCA9ICgpID0+IChbJ2RldicsICdzdGFnaW5nJ10uc29tZShlbnYgPT4gYmFzZVVybCgpLmluY2x1ZGVzKGVudikpID8gJ2RldmVsb3AnIDogJ21hc3RlcicpO1xuXG5leHBvcnQgY29uc3QgaXNDaHJvbWUgPSAoKSA9PiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcygnQ2hyb21lJyk7XG5cbmV4cG9ydCBjb25zdCBiYXNlVXJsID0gKGFsbG93TG9jYWxob3N0ID0gdHJ1ZSkgPT5cbiAgd2luZG93LmxvY2F0aW9uLm9yaWdpbj8uaW5jbHVkZXMoJ2xvY2FsaG9zdCcpXG4gICAgPyBhbGxvd0xvY2FsaG9zdFxuICAgICAgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICA6ICdodHRwczovL3d3dy1kZXYuaGVzdGlhLmVhcnRoJ1xuICAgIDogd2luZG93LmxvY2F0aW9uLm9yaWdpbj8uaW5jbHVkZXMoJ2hlc3RpYS5lYXJ0aCcpXG4gICAgICA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIDogJ2h0dHBzOi8vd3d3Lmhlc3RpYS5lYXJ0aCc7XG5cbmV4cG9ydCBjb25zdCBiYXNlQXBpVXJsID0gKCkgPT4gYmFzZVVybChmYWxzZSkucmVwbGFjZSgnd3d3JywgJ2FwaScpO1xuXG5leHBvcnQgY29uc3QgaXNFeHRlcm5hbCA9ICgpID0+IGJhc2VVcmwoKSAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYUJhc2VVcmwgPSAodmVyc2lvbj86IHN0cmluZykgPT4gW2Jhc2VVcmwoKSwgJ3NjaGVtYScsIHZlcnNpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG5cbmV4cG9ydCBjb25zdCBzY2hlbWFEYXRhQmFzZVVybCA9ICh2ZXJzaW9uPzogc3RyaW5nKSA9PlxuICBbYmFzZVVybChmYWxzZSksICdzY2hlbWEtZGF0YScsIHZlcnNpb24gfHwgU0NIRU1BX1ZFUlNJT05dLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG5cbmV4cG9ydCBjb25zdCBnbG9zc2FyeUJhc2VVcmwgPSAoYWxsb3dMb2NhbGhvc3QgPSB0cnVlKSA9PlxuICBbYmFzZVVybChhbGxvd0xvY2FsaG9zdCksICdnbG9zc2FyeSddLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG5cbmNvbnN0IHBhcnNlRXJyb3JTdGF0dXMgPSAoZXJyb3I6IGFueSkgPT4gKGVycm9yPy5zdGF0dXNUZXh0IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCAnLScpO1xuXG5jb25zdCBwYXJzZUVycm9yTWVzc2FnZSA9IChlcnJvcjogYW55KSA9PlxuICBnZXQoZXJyb3IsICdlcnJvci5lcnJvcicsIGdldChlcnJvciwgJ2Vycm9yLm1lc3NhZ2UnLCBnZXQoZXJyb3IsICdlcnJvcicsIGdldChlcnJvciwgJ21lc3NhZ2UnLCBlcnJvcikpKSk7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVBUElFcnJvciA9IChlcnI6IGFueSkgPT4ge1xuICBsZXQgZXJyb3I7XG4gIHRyeSB7XG4gICAgZXJyb3IgPSBwYXJzZUVycm9yTWVzc2FnZShlcnIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclRleHQgPSAoZXJyb3I6IGFueSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIGNvbnN0IGVyciA9IHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgcmV0dXJuIHBhcnNlRXJyb3JTdGF0dXMoZXJyKSB8fCBlcnI7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyUGFyYW1zID0gKG9iajogYW55KSA9PiB7XG4gIGNvbnN0IHJlczoge1xuICAgIFt4OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqKVxuICAgIC5zb3J0KClcbiAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmVzW2tleV0gPSBgJHt2YWx1ZX1gO1xuICAgICAgfVxuICAgIH0pO1xuICByZXR1cm4gcmVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHdhaXRGb3IgPSAodmFyaWFibGU6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+XG4gIGdldCh3aW5kb3csIHZhcmlhYmxlLCBmYWxzZSkgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dCgoKSA9PiB3YWl0Rm9yKHZhcmlhYmxlLCBjYWxsYmFjayksIDEwMCk7XG5cbmV4cG9ydCBjb25zdCBib3R0b20gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGVkQmVsb3cgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IChlbGVtZW50ID8gd2luZG93LnNjcm9sbFkgPiBib3R0b20oZWxlbWVudCkgOiBmYWxzZSk7XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsID0gKGlkOiBzdHJpbmcsIHJldHJpZXMgPSAwKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBzZXRUaW1lb3V0KCgpID0+IChlbCA/IGVsLnNjcm9sbEludG9WaWV3KCkgOiByZXRyaWVzIDwgMTAgPyBzY3JvbGxUb0VsKGlkLCByZXRyaWVzICsgMSkgOiBudWxsKSwgMTAwKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbmV4cG9ydCBjb25zdCBzYWZlSlNPTlBhcnNlID0gPFQ+KHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKEpTT04ucGFyc2UodmFsdWUpIGFzIFQpIDogdmFsdWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzYWZlSlNPTlN0cmluZ2lmeSA9ICh2YWx1ZTogc3RyaW5nKSA9PiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuZXhwb3J0IGNvbnN0IGFycmF5VmFsdWUgPSAodmFsdWVzOiBhbnlbXSwgaXNBdmVyYWdlOiBib29sZWFuKSA9PlxuICAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycikgPT4gcHJldiArIHBhcnNlRmxvYXQoYCR7Y3Vycn1gKSwgMCkgLyAoaXNBdmVyYWdlID8gdmFsdWVzLmxlbmd0aCA6IDEpO1xuXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSAodGV4dCA9ICcnLCBtYXhsZW5ndGggPSAyMCkgPT5cbiAgdGV4dC5sZW5ndGggPiBtYXhsZW5ndGggPyBgJHt0ZXh0LnN1YnN0cmluZygwLCBtYXhsZW5ndGgpfS4uLmAgOiB0ZXh0O1xuXG5jb25zdCBtYXBzUXVlcnkgPSAnaHR0cDovL21hcHMuZ29vZ2xlLmNvbS8/cT0nO1xuXG5leHBvcnQgY29uc3QgbWFwc1VybCA9IChsb2NhdGlvbj86IHsgbGF0PzogbnVtYmVyOyBsbmc/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSkgPT5cbiAgbG9jYXRpb25cbiAgICA/IGxvY2F0aW9uLmxhdCAmJiBsb2NhdGlvbi5sbmdcbiAgICAgID8gYCR7bWFwc1F1ZXJ5fSR7bG9jYXRpb24ubGF0fSwke2xvY2F0aW9uLmxuZ31gXG4gICAgICA6IGxvY2F0aW9uLm5hbWVcbiAgICAgICAgPyBgJHttYXBzUXVlcnl9JHtlbmNvZGVVUkkobG9jYXRpb24ubmFtZSl9YFxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBub2RlRGVmYXVsdExhYmVsOiB7XG4gIFt0eXBlIGluIFNjaGVtYVR5cGVdPzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xufSA9IHtcbiAgW1NjaGVtYVR5cGUuSW1wYWN0QXNzZXNzbWVudF06ICh7IG5hbWUsIGNvdW50cnksIGVuZERhdGUsIHByb2R1Y3QgfTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpID0+XG4gICAgbmFtZVxuICAgICAgPyBuYW1lLnJlcGxhY2UoYCR7cHJvZHVjdD8udGVybT8ubmFtZX0sIGAsICcnKVxuICAgICAgOiBbcHJvZHVjdD8udGVybT8ubmFtZSwgY291bnRyeT8ubmFtZSwgZW5kRGF0ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyksXG4gIFtTY2hlbWFUeXBlLlNpdGVdOiAoeyBuYW1lLCBkZXNjcmlwdGlvbiB9OiBJU2l0ZUpTT05MRCkgPT4gbmFtZSB8fCBkZXNjcmlwdGlvbiEsXG4gIFtTY2hlbWFUeXBlLlRyYW5zZm9ybWF0aW9uXTogKHsgbmFtZSwgdGVybSB9OiBhbnkpID0+IG5hbWUgfHwgdGVybT8ubmFtZVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMYWJlbCA9IChub2RlPzogYW55KSA9PlxuICBub2RlXG4gICAgPyAobm9kZVsnQHR5cGUnXSBpbiBub2RlRGVmYXVsdExhYmVsID8gbm9kZURlZmF1bHRMYWJlbFtub2RlWydAdHlwZSddXShub2RlKSA6IG5vZGUubmFtZSkgfHwgbm9kZVsnQGlkJ10gfHwgbm9kZS5pZFxuICAgIDogJyc7XG5cbmV4cG9ydCBjb25zdCByZXBlYXQgPSAodGltZXMgPSAwKSA9PiBBcnJheS5mcm9tKEFycmF5KHRpbWVzKSwgTWF0aC5yYW5kb20pO1xuXG5leHBvcnQgY29uc3QgY29weU9iamVjdCA9IChkYXRhPzogYW55KSA9PiAoZGF0YSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIDogbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKGE6IGFueSwgYjogYW55KSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYik7XG5cbmV4cG9ydCBjb25zdCB0eXBlYWhlYWRGb2N1cyA9IChlOiBFdmVudCkgPT4ge1xuICBpZiAoZS5idWJibGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4gZS50YXJnZXQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKSwgMCk7XG59O1xuXG5leHBvcnQgZW51bSBSZXBvc2l0b3J5IHtcbiAgZ2xvc3NhcnkgPSAnaGVzdGlhLWdsb3NzYXJ5JyxcbiAgbW9kZWxzID0gJ2hlc3RpYS1lbmdpbmUtbW9kZWxzJyxcbiAgb3JjaGVzdHJhdG9yID0gJ2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yJyxcbiAgYWdncmVnYXRpb24gPSAnaGVzdGlhLWFnZ3JlZ2F0aW9uLWVuZ2luZScsXG4gIGNvbW11bml0eSA9ICdoZXN0aWEtY29tbXVuaXR5LWVkaXRpb24nLFxuICBwb29yZW5lbWVjayA9ICdoZXN0aWEtY29udmVydC1wb29yZS1uZW1lY2VrJyxcbiAgZnJvbnRlbmQgPSAnaGVzdGlhLWZyb250LWVuZCcsXG4gIHNjaGVtYSA9ICdoZXN0aWEtc2NoZW1hJ1xufVxuXG5leHBvcnQgZW51bSBUZW1wbGF0ZSB7XG4gIGJ1ZyA9ICdidWcnLFxuICBmZWF0dXJlID0gJ2ZlYXR1cmUnXG59XG5cbmV4cG9ydCBjb25zdCByZXBvcnRJc3N1ZVVybCA9IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5LCB0ZW1wbGF0ZT86IFRlbXBsYXRlKSA9PlxuICBgJHtnaXRIb21lfS8ke3JlcG9zaXRvcnl9Ly0vaXNzdWVzL25ldyR7dGVtcGxhdGUgPyBgP2lzc3VhYmxlX3RlbXBsYXRlPSR7dGVtcGxhdGV9YCA6ICcnfWA7XG5cbmV4cG9ydCBjb25zdCBjaGFuZ2Vsb2dVcmwgPSAocmVwb3NpdG9yeTogUmVwb3NpdG9yeSkgPT4gYCR7Z2l0SG9tZX0vJHtyZXBvc2l0b3J5fS8tL2Jsb2IvbWFzdGVyL0NIQU5HRUxPRy5tZGA7XG5cbmV4cG9ydCBjb25zdCBjb250YWN0VXNFbWFpbCA9ICdjb21tdW5pdHlAaGVzdGlhLmVhcnRoJztcbmV4cG9ydCBjb25zdCBleHRlcm5hbExpbmsgPSAoaHJlZjogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IGA8YSBocmVmPVwiJHtocmVmfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGV4dH08L2E+YDtcbmV4cG9ydCBjb25zdCBnbG9zc2FyeUxpbmsgPSAodGV4dDogc3RyaW5nKSA9PiBleHRlcm5hbExpbmsoZ2xvc3NhcnlCYXNlVXJsKCksIHRleHQpO1xuZXhwb3J0IGNvbnN0IG5vZGVMaW5rID0gKHsgJ0B0eXBlJzogdHlwZSwgJ0BpZCc6IGlkLCBuYW1lIH06IHsgJ0B0eXBlJzogc3RyaW5nOyAnQGlkJzogc3RyaW5nOyBuYW1lPzogc3RyaW5nIH0pID0+XG4gIHR5cGUgJiYgaWQgPyBgPGEgaHJlZj1cIi8ke3R5cGUudG9Mb3dlckNhc2UoKX0vJHtpZH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke25hbWUgfHwgaWR9PC9hPmAgOiBudWxsO1xuZXhwb3J0IGNvbnN0IHNjaGVtYUxpbmsgPSAodHlwZTogc3RyaW5nLCB0aXRsZSA9IHR5cGUpID0+XG4gIGA8YSBocmVmPVwiJHtzY2hlbWFCYXNlVXJsKCl9LyR7dHlwZX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RpdGxlfTwvYT5gO1xuZXhwb3J0IGNvbnN0IGNvZGUgPSAodGV4dDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbikgPT4gYDxjb2RlPiR7dGV4dH08L2NvZGU+YDtcbmV4cG9ydCBjb25zdCBjb250YWN0VXNMaW5rID0gKHRleHQgPSAnY29udGFjdCB1cycpID0+IGA8YSBocmVmPVwibWFpbHRvOiR7Y29udGFjdFVzRW1haWx9XCI+JHt0ZXh0fTwvYT5gO1xuZXhwb3J0IGNvbnN0IHJlcG9ydElzc3VlTGluayA9IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5LCB0ZW1wbGF0ZT86IFRlbXBsYXRlLCB0ZXh0ID0gJ2hlcmUnKSA9PlxuICBleHRlcm5hbExpbmsocmVwb3J0SXNzdWVVcmwocmVwb3NpdG9yeSwgdGVtcGxhdGUpLCB0ZXh0KTtcblxuaW50ZXJmYWNlIElHaXRsYWJSYXdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGZpbGUgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSwgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBiYXNlIHVybCBvZiB0aGUgSEVTVElBIEFQSS5cbiAgICovXG4gIGFwaVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBicmFuY2gsIHVzaW5nIHRoZSBkZWZhdWx0IGJyYW5jaCBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBicmFuY2g/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXJsIHRvIGZldGNoIHJhdyBjb250ZW50IGZyb20gR2l0bGFiLCBieXBhc3NpbmcgQ09SUyBpc3N1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnaXRsYWJSYXdVcmwgPSAoeyByZXBvc2l0b3J5LCBwYXRoLCBhcGlVcmwsIGJyYW5jaCB9OiBJR2l0bGFiUmF3UGFyYW1zKSA9PlxuICBgJHthcGlVcmwgfHwgYmFzZUFwaVVybCgpfS9naXRsYWIvcmF3P3JlcG9zaXRvcnk9JHtyZXBvc2l0b3J5fSZicmFuY2g9JHtcbiAgICBicmFuY2ggfHwgZ2l0QnJhbmNoKClcbiAgfSZwYXRoPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfWA7XG5cbmNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQiddO1xuXG5leHBvcnQgY29uc3QgYnl0ZXNTaXplID0gKGJ5dGVzOiBudW1iZXIpID0+IHtcbiAgY29uc3QgaSA9IGlzTmFOKGJ5dGVzKSB8fCBieXRlcyA9PT0gMCA/IDAgOiBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgcmV0dXJuIGAke2lzTmFOKGJ5dGVzKSA/IDAgOiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KDEwMjQsIGkpKS50b0ZpeGVkKDIpKX0gJHtzaXplc1tpXX1gO1xufTtcbiJdfQ==
@@ -9,7 +9,7 @@ import { NodeType, NonBlankNodesKey } from '@hestia-earth/schema';
9
9
  import { keyToLabel } from '@hestia-earth/utils';
10
10
  import { HeNodeStoreService } from '../../node/node-store.service';
11
11
  import { isValidKey } from '../../common/node-utils';
12
- import { baseUrl, defaultLabel } from '../../common/utils';
12
+ import { defaultLabel, schemaBaseUrl } from '../../common/utils';
13
13
  import { logsKey } from '../cycles.model';
14
14
  import { NodeCsvExportConfirmComponent } from '../../node/node-csv-export-confirm/node-csv-export-confirm.component';
15
15
  import { NodeLogsModelsComponent } from '../../node/node-logs-models/node-logs-models.component';
@@ -36,7 +36,7 @@ export class CyclesCompletenessComponent {
36
36
  this.nodeStoreService = inject(HeNodeStoreService);
37
37
  this.faDownload = faDownload;
38
38
  this.dataState = input(DataState.original);
39
- this.baseUrl = baseUrl();
39
+ this.schemaBaseUrl = schemaBaseUrl();
40
40
  this.defaultLabel = defaultLabel;
41
41
  this.keyToLabel = keyToLabel;
42
42
  this.getCompleteness = getCompleteness;
@@ -85,7 +85,7 @@ export class CyclesCompletenessComponent {
85
85
  this.selectedIndex.set(+value);
86
86
  }
87
87
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CyclesCompletenessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", 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\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]=\"baseUrl + '/schema/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", styles: [""], dependencies: [{ kind: "directive", type: 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: 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"] }, { kind: "component", type: NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["nodesChange", "filenameChange", "headerKeysChange", "extensionChange", "isUploadChange", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", 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\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", styles: [""], dependencies: [{ kind: "directive", type: 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: 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"] }, { kind: "component", type: NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["nodesChange", "filenameChange", "headerKeysChange", "extensionChange", "isUploadChange", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
89
  }
90
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
91
91
  type: Component,
@@ -99,6 +99,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
99
99
  FormsModule,
100
100
  NodeLogsModelsComponent,
101
101
  NodeCsvExportConfirmComponent
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]=\"baseUrl + '/schema/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" }]
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" }]
103
103
  }], ctorParameters: () => [] });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFrQixZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFnQixRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFF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QkFDVixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLDZCQUE2Qjt3QkFDN0IsV0FBVzt3QkFDWCx1QkFBdUI7d0JBQ3ZCLDZCQUE2QjtxQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiwgZmFDYWxjdWxhdG9yLCBmYURvd25sb2FkLCBmYUxpc3QgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgTmdiVG9vbHRpcCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElDeWNsZUpTT05MRCwgTm9kZVR5cGUsIE5vbkJsYW5rTm9kZXNLZXkgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBrZXlUb0xhYmVsIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzVmFsaWRLZXkgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsLCBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgbG9nc0tleSB9IGZyb20gJy4uL2N5Y2xlcy5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ibGFuay1ub2RlLXN0YXRlL2JsYW5rLW5vZGUtc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWxpbmsvbm9kZS1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ1RhYmxlIHZpZXcnLFxuICBsb2dzID0gJ1JlY2FsY3VsYXRpb25zIGxvZ3MnXG59XG5cbmNvbnN0IHZpZXdJY29uOiB7XG4gIFt2aWV3IGluIFZpZXddOiBJY29uRGVmaW5pdGlvbjtcbn0gPSB7XG4gIFtWaWV3LmxvZ3NdOiBmYUNhbGN1bGF0b3IsXG4gIFtWaWV3LnRhYmxlXTogZmFMaXN0XG59O1xuXG5jb25zdCBoZWFkZXJLZXlzID0gWydjeWNsZS5pZCcsICdjeWNsZS5AaWQnLCAnY3ljbGUuY29tcGxldGVuZXNzLiddO1xuXG4vLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggc2NoZW1hIHZlcnNpb24gPCAxNFxuY29uc3QgZ2V0Q29tcGxldGVuZXNzID0gKGN5Y2xlOiBhbnkpID0+IGN5Y2xlPy5jb21wbGV0ZW5lc3MgfHwgY3ljbGU/LmRhdGFDb21wbGV0ZW5lc3MgfHwge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1jb21wbGV0ZW5lc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ2JUb29sdGlwLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgTm9kZUxpbmtDb21wb25lbnQsXG4gICAgQmxhbmtOb2RlU3RhdGVDb21wb25lbnQsXG4gICAgQmxhbmtOb2RlU3RhdGVOb3RpY2VDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQsXG4gICAgTm9kZUNzdkV4cG9ydENvbmZpcm1Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNDb21wbGV0ZW5lc3NDb21wb25lbnQge1xuICBwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU3RvcmVTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgcHJvdGVjdGVkIGRhdGFTdGF0ZSA9IGlucHV0KERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHByb3RlY3RlZCBkZWZhdWx0TGFiZWwgPSBkZWZhdWx0TGFiZWw7XG4gIHByb3RlY3RlZCBrZXlUb0xhYmVsID0ga2V5VG9MYWJlbDtcbiAgcHJvdGVjdGVkIGdldENvbXBsZXRlbmVzcyA9IGdldENvbXBsZXRlbmVzcztcbiAgcHJvdGVjdGVkIGhlYWRlcktleXMgPSBoZWFkZXJLZXlzO1xuICBwcm90ZWN0ZWQgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBub2RlS2V5ID0gTm9uQmxhbmtOb2Rlc0tleS5jb21wbGV0ZW5lc3M7XG5cbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5sb2dzXTogIXRoaXMuaXNPcmlnaW5hbCgpLFxuICAgICAgICBbVmlldy50YWJsZV06IHRydWVcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKFZpZXcpLmZpbHRlcih2aWV3ID0+IHRoaXMuc2hvd1ZpZXcoKVt2aWV3XSkgPz8gW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3ID0gc2lnbmFsKFZpZXcudGFibGUpO1xuXG4gIHByaXZhdGUgb3JpZ2luYWxDeWNsZXMgPSB0b1NpZ25hbChcbiAgICB0aGlzLm5vZGVTdG9yZVNlcnZpY2UuZmluZEJ5U3RhdGUkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUsIERhdGFTdGF0ZS5vcmlnaW5hbClcbiAgKTtcbiAgcHJpdmF0ZSBfYWxsQ3ljbGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUpKTtcbiAgcHJvdGVjdGVkIGN5Y2xlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2FsbEN5Y2xlcygpPy5tYXAoZGF0YSA9PiBkYXRhW3RoaXMuZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLm9naXJpbmFsU2VsZWN0ZWRDeWNsZSgpKSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWROb2RlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkQ3ljbGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEN5Y2xlKCksXG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuQ3ljbGUsXG4gICAgICAgICAgZGF0YVN0YXRlOiBEYXRhU3RhdGUucmVjYWxjdWxhdGVkXG4gICAgICAgIH1cbiAgICAgIDogbnVsbFxuICApO1xuXG4gIHByb3RlY3RlZCBoYXNEYXRhID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5sZW5ndGgpO1xuICBwcm90ZWN0ZWQgaXNPcmlnaW5hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YVN0YXRlKCkgPT09IERhdGFTdGF0ZS5vcmlnaW5hbCk7XG5cbiAgcHJvdGVjdGVkIGNvbXBsZXRlbmVzc0tleXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIE9iamVjdC5rZXlzKGdldENvbXBsZXRlbmVzcyh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpLmZpbHRlcihpc1ZhbGlkS2V5KS5zb3J0KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZCB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIG9yaWdpbmFsIHZpZXdcbiAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldygpID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUN5Y2xlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEluZGV4KHsgdGFyZ2V0OiB7IHZhbHVlIH0gfSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQoK3ZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtYWxpZ24taXRlbXMtY2VudGVyIGlzLTIgbS0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICBAaWYgKHNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cInNob3dEb3dubG9hZFwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYURvd25sb2FkXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmICh2aWV3cygpPy5sZW5ndGggPiAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICAgIEBmb3IgKHZpZXcgb2Ygdmlld3MoKTsgdHJhY2sgdmlldykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldygpID09PSB2aWV3XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldy5zZXQodmlldylcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwidmlld0ljb25bdmlld11cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tbW9iaWxlXCI+e3sgdmlldyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbkBzd2l0Y2ggKHNlbGVjdGVkVmlldygpKSB7XG4gIEBjYXNlIChWaWV3LnRhYmxlKSB7XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiPlxuICAgICAgQGlmIChoYXNEYXRhKCkpIHtcbiAgICAgICAgPGhlLWRhdGEtdGFibGUgY2xhc3M9XCJtYi0xIGlzLXNtYWxsXCIgW3NtYWxsXT1cInRydWVcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbXBsZXRlbmVzcyBvZiBjb21wbGV0ZW5lc3NLZXlzKCk7IHRyYWNrIGNvbXBsZXRlbmVzcykge1xuICAgICAgICAgICAgICAgICAgPHRoIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYXNlVXJsICsgJy9zY2hlbWEvQ29tcGxldGVuZXNzIycgKyBjb21wbGV0ZW5lc3NcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlUb0xhYmVsKGNvbXBsZXRlbmVzcykgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICBAZm9yIChjeWNsZSBvZiBjeWNsZXMoKTsgdHJhY2sgdHJhY2tCeUlkKGksIGN5Y2xlKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoY3ljbGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiY3ljbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKGN5Y2xlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIGNvbXBsZXRlbmVzc0tleXMoKTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldENvbXBsZXRlbmVzcyhjeWNsZSlba2V5XSA/ICdDb21wbGV0ZScgOiAnSW5jb21wbGV0ZScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cImdldENvbXBsZXRlbmVzcyhjeWNsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2hlLWRhdGEtdGFibGU+XG4gICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZSBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2tcIj5cbiAgICAgICAgICA8c3Bhbj5ObyBjb21wbGV0ZW5lc3MgZGF0YTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGNhc2UgKFZpZXcubG9ncykge1xuICAgIEBpZiAoY3ljbGVzKCkubGVuZ3RoID4gMSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGN5Y2xlcygpOyB0cmFjayB2YWx1ZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpXCI+e3sgaSArIDEgfX0uIHt7IGRlZmF1bHRMYWJlbCh2YWx1ZSkgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgIDxoZS1ub2RlLWxvZ3MtbW9kZWxzXG4gICAgICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICAgICAgW25vZGVLZXldPVwibm9kZUtleVwiXG4gICAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgICAgW29yaWdpbmFsVmFsdWVzXT1cInNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMoKVwiXG4gICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cbiAgICB9XG4gIH1cbn1cblxuQGlmIChzaG93RG93bmxvYWQpIHtcbiAgPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtXG4gICAgW25vZGVzXT1cImN5Y2xlcygpXCJcbiAgICBmaWxlbmFtZT1cImNvbXBsZXRlbmVzcy5jc3ZcIlxuICAgIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gICAgW2hlYWRlcktleXNdPVwiaGVhZGVyS2V5c1wiXG4gICAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiPjwvaGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0+XG59XG4iXX0=
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=