ngx-bimplus-components 0.0.154 → 0.0.155

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.
@@ -9,11 +9,14 @@ import { BimplusObjectStructureComponent } from '../../bimplus-object-structure/
9
9
  import { BimplusObjectComplexPropertiesComponent } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.component';
10
10
  import { ObjectStructureNodeBuilder } from '../../bimplus-object-structure/bimplus-object-structure.interface';
11
11
  import { ComplexPropertiesNodeBuilder } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.interface';
12
+ import { FormatValuePipe } from '../../../pipes/format-value.pipe';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "@ngx-translate/core";
15
+ import * as i2 from "../../../pipes/format-value.pipe";
14
16
  export class CriteriaSelectObjectPropertiesComponent extends BimplusLocalizedWidgetComponent {
15
- constructor(translateService) {
17
+ constructor(translateService, formatValuePipe) {
16
18
  super(translateService);
19
+ this.formatValuePipe = formatValuePipe;
17
20
  this.api = null;
18
21
  this.revision = undefined;
19
22
  this._currentObjectId$ = new BehaviorSubject("");
@@ -74,25 +77,51 @@ export class CriteriaSelectObjectPropertiesComponent extends BimplusLocalizedWid
74
77
  attrib.checked = attrib.valueChecked;
75
78
  this.handleFilterCriteriumAttributeStateChange(attrib);
76
79
  }
80
+ _defineFilterString(attrib) {
81
+ let substring = `[I][${attrib.id}].Value`;
82
+ if (attrib.valueChecked) {
83
+ substring += `[F][0]=${this.formatValuePipe.transform(attrib.value)}`;
84
+ }
85
+ return substring;
86
+ }
87
+ _addFilterCriteria(attrib) {
88
+ // add a new entry
89
+ this.filterCriteria.push({
90
+ name: attrib.name,
91
+ value: attrib.valueChecked ? attrib.value : undefined,
92
+ id: attrib.id,
93
+ subString: this._defineFilterString(attrib),
94
+ });
95
+ }
96
+ _updateFilterCriteria(attrib, index) {
97
+ // Update the existing entry
98
+ this.filterCriteria[index] = {
99
+ ...this.filterCriteria[index],
100
+ name: attrib.name,
101
+ value: attrib.valueChecked ? attrib.value : undefined,
102
+ subString: this._defineFilterString(attrib),
103
+ };
104
+ }
77
105
  handleFilterCriteriumAttributeStateChange(attrib) {
78
106
  const index = this.filterCriteria.findIndex(x => x.id === attrib.id);
107
+ // FILTER CRITERIA ALREADY EXISTS
79
108
  if (index >= 0) {
80
- if (attrib.checked === false || attrib.valueChecked === false) {
109
+ if (attrib.checked === false && attrib.valueChecked === false) {
110
+ // REMOVE
111
+ // filterCriteria no longer used (left / right checkboxes not checked)
81
112
  this.filterCriteria.splice(index, 1);
82
- this.filterCriteriaChange.emit(this.filterCriteria);
83
113
  }
114
+ else {
115
+ // UPDATE
116
+ // filterCriteria still used, but value should be used (right checkbox checked)
117
+ this._updateFilterCriteria(attrib, index);
118
+ }
119
+ this.filterCriteriaChange.emit(this.filterCriteria);
84
120
  }
121
+ // FILTER CRITERIA DOES NOT EXIST and MAX CRITERIA NOT REACHED
85
122
  else if (this.filterCriteria.length < MaxFilterCriteria) {
86
- let substring = `[I][${attrib.id}].Value`;
87
- if (attrib.valueChecked) {
88
- substring += `[F][0]=${attrib.value}`;
89
- }
90
- this.filterCriteria.push({
91
- name: attrib.name,
92
- value: attrib.valueChecked ? attrib.value : undefined,
93
- id: attrib.id,
94
- subString: substring
95
- });
123
+ // ADD
124
+ this._addFilterCriteria(attrib);
96
125
  this.filterCriteriaChange.emit(this.filterCriteria);
97
126
  }
98
127
  }
@@ -212,13 +241,13 @@ export class CriteriaSelectObjectPropertiesComponent extends BimplusLocalizedWid
212
241
  }
213
242
  });
214
243
  }
215
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CriteriaSelectObjectPropertiesComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
216
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: CriteriaSelectObjectPropertiesComponent, isStandalone: true, selector: "lib-criteria-select-object-properties", inputs: { api: "api", rootObjectId: "rootObjectId", revision: "revision", filterCriteria: "filterCriteria" }, outputs: { filterCriteriaChange: "filterCriteriaChange" }, usesInheritance: true, ngImport: i0, template: "<!-- Object structure-->\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object structure\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n @if(objectStructure){\r\n <lib-bimplus-object-structure\r\n [objectStructure]=\"objectStructure\"\r\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-structure> \r\n }\r\n</lib-expansion-panel>\r\n<!-- End Object structure-->\r\n\r\n<!-- Complex properties-->\r\n@if(complexProperties){ \r\n <lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object multiproperties tree\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n <lib-bimplus-object-complex-properties\r\n [complexProperties]=\"complexProperties\"\r\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-complex-properties> \r\n </lib-expansion-panel>\r\n}\r\n<!-- End Complex properties-->\r\n\r\n<!-- Properties list-->\r\n@if(objectAttributeGroups.length > 0){ \r\n <lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object properties\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n\r\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\r\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-group-header\"> {{attribGroup.name}}</span>\r\n </lib-expansion-panel-header>\r\n <div>\r\n @for (attrib of attribGroup.attributes; track attrib) {\r\n <div class=\"criteria-select-object-properties-attrib-row\">\r\n <div class=\"criteria-select-object-properties-attrib-row-content\">\r\n <div class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\">\r\n <label class=\"criteria-select-object-properties-attrib-row-cell-label\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.checked\"\r\n [disabled]=\"filterCriteria.length === MaxFilterCriteria && !attrib.checked\"\r\n (click)=\"toggleAttribute(attrib)\"\r\n (keypress)=\"toggleAttribute(attrib)\"\r\n >\r\n <span></span>\r\n </label>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">{{attrib.name}}</div>\r\n </div>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\">\r\n <label class=\"criteria-select-object-properties-attrib-row-cell-label\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.valueChecked\"\r\n [disabled]=\"filterCriteria.length === MaxFilterCriteria && !attrib.checked\"\r\n (click)=\"toggleAttributeValue(attrib)\"\r\n (keypress)=\"toggleAttributeValue(attrib)\"\r\n >\r\n <span></span>\r\n </label>\r\n @if(attrib.value){\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">{{attrib.value}}</div>\r\n }@else {\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">...</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </lib-expansion-panel> \r\n }\r\n </lib-expansion-panel>\r\n}\r\n<!-- End Properties list-->", styles: [".criteria-select-object-properties-header{font-weight:700;text-transform:uppercase;font-size:1.4rem}.criteria-select-object-properties-group-header{line-height:2.4rem}.criteria-select-object-properties-attrib-row{display:flex;width:calc(100% - 2rem);flex-direction:row;flex-wrap:nowrap;overflow:hidden;padding-left:2rem}.criteria-select-object-properties-attrib-row:hover{background-color:var(--object-navigator-criteria-select-object-properties-attribute-row-background-color-hovered)}.criteria-select-object-properties-attrib-row-content{display:inline-flex;width:100%}.criteria-select-object-properties-attrib-row-cell{flex-basis:50%;display:flex;overflow:hidden;text-overflow:ellipsis}.criteria-select-object-properties-attrib-row-cell-label{display:inline-flex}.criteria-select-object-properties-attrib-row-cell-text{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.criteria-select-checkbox input{display:none}.criteria-select-checkbox input:checked+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%230066CC\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked+span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23005BB6\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23D3D3D3\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%23D3D3D3\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A');width:1.8rem;height:1.8rem;margin-top:.1rem;vertical-align:middle;border:0;background-color:transparent;background-position:-.3rem center;background-size:100% 100%;background-repeat:no-repeat}.criteria-select-checkbox span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"%23F5F5F5\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A')}lib-bimplus-object-structure{--flat-tree-container-background-color-enabled: transparent}\n"], dependencies: [{ kind: "component", type: ExpansionPanelHeaderComponent, selector: "lib-expansion-panel-header" }, { kind: "component", type: ExpansionPanelComponent, selector: "lib-expansion-panel", inputs: ["expanded"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: BimplusObjectStructureComponent, selector: "lib-bimplus-object-structure", inputs: ["objectStructure"], outputs: ["nodeSelected"] }, { kind: "component", type: BimplusObjectComplexPropertiesComponent, selector: "lib-bimplus-object-complex-properties", inputs: ["complexProperties"], outputs: ["nodeSelected"] }] }); }
244
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CriteriaSelectObjectPropertiesComponent, deps: [{ token: i1.TranslateService }, { token: i2.FormatValuePipe }], target: i0.ɵɵFactoryTarget.Component }); }
245
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: CriteriaSelectObjectPropertiesComponent, isStandalone: true, selector: "lib-criteria-select-object-properties", inputs: { api: "api", rootObjectId: "rootObjectId", revision: "revision", filterCriteria: "filterCriteria" }, outputs: { filterCriteriaChange: "filterCriteriaChange" }, providers: [FormatValuePipe], usesInheritance: true, ngImport: i0, template: "<!-- Object structure-->\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object structure\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n @if(objectStructure){\r\n <lib-bimplus-object-structure\r\n [objectStructure]=\"objectStructure\"\r\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-structure>\r\n }\r\n</lib-expansion-panel>\r\n<!-- End Object structure-->\r\n\r\n<!-- Complex properties-->\r\n@if(complexProperties){\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object multiproperties tree\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n <lib-bimplus-object-complex-properties\r\n [complexProperties]=\"complexProperties\"\r\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-complex-properties>\r\n</lib-expansion-panel>\r\n}\r\n<!-- End Complex properties-->\r\n\r\n<!-- Properties list-->\r\n@if(objectAttributeGroups.length > 0){\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object properties\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n\r\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\r\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-group-header\">\r\n {{ attribGroup.name }}\r\n </span>\r\n </lib-expansion-panel-header>\r\n <div>\r\n @for (attrib of attribGroup.attributes; track attrib) {\r\n <div class=\"criteria-select-object-properties-attrib-row\">\r\n <div class=\"criteria-select-object-properties-attrib-row-content\">\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\r\n >\r\n <label\r\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.checked\"\r\n [disabled]=\"\r\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\r\n \"\r\n (click)=\"toggleAttribute(attrib)\"\r\n (keypress)=\"toggleAttribute(attrib)\"\r\n />\r\n <span></span>\r\n </label>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\r\n {{ attrib.name }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\r\n >\r\n <label\r\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.valueChecked\"\r\n [disabled]=\"\r\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\r\n \"\r\n (click)=\"toggleAttributeValue(attrib)\"\r\n (keypress)=\"toggleAttributeValue(attrib)\"\r\n />\r\n <span></span>\r\n </label>\r\n @if(attrib.value === null || attrib.value === undefined){\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\r\n title=\"{{ '_Not_defined' | translate }}\"\r\n >\r\n ...\r\n </div>\r\n }@else if(attrib.value === \"\"){\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\r\n title=\"{{ '_Empty_value' | translate }}\"\r\n >\r\n ''\r\n </div>\r\n }@else {\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\r\n {{ attrib.value }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </lib-expansion-panel>\r\n }\r\n</lib-expansion-panel>\r\n}\r\n<!-- End Properties list-->\r\n", styles: [".criteria-select-object-properties-header{font-weight:700;text-transform:uppercase;font-size:1.4rem}.criteria-select-object-properties-group-header{line-height:2.4rem}.criteria-select-object-properties-attrib-row{display:flex;width:calc(100% - 2rem);flex-direction:row;flex-wrap:nowrap;overflow:hidden;padding-left:2rem}.criteria-select-object-properties-attrib-row:hover{background-color:var(--object-navigator-criteria-select-object-properties-attribute-row-background-color-hovered)}.criteria-select-object-properties-attrib-row-content{display:inline-flex;width:100%}.criteria-select-object-properties-attrib-row-cell{flex-basis:50%;display:flex;overflow:hidden;text-overflow:ellipsis}.criteria-select-object-properties-attrib-row-cell-label{display:inline-flex}.criteria-select-object-properties-attrib-row-cell-text{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.criteria-select-checkbox input{display:none}.criteria-select-checkbox input:checked+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%230066CC\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked+span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23005BB6\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23D3D3D3\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%23D3D3D3\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A');width:1.8rem;height:1.8rem;margin-top:.1rem;vertical-align:middle;border:0;background-color:transparent;background-position:-.3rem center;background-size:100% 100%;background-repeat:no-repeat}.criteria-select-checkbox span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"%23F5F5F5\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A')}lib-bimplus-object-structure{--flat-tree-container-background-color-enabled: transparent}\n"], dependencies: [{ kind: "component", type: ExpansionPanelHeaderComponent, selector: "lib-expansion-panel-header" }, { kind: "component", type: ExpansionPanelComponent, selector: "lib-expansion-panel", inputs: ["expanded"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: BimplusObjectStructureComponent, selector: "lib-bimplus-object-structure", inputs: ["objectStructure"], outputs: ["nodeSelected"] }, { kind: "component", type: BimplusObjectComplexPropertiesComponent, selector: "lib-bimplus-object-complex-properties", inputs: ["complexProperties"], outputs: ["nodeSelected"] }] }); }
217
246
  }
218
247
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CriteriaSelectObjectPropertiesComponent, decorators: [{
219
248
  type: Component,
220
- args: [{ selector: 'lib-criteria-select-object-properties', standalone: true, imports: [ExpansionPanelHeaderComponent, ExpansionPanelComponent, TranslateModule, BimplusObjectStructureComponent, BimplusObjectComplexPropertiesComponent], template: "<!-- Object structure-->\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object structure\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n @if(objectStructure){\r\n <lib-bimplus-object-structure\r\n [objectStructure]=\"objectStructure\"\r\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-structure> \r\n }\r\n</lib-expansion-panel>\r\n<!-- End Object structure-->\r\n\r\n<!-- Complex properties-->\r\n@if(complexProperties){ \r\n <lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object multiproperties tree\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n <lib-bimplus-object-complex-properties\r\n [complexProperties]=\"complexProperties\"\r\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-complex-properties> \r\n </lib-expansion-panel>\r\n}\r\n<!-- End Complex properties-->\r\n\r\n<!-- Properties list-->\r\n@if(objectAttributeGroups.length > 0){ \r\n <lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\"> {{\"_Object properties\" | translate}}</span>\r\n </lib-expansion-panel-header>\r\n\r\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\r\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-group-header\"> {{attribGroup.name}}</span>\r\n </lib-expansion-panel-header>\r\n <div>\r\n @for (attrib of attribGroup.attributes; track attrib) {\r\n <div class=\"criteria-select-object-properties-attrib-row\">\r\n <div class=\"criteria-select-object-properties-attrib-row-content\">\r\n <div class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\">\r\n <label class=\"criteria-select-object-properties-attrib-row-cell-label\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.checked\"\r\n [disabled]=\"filterCriteria.length === MaxFilterCriteria && !attrib.checked\"\r\n (click)=\"toggleAttribute(attrib)\"\r\n (keypress)=\"toggleAttribute(attrib)\"\r\n >\r\n <span></span>\r\n </label>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">{{attrib.name}}</div>\r\n </div>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\">\r\n <label class=\"criteria-select-object-properties-attrib-row-cell-label\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.valueChecked\"\r\n [disabled]=\"filterCriteria.length === MaxFilterCriteria && !attrib.checked\"\r\n (click)=\"toggleAttributeValue(attrib)\"\r\n (keypress)=\"toggleAttributeValue(attrib)\"\r\n >\r\n <span></span>\r\n </label>\r\n @if(attrib.value){\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">{{attrib.value}}</div>\r\n }@else {\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">...</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </lib-expansion-panel> \r\n }\r\n </lib-expansion-panel>\r\n}\r\n<!-- End Properties list-->", styles: [".criteria-select-object-properties-header{font-weight:700;text-transform:uppercase;font-size:1.4rem}.criteria-select-object-properties-group-header{line-height:2.4rem}.criteria-select-object-properties-attrib-row{display:flex;width:calc(100% - 2rem);flex-direction:row;flex-wrap:nowrap;overflow:hidden;padding-left:2rem}.criteria-select-object-properties-attrib-row:hover{background-color:var(--object-navigator-criteria-select-object-properties-attribute-row-background-color-hovered)}.criteria-select-object-properties-attrib-row-content{display:inline-flex;width:100%}.criteria-select-object-properties-attrib-row-cell{flex-basis:50%;display:flex;overflow:hidden;text-overflow:ellipsis}.criteria-select-object-properties-attrib-row-cell-label{display:inline-flex}.criteria-select-object-properties-attrib-row-cell-text{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.criteria-select-checkbox input{display:none}.criteria-select-checkbox input:checked+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%230066CC\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked+span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23005BB6\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23D3D3D3\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%23D3D3D3\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A');width:1.8rem;height:1.8rem;margin-top:.1rem;vertical-align:middle;border:0;background-color:transparent;background-position:-.3rem center;background-size:100% 100%;background-repeat:no-repeat}.criteria-select-checkbox span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"%23F5F5F5\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A')}lib-bimplus-object-structure{--flat-tree-container-background-color-enabled: transparent}\n"] }]
221
- }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { api: [{
249
+ args: [{ selector: 'lib-criteria-select-object-properties', standalone: true, imports: [ExpansionPanelHeaderComponent, ExpansionPanelComponent, TranslateModule, BimplusObjectStructureComponent, BimplusObjectComplexPropertiesComponent], providers: [FormatValuePipe], template: "<!-- Object structure-->\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object structure\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n @if(objectStructure){\r\n <lib-bimplus-object-structure\r\n [objectStructure]=\"objectStructure\"\r\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-structure>\r\n }\r\n</lib-expansion-panel>\r\n<!-- End Object structure-->\r\n\r\n<!-- Complex properties-->\r\n@if(complexProperties){\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object multiproperties tree\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n <lib-bimplus-object-complex-properties\r\n [complexProperties]=\"complexProperties\"\r\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\r\n >\r\n </lib-bimplus-object-complex-properties>\r\n</lib-expansion-panel>\r\n}\r\n<!-- End Complex properties-->\r\n\r\n<!-- Properties list-->\r\n@if(objectAttributeGroups.length > 0){\r\n<lib-expansion-panel>\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-header\">\r\n {{ \"_Object properties\" | translate }}</span\r\n >\r\n </lib-expansion-panel-header>\r\n\r\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\r\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\r\n <lib-expansion-panel-header>\r\n <span class=\"criteria-select-object-properties-group-header\">\r\n {{ attribGroup.name }}\r\n </span>\r\n </lib-expansion-panel-header>\r\n <div>\r\n @for (attrib of attribGroup.attributes; track attrib) {\r\n <div class=\"criteria-select-object-properties-attrib-row\">\r\n <div class=\"criteria-select-object-properties-attrib-row-content\">\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\r\n >\r\n <label\r\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.checked\"\r\n [disabled]=\"\r\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\r\n \"\r\n (click)=\"toggleAttribute(attrib)\"\r\n (keypress)=\"toggleAttribute(attrib)\"\r\n />\r\n <span></span>\r\n </label>\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\r\n {{ attrib.name }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\r\n >\r\n <label\r\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"attrib.valueChecked\"\r\n [disabled]=\"\r\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\r\n \"\r\n (click)=\"toggleAttributeValue(attrib)\"\r\n (keypress)=\"toggleAttributeValue(attrib)\"\r\n />\r\n <span></span>\r\n </label>\r\n @if(attrib.value === null || attrib.value === undefined){\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\r\n title=\"{{ '_Not_defined' | translate }}\"\r\n >\r\n ...\r\n </div>\r\n }@else if(attrib.value === \"\"){\r\n <div\r\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\r\n title=\"{{ '_Empty_value' | translate }}\"\r\n >\r\n ''\r\n </div>\r\n }@else {\r\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\r\n {{ attrib.value }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </lib-expansion-panel>\r\n }\r\n</lib-expansion-panel>\r\n}\r\n<!-- End Properties list-->\r\n", styles: [".criteria-select-object-properties-header{font-weight:700;text-transform:uppercase;font-size:1.4rem}.criteria-select-object-properties-group-header{line-height:2.4rem}.criteria-select-object-properties-attrib-row{display:flex;width:calc(100% - 2rem);flex-direction:row;flex-wrap:nowrap;overflow:hidden;padding-left:2rem}.criteria-select-object-properties-attrib-row:hover{background-color:var(--object-navigator-criteria-select-object-properties-attribute-row-background-color-hovered)}.criteria-select-object-properties-attrib-row-content{display:inline-flex;width:100%}.criteria-select-object-properties-attrib-row-cell{flex-basis:50%;display:flex;overflow:hidden;text-overflow:ellipsis}.criteria-select-object-properties-attrib-row-cell-label{display:inline-flex}.criteria-select-object-properties-attrib-row-cell-text{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.criteria-select-checkbox input{display:none}.criteria-select-checkbox input:checked+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%230066CC\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked+span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23005BB6\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:checked:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3\" y=\"3\" width=\"12\" height=\"12\" fill=\"%23D3D3D3\"/>%0D%0A<path d=\"M13.0226 7.41421L11.6855 6L8.3428 9.5356L6.33707 7.41416L5 8.82837L8.34269 12.3639L13.0226 7.41421Z\" fill=\"white\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox input:disabled+span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%23D3D3D3\"/>%0D%0A</svg>%0D%0A')}.criteria-select-checkbox span{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"white\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A');width:1.8rem;height:1.8rem;margin-top:.1rem;vertical-align:middle;border:0;background-color:transparent;background-position:-.3rem center;background-size:100% 100%;background-repeat:no-repeat}.criteria-select-checkbox span:hover{background-image:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<rect x=\"3.5\" y=\"3.5\" width=\"11\" height=\"11\" fill=\"%23F5F5F5\" stroke=\"%238D8D8D\"/>%0D%0A</svg>%0D%0A')}lib-bimplus-object-structure{--flat-tree-container-background-color-enabled: transparent}\n"] }]
250
+ }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.FormatValuePipe }], propDecorators: { api: [{
222
251
  type: Input
223
252
  }], rootObjectId: [{
224
253
  type: Input
@@ -229,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
229
258
  }], filterCriteriaChange: [{
230
259
  type: Output
231
260
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMvY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMvY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM5RyxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDcEgsT0FBTyxFQUFFLHVDQUF1QyxFQUFF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QUEwQixDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7K0dBdFFVLHVDQUF1QzttR0FBdkMsdUNBQXVDLGlTQ3JCcEQseTNIQW9GMkIseTNHRG5FZCw2QkFBNkIsdUVBQUUsdUJBQXVCLHFGQUFFLGVBQWUsNEZBQUUsK0JBQStCLGlJQUFFLHVDQUF1Qzs7NEZBSWpKLHVDQUF1QztrQkFQbkQsU0FBUzsrQkFDRSx1Q0FBdUMsY0FDckMsSUFBSSxXQUNQLENBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxDQUFDO3FGQTZCN0osR0FBRztzQkFERixLQUFLO2dCQUlGLFlBQVk7c0JBRGYsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBY0YsY0FBYztzQkFEakIsS0FBSztnQkFNSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFdlYlNkayBmcm9tICdiaW1wbHVzLXdlYnNkayc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCaW1wbHVzTG9jYWxpemVkV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmltcGx1cy1sb2NhbGl6ZWQtd2lkZ2V0L2JpbXBsdXMtbG9jYWxpemVkLXdpZGdldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRXhwYW5zaW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9leHBhbnNpb24tcGFuZWwvZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5zaW9uLXBhbmVsLWhlYWRlci9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRlckNyaXRlcml1bSwgTWF4RmlsdGVyQ3JpdGVyaWEgfSBmcm9tICcuLi9iaW1wbHVzLW9iamVjdC1uYXZpZ2F0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQmltcGx1c09iamVjdFN0cnVjdHVyZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpbXBsdXMtb2JqZWN0LXN0cnVjdHVyZS9iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmltcGx1c09iamVjdENvbXBsZXhQcm9wZXJ0aWVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmltcGx1cy1vYmplY3QtY29tcGxleC1wcm9wZXJ0aWVzL2JpbXBsdXMtb2JqZWN0LWNvbXBsZXgtcHJvcGVydGllcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYmplY3RTdHJ1Y3R1cmVOb2RlLCBPYmplY3RTdHJ1Y3R1cmVOb2RlQnVpbGRlciB9IGZyb20gJy4uLy4uL2JpbXBsdXMtb2JqZWN0LXN0cnVjdHVyZS9iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmUuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29tcGxleFByb3BlcnRpZXNOb2RlLCBDb21wbGV4UHJvcGVydGllc05vZGVCdWlsZGVyIH0gZnJvbSAnLi4vLi4vYmltcGx1cy1vYmplY3QtY29tcGxleC1wcm9wZXJ0aWVzL2JpbXBsdXMtb2JqZWN0LWNvbXBsZXgtcHJvcGVydGllcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBPYmplY3RBdHRyaWJ1dGUsIE9iamVjdEF0dHJpYnV0ZUdyb3VwIH0gZnJvbSAnLi9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbIEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50LCBFeHBhbnNpb25QYW5lbENvbXBvbmVudCwgVHJhbnNsYXRlTW9kdWxlLCBCaW1wbHVzT2JqZWN0U3RydWN0dXJlQ29tcG9uZW50LCBCaW1wbHVzT2JqZWN0Q29tcGxleFByb3BlcnRpZXNDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMuY29tcG9uZW50Lmxlc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcml0ZXJpYVNlbGVjdE9iamVjdFByb3BlcnRpZXNDb21wb25lbnQgZXh0ZW5kcyBCaW1wbHVzTG9jYWxpemVkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IodHJhbnNsYXRlU2VydmljZTogIFRyYW5zbGF0ZVNlcnZpY2Upe1xyXG4gICAgc3VwZXIodHJhbnNsYXRlU2VydmljZSkgIFxyXG4gIH1cclxuICBcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9wZXJ0aWVzT2JqZWN0SWQkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChpZCkgPT4ge1xyXG4gICAgICAgIGlmKGlkKXtcclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZU9iamVjdFByb3BlcnRpZXMoaWQsIHRoaXMucmV2aXNpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9jdXJyZW50T2JqZWN0SWQkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChpZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRQcm9wZXJ0aWVzT2JqZWN0SWQkLm5leHQoaWQpO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbXBsZXhQcm9wZXJ0aWVzdHJ1Y3R1cmUoaWQsIHRoaXMucmV2aXNpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGFwaSA6IFdlYlNkay5BcGkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcm9vdE9iamVjdElkKGlkIDogc3RyaW5nKXtcclxuICAgIHRoaXMuX2N1cnJlbnRPYmplY3RJZCQubmV4dChpZCk7XHJcbiAgICB0aGlzLl9jcmVhdGVPYmplY3RTdHJ1Y3R1cmUoaWQsIHRoaXMucmV2aXNpb24pO1xyXG4gICAgXHJcbiAgICB0aGlzLl9yb290T2JqZWN0SWQgPSBpZDtcclxuICB9XHJcblxyXG4gIGdldCByb290T2JqZWN0SWQoKSA6IHN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLl9yb290T2JqZWN0SWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHJldmlzaW9uIDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIFxyXG4gIHByaXZhdGUgX2N1cnJlbnRPYmplY3RJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gKFwiXCIpO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50UHJvcGVydGllc09iamVjdElkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiAoXCJcIik7XHJcblxyXG4gIG9iamVjdEF0dHJpYnV0ZUdyb3VwcyA6IE9iamVjdEF0dHJpYnV0ZUdyb3VwW10gPSBbXTtcclxuXHJcbiAgTWF4RmlsdGVyQ3JpdGVyaWEgPSBNYXhGaWx0ZXJDcml0ZXJpYTsgLy8gRm9yIGV4cG9zdXJlIHRvIHRlbXBsYXRlXHJcblxyXG4gIHByaXZhdGUgX3Jvb3RPYmplY3RJZCA6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGZpbHRlckNyaXRlcmlhKGNyaXRlcmlhIDogRmlsdGVyQ3JpdGVyaXVtW10pe1xyXG4gICAgdGhpcy5fZmlsdGVyQ3JpdGVyaWEgPSBjcml0ZXJpYTtcclxuICAgIHRoaXMuX3N5bmNBdHRyaWJ1dGVTdGF0ZXNGcm9tQ3JpdGVyaWEoKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBmaWx0ZXJDcml0ZXJpYUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQ3JpdGVyaXVtW10+KCk7XHJcblxyXG4gIGdldCBmaWx0ZXJDcml0ZXJpYSgpe1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyQ3JpdGVyaWEgOiBGaWx0ZXJDcml0ZXJpdW1bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9vYmplY3RTdHJ1Y3R1cmUgOiBPYmplY3RTdHJ1Y3R1cmVOb2RlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICBnZXQgb2JqZWN0U3RydWN0dXJlKCk6IE9iamVjdFN0cnVjdHVyZU5vZGUgfCBudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdFN0cnVjdHVyZVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIF9jb21wbGV4UHJvcGVydGllcyA6IENvbXBsZXhQcm9wZXJ0aWVzTm9kZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgZ2V0IGNvbXBsZXhQcm9wZXJ0aWVzKCkgOiBDb21wbGV4UHJvcGVydGllc05vZGUgfCBudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBsZXhQcm9wZXJ0aWVzO1xyXG4gICB9XHJcblxyXG4gIHRvZ2dsZUF0dHJpYnV0ZShhdHRyaWIgOiBPYmplY3RBdHRyaWJ1dGUpe1xyXG4gICAgYXR0cmliLmNoZWNrZWQgPSAhYXR0cmliLmNoZWNrZWQ7XHJcbiAgICBpZihhdHRyaWIuY2hlY2tlZCA9PT0gZmFsc2Upe1xyXG4gICAgICBhdHRyaWIudmFsdWVDaGVja2VkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYW5kbGVGaWx0ZXJDcml0ZXJpdW1BdHRyaWJ1dGVTdGF0ZUNoYW5nZShhdHRyaWIpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQXR0cmlidXRlVmFsdWUoYXR0cmliIDogT2JqZWN0QXR0cmlidXRlKXtcclxuICAgIGF0dHJpYi52YWx1ZUNoZWNrZWQgPSAhYXR0cmliLnZhbHVlQ2hlY2tlZDtcclxuICAgIGF0dHJpYi5jaGVja2VkID0gYXR0cmliLnZhbHVlQ2hlY2tlZDtcclxuXHJcbiAgICB0aGlzLmhhbmRsZUZpbHRlckNyaXRlcml1bUF0dHJpYnV0ZVN0YXRlQ2hhbmdlKGF0dHJpYik7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWx0ZXJDcml0ZXJpdW1BdHRyaWJ1dGVTdGF0ZUNoYW5nZShhdHRyaWIgOiBPYmplY3RBdHRyaWJ1dGUpe1xyXG4gICAgXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyQ3JpdGVyaWEuZmluZEluZGV4KHg9PnguaWQgPT09IGF0dHJpYi5pZCk7XHJcbiAgICBpZihpbmRleD49MCl7XHJcbiAgICAgIGlmKGF0dHJpYi5jaGVja2VkID09PSBmYWxzZSB8fCBhdHRyaWIudmFsdWVDaGVja2VkID09PSBmYWxzZSl7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlckNyaXRlcmlhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmZpbHRlckNyaXRlcmlhLmxlbmd0aCA8IE1heEZpbHRlckNyaXRlcmlhKXtcclxuXHJcbiAgICAgICAgbGV0IHN1YnN0cmluZyA9IGBbSV1bJHthdHRyaWIuaWR9XS5WYWx1ZWA7XHJcblxyXG4gICAgICAgIGlmKGF0dHJpYi52YWx1ZUNoZWNrZWQpe1xyXG4gICAgICAgICAgc3Vic3RyaW5nICs9IGBbRl1bMF09JHthdHRyaWIudmFsdWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWEucHVzaCh7XHJcbiAgICAgICAgICBuYW1lIDogYXR0cmliLm5hbWUsXHJcbiAgICAgICAgICB2YWx1ZSA6IGF0dHJpYi52YWx1ZUNoZWNrZWQgPyBhdHRyaWIudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBpZCA6IGF0dHJpYi5pZCxcclxuICAgICAgICAgIHN1YlN0cmluZyA6IHN1YnN0cmluZ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJDcml0ZXJpYSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU9iamVjdFN0cnVjdHVyZU5vZGVTZWxlY3RlZChub2RlIDogT2JqZWN0U3RydWN0dXJlTm9kZSl7XHJcbiAgICB0aGlzLl9jdXJyZW50T2JqZWN0SWQkLm5leHQobm9kZS5pZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb21wbGV4UHJvcGVydHlOb2RlU2VsZWN0ZWQobm9kZSA6IENvbXBsZXhQcm9wZXJ0aWVzTm9kZSl7XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvcGVydGllc09iamVjdElkJC5uZXh0KG5vZGUuaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlT2JqZWN0UHJvcGVydGllcyhvYmplY3RJZCA6IHN0cmluZywgcmV2aXNpb24gOiBudW1iZXIgfCB1bmRlZmluZWQpe1xyXG4gICAgdGhpcy5fbG9hZE9iamVjdFByb3BlcnRpZXMob2JqZWN0SWQsIHJldmlzaW9uKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBcclxuICAgICAgICAvLyBwcm9wZXJ0aWVzIHJlc3BvbnNlIGlzIGJhZGx5IHN0cnVjdHVyZWQsIG5lYXJseSBpbXBvc3NpYmxlIHRvIGNyZWF0ZSBjbGFzcyBzdHJ1Y3R1cmUgZnJvbSBpdC4gVGhlcmVmb3JlIHVzaW5nIHNob3J0Y3V0XHJcbiAgICAgICAgLy8gYW55IGZvciBqc29uIHJlc3BvbnNlXHJcblxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIG5leHQ6IChwcm9wZXJ0aWVzRGF0YSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vYmplY3RBdHRyaWJ1dGVHcm91cHMgPSB0aGlzLl9jcmVhdGVBdHRyaWJ1dGVHcm91cHNGcm9tUmVzcG9uc2UocHJvcGVydGllc0RhdGEpO1xyXG4gICAgICAgICAgdGhpcy5fc3luY0F0dHJpYnV0ZVN0YXRlc0Zyb21Dcml0ZXJpYSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+e1xyXG4gICAgICAgICAgdGhpcy5vYmplY3RBdHRyaWJ1dGVHcm91cHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcHJpdmF0ZSBfY3JlYXRlQXR0cmlidXRlR3JvdXBzRnJvbVJlc3BvbnNlKHByb3BlcnRpZXNEYXRhIDogYW55KXtcclxuXHJcbiAgICBjb25zdCBncm91cHMgOiBBcnJheTxPYmplY3RBdHRyaWJ1dGVHcm91cD4gPSBbXTtcclxuICAgIGxldCBsb2NhbGl6ZWRBdHRyaWJHcm91cHMgPSBudWxsO1xyXG4gICAgaWYocHJvcGVydGllc0RhdGEubG9jYWxpemVkQXR0cmlidXRlR3JvdXBzKXtcclxuICAgICAgbG9jYWxpemVkQXR0cmliR3JvdXBzID0gcHJvcGVydGllc0RhdGEubG9jYWxpemVkQXR0cmlidXRlR3JvdXBzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcHJvcGVydGllc0RhdGEuYXR0cmlidXRlcyl7XHJcbiAgICAgIHJldHVybiBncm91cHM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXR0cmliR3JvdXBzID0gcHJvcGVydGllc0RhdGEuYXR0cmlidXRlcztcclxuICAgIGZvcihjb25zdCBbZ3JvdXBOYW1lLCBhdHRyaWJzT2JqZWN0XSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJHcm91cHMpKXtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IG5ld0dyb3VwIDogT2JqZWN0QXR0cmlidXRlR3JvdXAgPSB7XHJcbiAgICAgICAgbmFtZSA6IGdyb3VwTmFtZSxcclxuICAgICAgICBleHBhbmRlZCA6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJpYnV0ZXMgOiBbXVxyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgaWYobG9jYWxpemVkQXR0cmliR3JvdXBzPy5bZ3JvdXBOYW1lXSl7XHJcbiAgICAgICAgbmV3R3JvdXAubmFtZSA9IGxvY2FsaXplZEF0dHJpYkdyb3Vwc1tncm91cE5hbWVdOyBcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIWF0dHJpYnNPYmplY3Qpe1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IoY29uc3QgYXR0cmliIG9mIE9iamVjdC52YWx1ZXMoYXR0cmlic09iamVjdCkpe1xyXG5cclxuICAgICAgICBjb25zdCBuZXdBdHRyaWIgOiBPYmplY3RBdHRyaWJ1dGUgPSB7XHJcbiAgICAgICAgICBpZCA6IGF0dHJpYi5pZCxcclxuICAgICAgICAgIG5hbWUgOiBhdHRyaWIubmFtZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uIDogYXR0cmliLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgdmFsdWUgOiBhdHRyaWIudmFsdWUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIHZhbHVlQ2hlY2tlZCA6IGZhbHNlLFxyXG4gICAgICAgICAgZ3JvdXAgOiBhdHRyaWIuZ3JvdXBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5ld0dyb3VwLmF0dHJpYnV0ZXMucHVzaChuZXdBdHRyaWIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBncm91cHMucHVzaChuZXdHcm91cCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zeW5jQXR0cmlidXRlU3RhdGVzRnJvbUNyaXRlcmlhKCl7XHJcbiAgICB0aGlzLm9iamVjdEF0dHJpYnV0ZUdyb3Vwcy5mb3JFYWNoKGdyb3VwPT57XHJcbiAgICAgIGdyb3VwLmF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyaWI9PntcclxuICAgICAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuX2ZpbHRlckNyaXRlcmlhLmZpbmQoeD0+eC5pZCA9PSBhdHRyaWIuaWQpXHJcbiAgICAgICAgaWYoY3JpdGVyaWEpe1xyXG4gICAgICAgICAgYXR0cmliLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgYXR0cmliLnZhbHVlQ2hlY2tlZCA9IGNyaXRlcmlhLnZhbHVlICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBhdHRyaWIuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYXR0cmliLnZhbHVlQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkT2JqZWN0UHJvcGVydGllcyhvYmplY3RJZCA6IHN0cmluZywgcmV2aXNpb24gOiBudW1iZXIgfCB1bmRlZmluZWQpe1xyXG4gICAgaWYoIXRoaXMuYXBpKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpLm9iamVjdHMuZ2V0KG9iamVjdElkLCByZXZpc2lvbiwgXCI4XCIsIHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZCApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRPYmplY3RTdHJ1Y3R1cmUob2JqZWN0SWQgOiBzdHJpbmcsIHJldmlzaW9uIDogbnVtYmVyIHwgdW5kZWZpbmVkKXtcclxuICAgIGlmKCF0aGlzLmFwaSl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFwaS5vYmplY3RzLmdldFRvcG9sb2d5KG9iamVjdElkLCByZXZpc2lvbiwgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRPYmplY3RDb21wbGV4UHJvcGVydGllc1N0cnVjdHVyZShvYmplY3RJZCA6IHN0cmluZywgcmV2aXNpb24gOiBudW1iZXIgfCB1bmRlZmluZWQpe1xyXG4gICAgaWYoIXRoaXMuYXBpKXtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpLm9iamVjdHMuZ2V0Q29tcGxleFByb3BlcnRpZXNUb3BvbG9neShvYmplY3RJZCwgcmV2aXNpb24pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNvbXBsZXhQcm9wZXJ0aWVzdHJ1Y3R1cmUob2JqZWN0SWQgOiBzdHJpbmcsIHJldmlzaW9uIDogbnVtYmVyIHwgdW5kZWZpbmVkKXtcclxuICAgIHRoaXMuX2xvYWRPYmplY3RDb21wbGV4UHJvcGVydGllc1N0cnVjdHVyZShvYmplY3RJZCwgcmV2aXNpb24pPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0IDooc3RydWN0dXJlRGF0YSk9PntcclxuICAgICAgICBpZihzdHJ1Y3R1cmVEYXRhKXtcclxuICAgICAgICAgIGNvbnN0IGNvbXBsZXhQcm9wcyA9IENvbXBsZXhQcm9wZXJ0aWVzTm9kZUJ1aWxkZXIuY3JlYXRlRnJvbVJlc3BvbnNlKHN0cnVjdHVyZURhdGEpO1xyXG4gICAgICAgICAgaWYoY29tcGxleFByb3BzPy5jaGlsZHJlbj8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgdGhpcy5fY29tcGxleFByb3BlcnRpZXMgPSBjb21wbGV4UHJvcHM7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5fY29tcGxleFByb3BlcnRpZXMgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVPYmplY3RTdHJ1Y3R1cmUob2JqZWN0SWQgOiBzdHJpbmcsIHJldmlzaW9uIDogbnVtYmVyIHwgdW5kZWZpbmVkKXtcclxuICAgIHRoaXMuX2xvYWRPYmplY3RTdHJ1Y3R1cmUob2JqZWN0SWQsIHJldmlzaW9uKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dCA6KHN0cnVjdHVyZURhdGEpPT57XHJcbiAgICAgICAgaWYoc3RydWN0dXJlRGF0YSl7XHJcbiAgICAgICAgICB0aGlzLl9vYmplY3RTdHJ1Y3R1cmUgPSBPYmplY3RTdHJ1Y3R1cmVOb2RlQnVpbGRlci5jcmVhdGVGcm9tUmVzcG9uc2Uoc3RydWN0dXJlRGF0YSk7XHJcbiAgICAgICAgfSAgICBcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPCEtLSBPYmplY3Qgc3RydWN0dXJlLS0+XHJcbjxsaWItZXhwYW5zaW9uLXBhbmVsPlxyXG4gIDxsaWItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWhlYWRlclwiPiB7e1wiX09iamVjdCBzdHJ1Y3R1cmVcIiB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgQGlmKG9iamVjdFN0cnVjdHVyZSl7XHJcbiAgICA8bGliLWJpbXBsdXMtb2JqZWN0LXN0cnVjdHVyZVxyXG4gICAgICBbb2JqZWN0U3RydWN0dXJlXT1cIm9iamVjdFN0cnVjdHVyZVwiXHJcbiAgICAgIChub2RlU2VsZWN0ZWQpPVwiaGFuZGxlT2JqZWN0U3RydWN0dXJlTm9kZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9saWItYmltcGx1cy1vYmplY3Qtc3RydWN0dXJlPiAgXHJcbiAgfVxyXG48L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbjwhLS0gRW5kIE9iamVjdCBzdHJ1Y3R1cmUtLT5cclxuXHJcbjwhLS0gQ29tcGxleCBwcm9wZXJ0aWVzLS0+XHJcbkBpZihjb21wbGV4UHJvcGVydGllcyl7ICBcclxuICA8bGliLWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDxsaWItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMtaGVhZGVyXCI+IHt7XCJfT2JqZWN0IG11bHRpcHJvcGVydGllcyB0cmVlXCIgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxsaWItYmltcGx1cy1vYmplY3QtY29tcGxleC1wcm9wZXJ0aWVzXHJcbiAgICAgICAgW2NvbXBsZXhQcm9wZXJ0aWVzXT1cImNvbXBsZXhQcm9wZXJ0aWVzXCJcclxuICAgICAgICAobm9kZVNlbGVjdGVkKT1cImhhbmRsZUNvbXBsZXhQcm9wZXJ0eU5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2xpYi1iaW1wbHVzLW9iamVjdC1jb21wbGV4LXByb3BlcnRpZXM+ICBcclxuICA8L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbn1cclxuPCEtLSBFbmQgQ29tcGxleCBwcm9wZXJ0aWVzLS0+XHJcblxyXG48IS0tIFByb3BlcnRpZXMgbGlzdC0tPlxyXG5AaWYob2JqZWN0QXR0cmlidXRlR3JvdXBzLmxlbmd0aCA+IDApeyAgXHJcbiAgPGxpYi1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWhlYWRlclwiPiB7e1wiX09iamVjdCBwcm9wZXJ0aWVzXCIgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgQGZvciAoYXR0cmliR3JvdXAgb2Ygb2JqZWN0QXR0cmlidXRlR3JvdXBzOyB0cmFjayBhdHRyaWJHcm91cCkge1xyXG4gICAgICA8bGliLWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiYXR0cmliR3JvdXAuZXhwYW5kZWRcIj5cclxuICAgICAgICA8bGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1ncm91cC1oZWFkZXJcIj4ge3thdHRyaWJHcm91cC5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9saWItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgQGZvciAoYXR0cmliIG9mIGF0dHJpYkdyb3VwLmF0dHJpYnV0ZXM7IHRyYWNrIGF0dHJpYikge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwgY3JpdGVyaWEtc2VsZWN0LWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhdHRyaWIuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID09PSBNYXhGaWx0ZXJDcml0ZXJpYSAmJiAhYXR0cmliLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUF0dHJpYnV0ZShhdHRyaWIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJ0b2dnbGVBdHRyaWJ1dGUoYXR0cmliKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtdGV4dFwiPnt7YXR0cmliLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwgY3JpdGVyaWEtc2VsZWN0LWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhdHRyaWIudmFsdWVDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJDcml0ZXJpYS5sZW5ndGggPT09IE1heEZpbHRlckNyaXRlcmlhICYmICFhdHRyaWIuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQXR0cmlidXRlVmFsdWUoYXR0cmliKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwidG9nZ2xlQXR0cmlidXRlVmFsdWUoYXR0cmliKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgQGlmKGF0dHJpYi52YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtdGV4dFwiPnt7YXR0cmliLnZhbHVlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3ctY2VsbC10ZXh0XCI+Li4uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L2xpYi1leHBhbnNpb24tcGFuZWw+ICAgIFxyXG4gICAgfVxyXG4gIDwvbGliLWV4cGFuc2lvbi1wYW5lbD5cclxufVxyXG48IS0tIEVuZCBQcm9wZXJ0aWVzIGxpc3QtLT4iXX0=
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMvY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9jcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMvY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM5RyxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDcEgsT0FBTyxFQUFFLHVDQUF1QyxFQUFF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LHkzR0R2R1ksNkJBQTZCLHVFQUFFLHVCQUF1QixxRkFBRSxlQUFlLDRGQUFFLCtCQUErQixpSUFBRSx1Q0FBdUM7OzRGQUtoSix1Q0FBdUM7a0JBUm5ELFNBQVM7K0JBQ0UsdUNBQXVDLGNBQ3JDLElBQUksV0FDUCxDQUFDLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSx1Q0FBdUMsQ0FBQyxhQUNqSixDQUFDLGVBQWUsQ0FBQzttSEErQjVCLEdBQUc7c0JBREYsS0FBSztnQkFJRixZQUFZO3NCQURmLEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWNGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBTUksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBXZWJTZGsgZnJvbSAnYmltcGx1cy13ZWJzZGsnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmltcGx1c0xvY2FsaXplZFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpbXBsdXMtbG9jYWxpemVkLXdpZGdldC9iaW1wbHVzLWxvY2FsaXplZC13aWRnZXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIvZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDcml0ZXJpdW0sIE1heEZpbHRlckNyaXRlcmlhIH0gZnJvbSAnLi4vYmltcGx1cy1vYmplY3QtbmF2aWdhdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJpbXBsdXNPYmplY3RTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmUvYmltcGx1cy1vYmplY3Qtc3RydWN0dXJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJpbXBsdXNPYmplY3RDb21wbGV4UHJvcGVydGllc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpbXBsdXMtb2JqZWN0LWNvbXBsZXgtcHJvcGVydGllcy9iaW1wbHVzLW9iamVjdC1jb21wbGV4LXByb3BlcnRpZXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JqZWN0U3RydWN0dXJlTm9kZSwgT2JqZWN0U3RydWN0dXJlTm9kZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmUvYmltcGx1cy1vYmplY3Qtc3RydWN0dXJlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvbXBsZXhQcm9wZXJ0aWVzTm9kZSwgQ29tcGxleFByb3BlcnRpZXNOb2RlQnVpbGRlciB9IGZyb20gJy4uLy4uL2JpbXBsdXMtb2JqZWN0LWNvbXBsZXgtcHJvcGVydGllcy9iaW1wbHVzLW9iamVjdC1jb21wbGV4LXByb3BlcnRpZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgT2JqZWN0QXR0cmlidXRlLCBPYmplY3RBdHRyaWJ1dGVHcm91cCB9IGZyb20gJy4vY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEZvcm1hdFZhbHVlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2Zvcm1hdC12YWx1ZS5waXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQsIEV4cGFuc2lvblBhbmVsQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIEJpbXBsdXNPYmplY3RTdHJ1Y3R1cmVDb21wb25lbnQsIEJpbXBsdXNPYmplY3RDb21wbGV4UHJvcGVydGllc0NvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbRm9ybWF0VmFsdWVQaXBlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5sZXNzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JpdGVyaWFTZWxlY3RPYmplY3RQcm9wZXJ0aWVzQ29tcG9uZW50IGV4dGVuZHMgQmltcGx1c0xvY2FsaXplZFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybWF0VmFsdWVQaXBlOiBGb3JtYXRWYWx1ZVBpcGUpIHtcclxuICAgIHN1cGVyKHRyYW5zbGF0ZVNlcnZpY2UpXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9wZXJ0aWVzT2JqZWN0SWQkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChpZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgdGhpcy5fY3JlYXRlT2JqZWN0UHJvcGVydGllcyhpZCwgdGhpcy5yZXZpc2lvbilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2N1cnJlbnRPYmplY3RJZCQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGlkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFByb3BlcnRpZXNPYmplY3RJZCQubmV4dChpZCk7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tcGxleFByb3BlcnRpZXN0cnVjdHVyZShpZCwgdGhpcy5yZXZpc2lvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYXBpOiBXZWJTZGsuQXBpIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJvb3RPYmplY3RJZChpZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50T2JqZWN0SWQkLm5leHQoaWQpO1xyXG4gICAgdGhpcy5fY3JlYXRlT2JqZWN0U3RydWN0dXJlKGlkLCB0aGlzLnJldmlzaW9uKTtcclxuXHJcbiAgICB0aGlzLl9yb290T2JqZWN0SWQgPSBpZDtcclxuICB9XHJcblxyXG4gIGdldCByb290T2JqZWN0SWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yb290T2JqZWN0SWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHJldmlzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX2N1cnJlbnRPYmplY3RJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oXCJcIik7XHJcblxyXG4gIHByaXZhdGUgX2N1cnJlbnRQcm9wZXJ0aWVzT2JqZWN0SWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFwiXCIpO1xyXG5cclxuICBvYmplY3RBdHRyaWJ1dGVHcm91cHM6IE9iamVjdEF0dHJpYnV0ZUdyb3VwW10gPSBbXTtcclxuXHJcbiAgTWF4RmlsdGVyQ3JpdGVyaWEgPSBNYXhGaWx0ZXJDcml0ZXJpYTsgLy8gRm9yIGV4cG9zdXJlIHRvIHRlbXBsYXRlXHJcblxyXG4gIHByaXZhdGUgX3Jvb3RPYmplY3RJZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZmlsdGVyQ3JpdGVyaWEoY3JpdGVyaWE6IEZpbHRlckNyaXRlcml1bVtdKSB7XHJcbiAgICB0aGlzLl9maWx0ZXJDcml0ZXJpYSA9IGNyaXRlcmlhO1xyXG4gICAgdGhpcy5fc3luY0F0dHJpYnV0ZVN0YXRlc0Zyb21Dcml0ZXJpYSgpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlckNyaXRlcmlhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDcml0ZXJpdW1bXT4oKTtcclxuXHJcbiAgZ2V0IGZpbHRlckNyaXRlcmlhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyQ3JpdGVyaWE6IEZpbHRlckNyaXRlcml1bVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX29iamVjdFN0cnVjdHVyZTogT2JqZWN0U3RydWN0dXJlTm9kZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBnZXQgb2JqZWN0U3RydWN0dXJlKCk6IE9iamVjdFN0cnVjdHVyZU5vZGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9vYmplY3RTdHJ1Y3R1cmVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBsZXhQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydGllc05vZGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZ2V0IGNvbXBsZXhQcm9wZXJ0aWVzKCk6IENvbXBsZXhQcm9wZXJ0aWVzTm9kZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBsZXhQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQXR0cmlidXRlKGF0dHJpYjogT2JqZWN0QXR0cmlidXRlKSB7XHJcbiAgICBhdHRyaWIuY2hlY2tlZCA9ICFhdHRyaWIuY2hlY2tlZDtcclxuICAgIGlmIChhdHRyaWIuY2hlY2tlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgYXR0cmliLnZhbHVlQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFuZGxlRmlsdGVyQ3JpdGVyaXVtQXR0cmlidXRlU3RhdGVDaGFuZ2UoYXR0cmliKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUF0dHJpYnV0ZVZhbHVlKGF0dHJpYjogT2JqZWN0QXR0cmlidXRlKSB7XHJcbiAgICBhdHRyaWIudmFsdWVDaGVja2VkID0gIWF0dHJpYi52YWx1ZUNoZWNrZWQ7XHJcbiAgICBhdHRyaWIuY2hlY2tlZCA9IGF0dHJpYi52YWx1ZUNoZWNrZWQ7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVGaWx0ZXJDcml0ZXJpdW1BdHRyaWJ1dGVTdGF0ZUNoYW5nZShhdHRyaWIpO1xyXG4gIH1cclxuXHJcbiAgX2RlZmluZUZpbHRlclN0cmluZyhhdHRyaWI6IE9iamVjdEF0dHJpYnV0ZSkge1xyXG4gICAgbGV0IHN1YnN0cmluZyA9IGBbSV1bJHthdHRyaWIuaWR9XS5WYWx1ZWA7XHJcblxyXG4gICAgaWYgKGF0dHJpYi52YWx1ZUNoZWNrZWQpIHtcclxuICAgICAgc3Vic3RyaW5nICs9IGBbRl1bMF09JHt0aGlzLmZvcm1hdFZhbHVlUGlwZS50cmFuc2Zvcm0oYXR0cmliLnZhbHVlKX1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1YnN0cmluZztcclxuICB9XHJcblxyXG4gIF9hZGRGaWx0ZXJDcml0ZXJpYShhdHRyaWI6IE9iamVjdEF0dHJpYnV0ZSkge1xyXG4gICAgLy8gYWRkIGEgbmV3IGVudHJ5XHJcbiAgICB0aGlzLmZpbHRlckNyaXRlcmlhLnB1c2goe1xyXG4gICAgICBuYW1lOiBhdHRyaWIubmFtZSxcclxuICAgICAgdmFsdWU6IGF0dHJpYi52YWx1ZUNoZWNrZWQgPyBhdHRyaWIudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgIGlkOiBhdHRyaWIuaWQsXHJcbiAgICAgIHN1YlN0cmluZzogdGhpcy5fZGVmaW5lRmlsdGVyU3RyaW5nKGF0dHJpYiksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF91cGRhdGVGaWx0ZXJDcml0ZXJpYShhdHRyaWI6IE9iamVjdEF0dHJpYnV0ZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBlbnRyeVxyXG4gICAgdGhpcy5maWx0ZXJDcml0ZXJpYVtpbmRleF0gPSB7XHJcbiAgICAgIC4uLnRoaXMuZmlsdGVyQ3JpdGVyaWFbaW5kZXhdLFxyXG4gICAgICBuYW1lOiBhdHRyaWIubmFtZSxcclxuICAgICAgdmFsdWU6IGF0dHJpYi52YWx1ZUNoZWNrZWQgPyBhdHRyaWIudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgIHN1YlN0cmluZzogdGhpcy5fZGVmaW5lRmlsdGVyU3RyaW5nKGF0dHJpYiksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZUZpbHRlckNyaXRlcml1bUF0dHJpYnV0ZVN0YXRlQ2hhbmdlKGF0dHJpYjogT2JqZWN0QXR0cmlidXRlKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyQ3JpdGVyaWEuZmluZEluZGV4KHggPT4geC5pZCA9PT0gYXR0cmliLmlkKTtcclxuICAgIC8vIEZJTFRFUiBDUklURVJJQSBBTFJFQURZIEVYSVNUU1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgaWYgKGF0dHJpYi5jaGVja2VkID09PSBmYWxzZSAmJiBhdHRyaWIudmFsdWVDaGVja2VkID09PSBmYWxzZSkge1xyXG4gICAgICAgIC8vIFJFTU9WRVxyXG4gICAgICAgIC8vIGZpbHRlckNyaXRlcmlhIG5vIGxvbmdlciB1c2VkIChsZWZ0IC8gcmlnaHQgY2hlY2tib3hlcyBub3QgY2hlY2tlZClcclxuICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVVBEQVRFXHJcbiAgICAgICAgLy8gZmlsdGVyQ3JpdGVyaWEgc3RpbGwgdXNlZCwgYnV0IHZhbHVlIHNob3VsZCBiZSB1c2VkIChyaWdodCBjaGVja2JveCBjaGVja2VkKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlckNyaXRlcmlhKGF0dHJpYiwgaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlckNyaXRlcmlhKTtcclxuICAgIH1cclxuICAgIC8vIEZJTFRFUiBDUklURVJJQSBET0VTIE5PVCBFWElTVCBhbmQgTUFYIENSSVRFUklBIE5PVCBSRUFDSEVEXHJcbiAgICBlbHNlIGlmICh0aGlzLmZpbHRlckNyaXRlcmlhLmxlbmd0aCA8IE1heEZpbHRlckNyaXRlcmlhKSB7XHJcbiAgICAgIC8vIEFERFxyXG4gICAgICB0aGlzLl9hZGRGaWx0ZXJDcml0ZXJpYShhdHRyaWIpO1xyXG4gICAgICB0aGlzLmZpbHRlckNyaXRlcmlhQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJDcml0ZXJpYSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPYmplY3RTdHJ1Y3R1cmVOb2RlU2VsZWN0ZWQobm9kZTogT2JqZWN0U3RydWN0dXJlTm9kZSkge1xyXG4gICAgdGhpcy5fY3VycmVudE9iamVjdElkJC5uZXh0KG5vZGUuaWQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGxleFByb3BlcnR5Tm9kZVNlbGVjdGVkKG5vZGU6IENvbXBsZXhQcm9wZXJ0aWVzTm9kZSkge1xyXG4gICAgdGhpcy5fY3VycmVudFByb3BlcnRpZXNPYmplY3RJZCQubmV4dChub2RlLmlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU9iamVjdFByb3BlcnRpZXMob2JqZWN0SWQ6IHN0cmluZywgcmV2aXNpb246IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbG9hZE9iamVjdFByb3BlcnRpZXMob2JqZWN0SWQsIHJldmlzaW9uKT8uc3Vic2NyaWJlKHtcclxuXHJcbiAgICAgIC8vIHByb3BlcnRpZXMgcmVzcG9uc2UgaXMgYmFkbHkgc3RydWN0dXJlZCwgbmVhcmx5IGltcG9zc2libGUgdG8gY3JlYXRlIGNsYXNzIHN0cnVjdHVyZSBmcm9tIGl0LiBUaGVyZWZvcmUgdXNpbmcgc2hvcnRjdXRcclxuICAgICAgLy8gYW55IGZvciBqc29uIHJlc3BvbnNlXHJcblxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgbmV4dDogKHByb3BlcnRpZXNEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9iamVjdEF0dHJpYnV0ZUdyb3VwcyA9IHRoaXMuX2NyZWF0ZUF0dHJpYnV0ZUdyb3Vwc0Zyb21SZXNwb25zZShwcm9wZXJ0aWVzRGF0YSk7XHJcbiAgICAgICAgdGhpcy5fc3luY0F0dHJpYnV0ZVN0YXRlc0Zyb21Dcml0ZXJpYSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub2JqZWN0QXR0cmlidXRlR3JvdXBzID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIF9jcmVhdGVBdHRyaWJ1dGVHcm91cHNGcm9tUmVzcG9uc2UocHJvcGVydGllc0RhdGE6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogQXJyYXk8T2JqZWN0QXR0cmlidXRlR3JvdXA+ID0gW107XHJcbiAgICBsZXQgbG9jYWxpemVkQXR0cmliR3JvdXBzID0gbnVsbDtcclxuICAgIGlmIChwcm9wZXJ0aWVzRGF0YS5sb2NhbGl6ZWRBdHRyaWJ1dGVHcm91cHMpIHtcclxuICAgICAgbG9jYWxpemVkQXR0cmliR3JvdXBzID0gcHJvcGVydGllc0RhdGEubG9jYWxpemVkQXR0cmlidXRlR3JvdXBzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcHJvcGVydGllc0RhdGEuYXR0cmlidXRlcykge1xyXG4gICAgICByZXR1cm4gZ3JvdXBzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF0dHJpYkdyb3VwcyA9IHByb3BlcnRpZXNEYXRhLmF0dHJpYnV0ZXM7XHJcbiAgICBmb3IgKGNvbnN0IFtncm91cE5hbWUsIGF0dHJpYnNPYmplY3RdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYkdyb3VwcykpIHtcclxuXHJcbiAgICAgIGNvbnN0IG5ld0dyb3VwOiBPYmplY3RBdHRyaWJ1dGVHcm91cCA9IHtcclxuICAgICAgICBuYW1lOiBncm91cE5hbWUsXHJcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAobG9jYWxpemVkQXR0cmliR3JvdXBzPy5bZ3JvdXBOYW1lXSkge1xyXG4gICAgICAgIG5ld0dyb3VwLm5hbWUgPSBsb2NhbGl6ZWRBdHRyaWJHcm91cHNbZ3JvdXBOYW1lXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFhdHRyaWJzT2JqZWN0KSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgYXR0cmliIG9mIE9iamVjdC52YWx1ZXMoYXR0cmlic09iamVjdCkpIHtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3QXR0cmliOiBPYmplY3RBdHRyaWJ1dGUgPSB7XHJcbiAgICAgICAgICBpZDogYXR0cmliLmlkLFxyXG4gICAgICAgICAgbmFtZTogYXR0cmliLm5hbWUsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0cmliLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgdmFsdWU6IGF0dHJpYi52YWx1ZSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgdmFsdWVDaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIGdyb3VwOiBhdHRyaWIuZ3JvdXBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5ld0dyb3VwLmF0dHJpYnV0ZXMucHVzaChuZXdBdHRyaWIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBncm91cHMucHVzaChuZXdHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N5bmNBdHRyaWJ1dGVTdGF0ZXNGcm9tQ3JpdGVyaWEoKSB7XHJcbiAgICB0aGlzLm9iamVjdEF0dHJpYnV0ZUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgZ3JvdXAuYXR0cmlidXRlcy5mb3JFYWNoKGF0dHJpYiA9PiB7XHJcbiAgICAgICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLl9maWx0ZXJDcml0ZXJpYS5maW5kKHggPT4geC5pZCA9PSBhdHRyaWIuaWQpXHJcbiAgICAgICAgaWYgKGNyaXRlcmlhKSB7XHJcbiAgICAgICAgICBhdHRyaWIuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBhdHRyaWIudmFsdWVDaGVja2VkID0gY3JpdGVyaWEudmFsdWUgIT09IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXR0cmliLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGF0dHJpYi52YWx1ZUNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZE9iamVjdFByb3BlcnRpZXMob2JqZWN0SWQ6IHN0cmluZywgcmV2aXNpb246IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKCF0aGlzLmFwaSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZyb20odGhpcy5hcGkub2JqZWN0cy5nZXQob2JqZWN0SWQsIHJldmlzaW9uLCBcIjhcIiwgdW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkT2JqZWN0U3RydWN0dXJlKG9iamVjdElkOiBzdHJpbmcsIHJldmlzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICghdGhpcy5hcGkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpLm9iamVjdHMuZ2V0VG9wb2xvZ3kob2JqZWN0SWQsIHJldmlzaW9uLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZE9iamVjdENvbXBsZXhQcm9wZXJ0aWVzU3RydWN0dXJlKG9iamVjdElkOiBzdHJpbmcsIHJldmlzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICghdGhpcy5hcGkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpLm9iamVjdHMuZ2V0Q29tcGxleFByb3BlcnRpZXNUb3BvbG9neShvYmplY3RJZCwgcmV2aXNpb24pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNvbXBsZXhQcm9wZXJ0aWVzdHJ1Y3R1cmUob2JqZWN0SWQ6IHN0cmluZywgcmV2aXNpb246IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbG9hZE9iamVjdENvbXBsZXhQcm9wZXJ0aWVzU3RydWN0dXJlKG9iamVjdElkLCByZXZpc2lvbik/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChzdHJ1Y3R1cmVEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHN0cnVjdHVyZURhdGEpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbXBsZXhQcm9wcyA9IENvbXBsZXhQcm9wZXJ0aWVzTm9kZUJ1aWxkZXIuY3JlYXRlRnJvbVJlc3BvbnNlKHN0cnVjdHVyZURhdGEpO1xyXG4gICAgICAgICAgaWYgKGNvbXBsZXhQcm9wcz8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wbGV4UHJvcGVydGllcyA9IGNvbXBsZXhQcm9wcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXhQcm9wZXJ0aWVzID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVPYmplY3RTdHJ1Y3R1cmUob2JqZWN0SWQ6IHN0cmluZywgcmV2aXNpb246IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbG9hZE9iamVjdFN0cnVjdHVyZShvYmplY3RJZCwgcmV2aXNpb24pPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoc3RydWN0dXJlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChzdHJ1Y3R1cmVEYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLl9vYmplY3RTdHJ1Y3R1cmUgPSBPYmplY3RTdHJ1Y3R1cmVOb2RlQnVpbGRlci5jcmVhdGVGcm9tUmVzcG9uc2Uoc3RydWN0dXJlRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8IS0tIE9iamVjdCBzdHJ1Y3R1cmUtLT5cclxuPGxpYi1leHBhbnNpb24tcGFuZWw+XHJcbiAgPGxpYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMtaGVhZGVyXCI+XHJcbiAgICAgIHt7IFwiX09iamVjdCBzdHJ1Y3R1cmVcIiB8IHRyYW5zbGF0ZSB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgQGlmKG9iamVjdFN0cnVjdHVyZSl7XHJcbiAgPGxpYi1iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmVcclxuICAgIFtvYmplY3RTdHJ1Y3R1cmVdPVwib2JqZWN0U3RydWN0dXJlXCJcclxuICAgIChub2RlU2VsZWN0ZWQpPVwiaGFuZGxlT2JqZWN0U3RydWN0dXJlTm9kZVNlbGVjdGVkKCRldmVudClcIlxyXG4gID5cclxuICA8L2xpYi1iaW1wbHVzLW9iamVjdC1zdHJ1Y3R1cmU+XHJcbiAgfVxyXG48L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbjwhLS0gRW5kIE9iamVjdCBzdHJ1Y3R1cmUtLT5cclxuXHJcbjwhLS0gQ29tcGxleCBwcm9wZXJ0aWVzLS0+XHJcbkBpZihjb21wbGV4UHJvcGVydGllcyl7XHJcbjxsaWItZXhwYW5zaW9uLXBhbmVsPlxyXG4gIDxsaWItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWhlYWRlclwiPlxyXG4gICAgICB7eyBcIl9PYmplY3QgbXVsdGlwcm9wZXJ0aWVzIHRyZWVcIiB8IHRyYW5zbGF0ZSB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgPGxpYi1iaW1wbHVzLW9iamVjdC1jb21wbGV4LXByb3BlcnRpZXNcclxuICAgIFtjb21wbGV4UHJvcGVydGllc109XCJjb21wbGV4UHJvcGVydGllc1wiXHJcbiAgICAobm9kZVNlbGVjdGVkKT1cImhhbmRsZUNvbXBsZXhQcm9wZXJ0eU5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9saWItYmltcGx1cy1vYmplY3QtY29tcGxleC1wcm9wZXJ0aWVzPlxyXG48L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbn1cclxuPCEtLSBFbmQgQ29tcGxleCBwcm9wZXJ0aWVzLS0+XHJcblxyXG48IS0tIFByb3BlcnRpZXMgbGlzdC0tPlxyXG5AaWYob2JqZWN0QXR0cmlidXRlR3JvdXBzLmxlbmd0aCA+IDApe1xyXG48bGliLWV4cGFuc2lvbi1wYW5lbD5cclxuICA8bGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1oZWFkZXJcIj5cclxuICAgICAge3sgXCJfT2JqZWN0IHByb3BlcnRpZXNcIiB8IHRyYW5zbGF0ZSB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbGliLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gIEBmb3IgKGF0dHJpYkdyb3VwIG9mIG9iamVjdEF0dHJpYnV0ZUdyb3VwczsgdHJhY2sgYXR0cmliR3JvdXApIHtcclxuICA8bGliLWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiYXR0cmliR3JvdXAuZXhwYW5kZWRcIj5cclxuICAgIDxsaWItZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMtZ3JvdXAtaGVhZGVyXCI+XHJcbiAgICAgICAge3sgYXR0cmliR3JvdXAubmFtZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2xpYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPGRpdj5cclxuICAgICAgQGZvciAoYXR0cmliIG9mIGF0dHJpYkdyb3VwLmF0dHJpYnV0ZXM7IHRyYWNrIGF0dHJpYikge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwgY3JpdGVyaWEtc2VsZWN0LWNoZWNrYm94XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcml0ZXJpYS1zZWxlY3Qtb2JqZWN0LXByb3BlcnRpZXMtYXR0cmliLXJvdy1jZWxsLWxhYmVsXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImF0dHJpYi5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyQ3JpdGVyaWEubGVuZ3RoID09PSBNYXhGaWx0ZXJDcml0ZXJpYSAmJiAhYXR0cmliLmNoZWNrZWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQXR0cmlidXRlKGF0dHJpYilcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cInRvZ2dsZUF0dHJpYnV0ZShhdHRyaWIpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtdGV4dFwiPlxyXG4gICAgICAgICAgICAgIHt7IGF0dHJpYi5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3ctY2VsbCBjcml0ZXJpYS1zZWxlY3QtY2hlY2tib3hcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtbGFiZWxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYXR0cmliLnZhbHVlQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNyaXRlcmlhLmxlbmd0aCA9PT0gTWF4RmlsdGVyQ3JpdGVyaWEgJiYgIWF0dHJpYi5jaGVja2VkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUF0dHJpYnV0ZVZhbHVlKGF0dHJpYilcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cInRvZ2dsZUF0dHJpYnV0ZVZhbHVlKGF0dHJpYilcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICBAaWYoYXR0cmliLnZhbHVlID09PSBudWxsIHx8IGF0dHJpYi52YWx1ZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3JpdGVyaWEtc2VsZWN0LW9iamVjdC1wcm9wZXJ0aWVzLWF0dHJpYi1yb3ctY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdfTm90X2RlZmluZWQnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfUBlbHNlIGlmKGF0dHJpYi52YWx1ZSA9PT0gXCJcIil7XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnX0VtcHR5X3ZhbHVlJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLXNlbGVjdC1vYmplY3QtcHJvcGVydGllcy1hdHRyaWItcm93LWNlbGwtdGV4dFwiPlxyXG4gICAgICAgICAgICAgIHt7IGF0dHJpYi52YWx1ZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbiAgfVxyXG48L2xpYi1leHBhbnNpb24tcGFuZWw+XHJcbn1cclxuPCEtLSBFbmQgUHJvcGVydGllcyBsaXN0LS0+XHJcbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
+ import { BimplusLocalizedWidgetComponent } from '../../bimplus-localized-widget/bimplus-localized-widget.component';
3
+ import { TranslateModule } from '@ngx-translate/core';
2
4
  import * as i0 from "@angular/core";
3
- export class FilterCriteriumComponent {
4
- constructor() {
5
+ import * as i1 from "@ngx-translate/core";
6
+ export class FilterCriteriumComponent extends BimplusLocalizedWidgetComponent {
7
+ constructor(translateService) {
8
+ super(translateService);
5
9
  // #region public fields
6
10
  this.criterium = { name: "", subString: "" };
7
11
  this.indent = 0;
@@ -12,13 +16,13 @@ export class FilterCriteriumComponent {
12
16
  clickedDelete() {
13
17
  this.deleteCriterium.emit();
14
18
  }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterCriteriumComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FilterCriteriumComponent, isStandalone: true, selector: "app-filter-criterium", inputs: { criterium: "criterium", indent: "indent" }, outputs: { deleteCriterium: "deleteCriterium" }, host: { properties: { "style.margin-left.em": "this.indent" } }, ngImport: i0, template: "<div class=\"filter-criterium-row\">\r\n @if(criterium.value){\r\n <span class=\"filter-criterium-item\">{{criterium.name}} &nbsp;&#40;{{criterium.value}}&#41;</span>\r\n }@else{\r\n <span class=\"filter-criterium-item\">{{criterium.name}}</span>\r\n }\r\n <div \r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n >\r\n </div>\r\n</div>", styles: [".filter-criterium-icon-delete{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;height:1.8rem;width:1.8rem;cursor:pointer}.filter-criterium-item{flex-grow:1}.filter-criterium-row{display:flex;flex-direction:row;width:100%;height:2.4rem}\n"] }); }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterCriteriumComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FilterCriteriumComponent, isStandalone: true, selector: "app-filter-criterium", inputs: { criterium: "criterium", indent: "indent" }, outputs: { deleteCriterium: "deleteCriterium" }, host: { properties: { "style.margin-left.em": "this.indent" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"filter-criterium-row\">\r\n @if(criterium.value || criterium.value === false || criterium.value === 0){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ criterium.value }}&#41;</span\r\n >\r\n }@else if(criterium.value === null){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ \"_Not_defined\" | translate }}&#41;</span\r\n >\r\n }@else if(criterium.value === \"\"){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ \"_Empty_value\" | translate }}&#41;</span\r\n >\r\n }@else{\r\n <span class=\"filter-criterium-item\">{{ criterium.name }}</span>\r\n }\r\n <div\r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n ></div>\r\n</div>\r\n", styles: [".filter-criterium-icon-delete{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;height:1.8rem;width:1.8rem;cursor:pointer}.filter-criterium-item{flex-grow:1}.filter-criterium-row{display:flex;flex-direction:row;width:100%;height:2.4rem}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
17
21
  }
18
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterCriteriumComponent, decorators: [{
19
23
  type: Component,
20
- args: [{ selector: 'app-filter-criterium', standalone: true, imports: [], template: "<div class=\"filter-criterium-row\">\r\n @if(criterium.value){\r\n <span class=\"filter-criterium-item\">{{criterium.name}} &nbsp;&#40;{{criterium.value}}&#41;</span>\r\n }@else{\r\n <span class=\"filter-criterium-item\">{{criterium.name}}</span>\r\n }\r\n <div \r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n >\r\n </div>\r\n</div>", styles: [".filter-criterium-icon-delete{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;height:1.8rem;width:1.8rem;cursor:pointer}.filter-criterium-item{flex-grow:1}.filter-criterium-row{display:flex;flex-direction:row;width:100%;height:2.4rem}\n"] }]
21
- }], propDecorators: { criterium: [{
24
+ args: [{ selector: 'app-filter-criterium', standalone: true, imports: [TranslateModule], template: "<div class=\"filter-criterium-row\">\r\n @if(criterium.value || criterium.value === false || criterium.value === 0){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ criterium.value }}&#41;</span\r\n >\r\n }@else if(criterium.value === null){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ \"_Not_defined\" | translate }}&#41;</span\r\n >\r\n }@else if(criterium.value === \"\"){\r\n <span class=\"filter-criterium-item\"\r\n >{{ criterium.name }} &nbsp;&#40;{{ \"_Empty_value\" | translate }}&#41;</span\r\n >\r\n }@else{\r\n <span class=\"filter-criterium-item\">{{ criterium.name }}</span>\r\n }\r\n <div\r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n ></div>\r\n</div>\r\n", styles: [".filter-criterium-icon-delete{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;height:1.8rem;width:1.8rem;cursor:pointer}.filter-criterium-item{flex-grow:1}.filter-criterium-row{display:flex;flex-direction:row;width:100%;height:2.4rem}\n"] }]
25
+ }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { criterium: [{
22
26
  type: Input
23
27
  }], indent: [{
24
28
  type: HostBinding,
@@ -28,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
28
32
  }], deleteCriterium: [{
29
33
  type: Output
30
34
  }] } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWNyaXRlcml1bS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYmltcGx1cy1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9iaW1wbHVzLW9iamVjdC1uYXZpZ2F0b3IvZmlsdGVyLWNyaXRlcml1bS9maWx0ZXItY3JpdGVyaXVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9maWx0ZXItY3JpdGVyaXVtL2ZpbHRlci1jcml0ZXJpdW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVXBGLE1BQU0sT0FBTyx3QkFBd0I7SUFQckM7UUFTRSx3QkFBd0I7UUFFeEIsY0FBUyxHQUFxQixFQUFFLElBQUksRUFBRyxFQUFFLEVBQUUsU0FBUyxFQUFDLEVBQUUsRUFBQyxDQUFBO1FBRVYsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUV2RCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FRdEQ7SUFQQywyQkFBMkI7SUFFM0IseUJBQXlCO0lBQ3pCLGFBQWE7UUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBZFUsd0JBQXdCO21HQUF4Qix3QkFBd0Isd1BDVnJDLDBjQVlNOzs0RkRGTyx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxFQUFFOzhCQVFYLFNBQVM7c0JBRFIsS0FBSztnQkFHd0MsTUFBTTtzQkFBbkQsV0FBVzt1QkFBQyxzQkFBc0I7O3NCQUFHLEtBQUs7Z0JBRWpDLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmlsdGVyQ3JpdGVyaXVtIH0gZnJvbSAnLi4vYmltcGx1cy1vYmplY3QtbmF2aWdhdG9yLmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1maWx0ZXItY3JpdGVyaXVtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItY3JpdGVyaXVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmlsdGVyLWNyaXRlcml1bS5jb21wb25lbnQubGVzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckNyaXRlcml1bUNvbXBvbmVudCB7XHJcbiAgXHJcbiAgLy8gI3JlZ2lvbiBwdWJsaWMgZmllbGRzXHJcbiAgQElucHV0KClcclxuICBjcml0ZXJpdW0gOiBGaWx0ZXJDcml0ZXJpdW0gPSB7IG5hbWUgOiBcIlwiLCBzdWJTdHJpbmc6XCJcIn1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXJnaW4tbGVmdC5lbScpIEBJbnB1dCgpIGluZGVudDogbnVtYmVyID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIGRlbGV0ZUNyaXRlcml1bSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAvLyAjZW5kcmVnaW9uIHB1YmxpYyBmaWVsZHNcclxuXHJcbiAgLy8gI3JlZ2lvbiBwdWJsaWMgbWV0aG9kc1xyXG4gIGNsaWNrZWREZWxldGUoKXtcclxuICAgIHRoaXMuZGVsZXRlQ3JpdGVyaXVtLmVtaXQoKTtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiBwdWJsaWMgbWV0aG9kc1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXItY3JpdGVyaXVtLXJvd1wiPlxyXG4gICAgQGlmKGNyaXRlcml1bS52YWx1ZSl7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItY3JpdGVyaXVtLWl0ZW1cIj57e2NyaXRlcml1bS5uYW1lfX0gJm5ic3A7JiM0MDt7e2NyaXRlcml1bS52YWx1ZX19JiM0MTs8L3NwYW4+XHJcbiAgICB9QGVsc2V7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItY3JpdGVyaXVtLWl0ZW1cIj57e2NyaXRlcml1bS5uYW1lfX08L3NwYW4+XHJcbiAgICB9XHJcbiAgICA8ZGl2IFxyXG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLWNyaXRlcml1bS1pY29uLWRlbGV0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrZWREZWxldGUoKVwiXHJcbiAgICAgICAgKGtleXByZXNzKT1cImNsaWNrZWREZWxldGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWNyaXRlcml1bS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYmltcGx1cy1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9iaW1wbHVzLW9iamVjdC1uYXZpZ2F0b3IvZmlsdGVyLWNyaXRlcml1bS9maWx0ZXItY3JpdGVyaXVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci9maWx0ZXItY3JpdGVyaXVtL2ZpbHRlci1jcml0ZXJpdW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBU3hFLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSwrQkFBK0I7SUFFM0UsWUFBYSxnQkFBbUM7UUFDOUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFHekIsd0JBQXdCO1FBRXhCLGNBQVMsR0FBcUIsRUFBRSxJQUFJLEVBQUcsRUFBRSxFQUFFLFNBQVMsRUFBQyxFQUFFLEVBQUMsQ0FBQTtRQUVWLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFFdkQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBUnJELENBQUM7SUFTRCwyQkFBMkI7SUFFM0IseUJBQXlCO0lBQ3pCLGFBQWE7UUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBbEJVLHdCQUF3QjttR0FBeEIsd0JBQXdCLCtRQ1pyQyw2MEJBc0JBLCtuQkRkWSxlQUFlOzs0RkFJZCx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLGVBQWUsQ0FBQztxRkFZMUIsU0FBUztzQkFEUixLQUFLO2dCQUd3QyxNQUFNO3NCQUFuRCxXQUFXO3VCQUFDLHNCQUFzQjs7c0JBQUcsS0FBSztnQkFFakMsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDcml0ZXJpdW0gfSBmcm9tICcuLi9iaW1wbHVzLW9iamVjdC1uYXZpZ2F0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQmltcGx1c0xvY2FsaXplZFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpbXBsdXMtbG9jYWxpemVkLXdpZGdldC9iaW1wbHVzLWxvY2FsaXplZC13aWRnZXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1maWx0ZXItY3JpdGVyaXVtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItY3JpdGVyaXVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZmlsdGVyLWNyaXRlcml1bS5jb21wb25lbnQubGVzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckNyaXRlcml1bUNvbXBvbmVudCBleHRlbmRzIEJpbXBsdXNMb2NhbGl6ZWRXaWRnZXRDb21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvciAodHJhbnNsYXRlU2VydmljZTogIFRyYW5zbGF0ZVNlcnZpY2Upe1xyXG4gICAgc3VwZXIodHJhbnNsYXRlU2VydmljZSlcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gcHVibGljIGZpZWxkc1xyXG4gIEBJbnB1dCgpXHJcbiAgY3JpdGVyaXVtIDogRmlsdGVyQ3JpdGVyaXVtID0geyBuYW1lIDogXCJcIiwgc3ViU3RyaW5nOlwiXCJ9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWFyZ2luLWxlZnQuZW0nKSBASW5wdXQoKSBpbmRlbnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIEBPdXRwdXQoKSBkZWxldGVDcml0ZXJpdW0gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgLy8gI2VuZHJlZ2lvbiBwdWJsaWMgZmllbGRzXHJcblxyXG4gIC8vICNyZWdpb24gcHVibGljIG1ldGhvZHNcclxuICBjbGlja2VkRGVsZXRlKCl7XHJcbiAgICB0aGlzLmRlbGV0ZUNyaXRlcml1bS5lbWl0KCk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gcHVibGljIG1ldGhvZHNcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLWNyaXRlcml1bS1yb3dcIj5cclxuICBAaWYoY3JpdGVyaXVtLnZhbHVlIHx8IGNyaXRlcml1bS52YWx1ZSA9PT0gZmFsc2UgfHwgY3JpdGVyaXVtLnZhbHVlID09PSAwKXtcclxuICA8c3BhbiBjbGFzcz1cImZpbHRlci1jcml0ZXJpdW0taXRlbVwiXHJcbiAgICA+e3sgY3JpdGVyaXVtLm5hbWUgfX0gJm5ic3A7JiM0MDt7eyBjcml0ZXJpdW0udmFsdWUgfX0mIzQxOzwvc3BhblxyXG4gID5cclxuICB9QGVsc2UgaWYoY3JpdGVyaXVtLnZhbHVlID09PSBudWxsKXtcclxuICA8c3BhbiBjbGFzcz1cImZpbHRlci1jcml0ZXJpdW0taXRlbVwiXHJcbiAgICA+e3sgY3JpdGVyaXVtLm5hbWUgfX0gJm5ic3A7JiM0MDt7eyBcIl9Ob3RfZGVmaW5lZFwiIHwgdHJhbnNsYXRlIH19JiM0MTs8L3NwYW5cclxuICA+XHJcbiAgfUBlbHNlIGlmKGNyaXRlcml1bS52YWx1ZSA9PT0gXCJcIil7XHJcbiAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItY3JpdGVyaXVtLWl0ZW1cIlxyXG4gICAgPnt7IGNyaXRlcml1bS5uYW1lIH19ICZuYnNwOyYjNDA7e3sgXCJfRW1wdHlfdmFsdWVcIiB8IHRyYW5zbGF0ZSB9fSYjNDE7PC9zcGFuXHJcbiAgPlxyXG4gIH1AZWxzZXtcclxuICA8c3BhbiBjbGFzcz1cImZpbHRlci1jcml0ZXJpdW0taXRlbVwiPnt7IGNyaXRlcml1bS5uYW1lIH19PC9zcGFuPlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImZpbHRlci1jcml0ZXJpdW0taWNvbi1kZWxldGVcIlxyXG4gICAgKGNsaWNrKT1cImNsaWNrZWREZWxldGUoKVwiXHJcbiAgICAoa2V5cHJlc3MpPVwiY2xpY2tlZERlbGV0ZSgpXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FormatValuePipe {
4
+ transform(value) {
5
+ if (value === null || value === undefined) {
6
+ return '[null]';
7
+ }
8
+ else if (value === '') {
9
+ return '[empty]';
10
+ }
11
+ return value.toString(); // Return the value as a string
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
14
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: FormatValuePipe, isStandalone: true, name: "formatValue" }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatValuePipe, decorators: [{
17
+ type: Pipe,
18
+ args: [{
19
+ name: 'formatValue',
20
+ standalone: true
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXZhbHVlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYmltcGx1cy1jb21wb25lbnRzL3NyYy9saWIvcGlwZXMvZm9ybWF0LXZhbHVlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBQyxLQUFtRDtRQUMzRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQywrQkFBK0I7SUFDMUQsQ0FBQzsrR0FSVSxlQUFlOzZHQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBSjNCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGFBQWE7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnZm9ybWF0VmFsdWUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1hdFZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICdbbnVsbF0nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICdbZW1wdHldJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOyAvLyBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgc3RyaW5nXHJcbiAgfVxyXG59Il19
@@ -69,4 +69,4 @@ export class FilterString {
69
69
  };
70
70
  }
71
71
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyU3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpbXBsdXMtY29tcG9uZW50cy9zcmMvbGliL3V0aWxzL2ZpbHRlclN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLGtCQUFrQixHQUFHLDZCQUE2QixDQUFDO0FBRXpELE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQVksZUFBdUIsRUFBRSxFQUFFLG9CQUE0QixDQUFDO1FBUzVELGtCQUFhLEdBQVksRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFZLENBQUMsQ0FBQztRQVR0QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBS0Qsa0JBQWtCLENBQUMsUUFBNEI7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7UUFFaEQsS0FBSSxNQUFNLFNBQVMsSUFBSSxRQUFRLEVBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxJQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsbUNBQW1DLENBQUMsUUFBNEI7UUFDOUQsTUFBTSxjQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUNsRCxLQUFJLE1BQU0sU0FBUyxJQUFJLFFBQVEsRUFBQyxDQUFDO1lBQy9CLElBQUcsU0FBUyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFDL0IsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsaUJBQW9ELFNBQVM7UUFDNUUsTUFBTSxRQUFRLEdBQXVCLEVBQUUsQ0FBQztRQUV4QyxJQUFJLDJCQUEyQixHQUFHLEtBQUssQ0FBQztRQUV4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxLQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBQyxDQUFDO1lBQ3ZCLElBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUMsQ0FBQztnQkFDcEIsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFDLENBQUM7Z0JBQ3BFLDJCQUEyQixHQUFHLElBQUksQ0FBQztnQkFDbkMsU0FBUztZQUNYLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLGlCQUFvRCxTQUFTO1FBQzVHLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUNyQixJQUFJLEVBQUUsR0FBd0IsU0FBUyxDQUFDO1FBRXhDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEQsSUFBRyxpQkFBaUIsSUFBSSxDQUFDLElBQUksa0JBQWtCLElBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLGlCQUFpQixFQUFDLENBQUM7WUFDN0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM1RSxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ2hCLElBQUcsVUFBVSxJQUFJLGNBQWMsRUFBQyxDQUFDO2dCQUMvQixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUcsY0FBYyxFQUFDLENBQUM7b0JBQ2pCLElBQUksR0FBRyxjQUFjLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFLLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUcsS0FBSyxHQUFDLFNBQVM7WUFDM0IsRUFBRSxFQUFHLEVBQUU7U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyQ3JpdGVyaXVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYmltcGx1cy1vYmplY3QtbmF2aWdhdG9yL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci5pbnRlcmZhY2VcIjtcclxuXHJcbmNvbnN0IERpdnNpb25JRFN1YnN0cmluZyA9ICd0YWJBdHRyaWJFbGVtZW50LkRpdmlzaW9uSUQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbHRlclN0cmluZyB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZpbHRlclN0cmluZzogc3RyaW5nID0gXCJcIiwgbWF4RmlsdGVyQ3JpdGVyaWE6IG51bWJlciA9IDUpe1xyXG4gICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gZmlsdGVyU3RyaW5nO1xyXG4gICAgdGhpcy5fbWF4RmlsdGVyQ3JpdGVyaWEgPSBtYXhGaWx0ZXJDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIGdldCBmaWx0ZXJTdHJpbmcoKXtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJTdHJpbmcgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHByaXZhdGUgX21heEZpbHRlckNyaXRlcmlhIDogbnVtYmVyID0gNTtcclxuXHJcbiAgZnJvbUZpbHRlckNyaXRlcmlhKGNyaXRlcmlhIDogRmlsdGVyQ3JpdGVyaXVtW10pe1xyXG4gICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gYFtJXSR7RGl2c2lvbklEU3Vic3RyaW5nfWA7XHJcbiAgICBcclxuICAgIGZvcihjb25zdCBjcml0ZXJpdW0gb2YgY3JpdGVyaWEpe1xyXG4gICAgICB0aGlzLl9maWx0ZXJTdHJpbmcrPWNyaXRlcml1bS5zdWJTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclN0cmluZztcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVmFsdWVzRnJvbUZpbHRlckNyaXRlcmlhKGNyaXRlcmlhIDogRmlsdGVyQ3JpdGVyaXVtW10pIDogUmVjb3JkPHN0cmluZyxzdHJpbmc+e1xyXG4gICAgY29uc3QgcmVhZGFibGVWYWx1ZXMgOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz4gPSB7fTtcclxuICAgIGZvcihjb25zdCBjcml0ZXJpdW0gb2YgY3JpdGVyaWEpe1xyXG4gICAgICBpZihjcml0ZXJpdW0uaWQgJiYgY3JpdGVyaXVtLm5hbWUpXHJcbiAgICAgICAgcmVhZGFibGVWYWx1ZXNbY3JpdGVyaXVtLmlkXSA9IGNyaXRlcml1bS5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZWFkYWJsZVZhbHVlcztcclxuICB9XHJcblxyXG4gIHRvRmlsdGVyQ3JpdGVyaWEocmVhZGFibGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IEZpbHRlckNyaXRlcml1bVtde1xyXG4gICAgY29uc3QgY3JpdGVyaWEgOiBGaWx0ZXJDcml0ZXJpdW1bXSA9IFtdO1xyXG5cclxuICAgIGxldCBmaXJzdE1vZGVsSWRDcml0ZXJpYVNraXBwZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMuX2ZpbHRlclN0cmluZy5zcGxpdCgnW0ldJyk7XHJcbiAgICBmb3IoY29uc3QgcGFydCBvZiBwYXJ0cyl7XHJcbiAgICAgIGlmKHBhcnQubGVuZ3RoID09PSAwKXtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYocGFydC5pbmNsdWRlcyhEaXZzaW9uSURTdWJzdHJpbmcpICYmICFmaXJzdE1vZGVsSWRDcml0ZXJpYVNraXBwZWQpe1xyXG4gICAgICAgIGZpcnN0TW9kZWxJZENyaXRlcmlhU2tpcHBlZCA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNyaXRlcmlhLnB1c2godGhpcy5fcGFyc2VGaWx0ZXJTdWJzdHJpbmcocGFydCwgcmVhZGFibGVWYWx1ZXMpKTtcclxuICAgICAgaWYoY3JpdGVyaWEubGVuZ3RoID09PSB0aGlzLl9tYXhGaWx0ZXJDcml0ZXJpYSl7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYXJzZUZpbHRlclN1YnN0cmluZyhzdWJTdHJpbmc6IHN0cmluZywgcmVhZGFibGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IEZpbHRlckNyaXRlcml1bXtcclxuICAgIGxldCBuYW1lID0gc3ViU3RyaW5nO1xyXG4gICAgbGV0IGlkIDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IGluZGV4T3BlbkJyYWNrZXRzID0gc3ViU3RyaW5nLmluZGV4T2YoJ1snKTtcclxuICAgIGNvbnN0IGluZGV4Q2xvc2VCcmFja2V0cyA9IHN1YlN0cmluZy5pbmRleE9mKCddJyk7XHJcblxyXG4gICAgaWYoaW5kZXhPcGVuQnJhY2tldHMgPj0gMCAmJiBpbmRleENsb3NlQnJhY2tldHMgPj0wICYmIGluZGV4Q2xvc2VCcmFja2V0cyA+IGluZGV4T3BlbkJyYWNrZXRzKXtcclxuICAgICAgY29uc3QgcmVhZGFibGVJZCA9IHN1YlN0cmluZy5zbGljZShpbmRleE9wZW5CcmFja2V0cysxLCBpbmRleENsb3NlQnJhY2tldHMpO1xyXG4gICAgICBpZCA9IHJlYWRhYmxlSWQ7XHJcbiAgICAgIGlmKHJlYWRhYmxlSWQgJiYgcmVhZGFibGVWYWx1ZXMpe1xyXG4gICAgICAgIGNvbnN0IHJlYWRhYmxlU3RyaW5nID0gcmVhZGFibGVWYWx1ZXNbcmVhZGFibGVJZF07XHJcbiAgICAgICAgaWYocmVhZGFibGVTdHJpbmcpe1xyXG4gICAgICAgICAgbmFtZSA9IHJlYWRhYmxlU3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAgICAgIFxyXG4gICAgfWVsc2UgaWYoc3ViU3RyaW5nLmluY2x1ZGVzKCcuJykpe1xyXG4gICAgICBjb25zdCBzcGxpdHRlZCA9IHN1YlN0cmluZy5zcGxpdCgnLicpO1xyXG4gICAgICBuYW1lID0gc3BsaXR0ZWRbc3BsaXR0ZWQubGVuZ3RoLTFdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgIHN1YlN0cmluZyA6IFwiW0ldXCIrc3ViU3RyaW5nLFxyXG4gICAgICBpZCA6IGlkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyU3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpbXBsdXMtY29tcG9uZW50cy9zcmMvbGliL3V0aWxzL2ZpbHRlclN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLGtCQUFrQixHQUFHLDZCQUE2QixDQUFDO0FBRXpELE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQVksZUFBdUIsRUFBRSxFQUFFLG9CQUE0QixDQUFDO1FBUzVELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQVRyQyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBS0Qsa0JBQWtCLENBQUMsUUFBMkI7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7UUFFaEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsbUNBQW1DLENBQUMsUUFBMkI7UUFDN0QsTUFBTSxjQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUNsRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFDaEMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsaUJBQXFELFNBQVM7UUFDN0UsTUFBTSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLDJCQUEyQixHQUFHLEtBQUssQ0FBQztRQUV4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQ3RFLDJCQUEyQixHQUFHLElBQUksQ0FBQztnQkFDbkMsU0FBUztZQUNYLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2hELE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLGlCQUFxRCxTQUFTO1FBQzdHLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUNyQixJQUFJLEVBQUUsR0FBdUIsU0FBUyxDQUFDO1FBRXZDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEQsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLElBQUksa0JBQWtCLElBQUksQ0FBQyxJQUFJLGtCQUFrQixHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDaEcsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM5RSxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ2hCLElBQUksVUFBVSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksR0FBRyxjQUFjLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsS0FBSyxHQUFHLFNBQVM7WUFDNUIsRUFBRSxFQUFFLEVBQUU7U0FDUCxDQUFBO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyQ3JpdGVyaXVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYmltcGx1cy1vYmplY3QtbmF2aWdhdG9yL2JpbXBsdXMtb2JqZWN0LW5hdmlnYXRvci5pbnRlcmZhY2VcIjtcclxuXHJcbmNvbnN0IERpdnNpb25JRFN1YnN0cmluZyA9ICd0YWJBdHRyaWJFbGVtZW50LkRpdmlzaW9uSUQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbHRlclN0cmluZyB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGZpbHRlclN0cmluZzogc3RyaW5nID0gXCJcIiwgbWF4RmlsdGVyQ3JpdGVyaWE6IG51bWJlciA9IDUpIHtcclxuICAgIHRoaXMuX2ZpbHRlclN0cmluZyA9IGZpbHRlclN0cmluZztcclxuICAgIHRoaXMuX21heEZpbHRlckNyaXRlcmlhID0gbWF4RmlsdGVyQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclN0cmluZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlclN0cmluZzogc3RyaW5nID0gXCJcIjtcclxuICBwcml2YXRlIF9tYXhGaWx0ZXJDcml0ZXJpYTogbnVtYmVyID0gNTtcclxuXHJcbiAgZnJvbUZpbHRlckNyaXRlcmlhKGNyaXRlcmlhOiBGaWx0ZXJDcml0ZXJpdW1bXSkge1xyXG4gICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gYFtJXSR7RGl2c2lvbklEU3Vic3RyaW5nfWA7XHJcblxyXG4gICAgZm9yIChjb25zdCBjcml0ZXJpdW0gb2YgY3JpdGVyaWEpIHtcclxuICAgICAgdGhpcy5fZmlsdGVyU3RyaW5nICs9IGNyaXRlcml1bS5zdWJTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclN0cmluZztcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVmFsdWVzRnJvbUZpbHRlckNyaXRlcmlhKGNyaXRlcmlhOiBGaWx0ZXJDcml0ZXJpdW1bXSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgY29uc3QgcmVhZGFibGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgY3JpdGVyaXVtIG9mIGNyaXRlcmlhKSB7XHJcbiAgICAgIGlmIChjcml0ZXJpdW0uaWQgJiYgY3JpdGVyaXVtLm5hbWUpXHJcbiAgICAgICAgcmVhZGFibGVWYWx1ZXNbY3JpdGVyaXVtLmlkXSA9IGNyaXRlcml1bS5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZWFkYWJsZVZhbHVlcztcclxuICB9XHJcblxyXG4gIHRvRmlsdGVyQ3JpdGVyaWEocmVhZGFibGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBGaWx0ZXJDcml0ZXJpdW1bXSB7XHJcbiAgICBjb25zdCBjcml0ZXJpYTogRmlsdGVyQ3JpdGVyaXVtW10gPSBbXTtcclxuXHJcbiAgICBsZXQgZmlyc3RNb2RlbElkQ3JpdGVyaWFTa2lwcGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLl9maWx0ZXJTdHJpbmcuc3BsaXQoJ1tJXScpO1xyXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFydC5pbmNsdWRlcyhEaXZzaW9uSURTdWJzdHJpbmcpICYmICFmaXJzdE1vZGVsSWRDcml0ZXJpYVNraXBwZWQpIHtcclxuICAgICAgICBmaXJzdE1vZGVsSWRDcml0ZXJpYVNraXBwZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjcml0ZXJpYS5wdXNoKHRoaXMuX3BhcnNlRmlsdGVyU3Vic3RyaW5nKHBhcnQsIHJlYWRhYmxlVmFsdWVzKSk7XHJcbiAgICAgIGlmIChjcml0ZXJpYS5sZW5ndGggPT09IHRoaXMuX21heEZpbHRlckNyaXRlcmlhKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYXJzZUZpbHRlclN1YnN0cmluZyhzdWJTdHJpbmc6IHN0cmluZywgcmVhZGFibGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBGaWx0ZXJDcml0ZXJpdW0ge1xyXG4gICAgbGV0IG5hbWUgPSBzdWJTdHJpbmc7XHJcbiAgICBsZXQgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBpbmRleE9wZW5CcmFja2V0cyA9IHN1YlN0cmluZy5pbmRleE9mKCdbJyk7XHJcbiAgICBjb25zdCBpbmRleENsb3NlQnJhY2tldHMgPSBzdWJTdHJpbmcuaW5kZXhPZignXScpO1xyXG5cclxuICAgIGlmIChpbmRleE9wZW5CcmFja2V0cyA+PSAwICYmIGluZGV4Q2xvc2VCcmFja2V0cyA+PSAwICYmIGluZGV4Q2xvc2VCcmFja2V0cyA+IGluZGV4T3BlbkJyYWNrZXRzKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRhYmxlSWQgPSBzdWJTdHJpbmcuc2xpY2UoaW5kZXhPcGVuQnJhY2tldHMgKyAxLCBpbmRleENsb3NlQnJhY2tldHMpO1xyXG4gICAgICBpZCA9IHJlYWRhYmxlSWQ7XHJcbiAgICAgIGlmIChyZWFkYWJsZUlkICYmIHJlYWRhYmxlVmFsdWVzKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGFibGVTdHJpbmcgPSByZWFkYWJsZVZhbHVlc1tyZWFkYWJsZUlkXTtcclxuICAgICAgICBpZiAocmVhZGFibGVTdHJpbmcpIHtcclxuICAgICAgICAgIG5hbWUgPSByZWFkYWJsZVN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc3ViU3RyaW5nLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc3BsaXR0ZWQgPSBzdWJTdHJpbmcuc3BsaXQoJy4nKTtcclxuICAgICAgbmFtZSA9IHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgIHN1YlN0cmluZzogXCJbSV1cIiArIHN1YlN0cmluZyxcclxuICAgICAgaWQ6IGlkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=