@valtimo/components 5.13.0 → 5.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,38 +14,80 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Component, EventEmitter, Input, Output } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, take } from 'rxjs';
17
+ import { BehaviorSubject, map, Subject, take } from 'rxjs';
18
18
  import * as i0 from "@angular/core";
19
- import * as i1 from "../spinner/spinner.component";
20
- import * as i2 from "../widget/widget.component";
21
- import * as i3 from "@valtimo/user-interface";
22
- import * as i4 from "@angular/common";
23
- import * as i5 from "@ngx-translate/core";
19
+ import * as i1 from "@ngx-translate/core";
20
+ import * as i2 from "../spinner/spinner.component";
21
+ import * as i3 from "../widget/widget.component";
22
+ import * as i4 from "@valtimo/user-interface";
23
+ import * as i5 from "@angular/common";
24
24
  export class SearchFieldsComponent {
25
- constructor() {
25
+ constructor(translateService) {
26
+ this.translateService = translateService;
27
+ this.doSearch = new EventEmitter();
28
+ this.documentDefinitionName$ = new BehaviorSubject('');
26
29
  this.searchFields$ = new BehaviorSubject([]);
27
30
  this.values$ = new BehaviorSubject({});
28
- this.valueChange = new EventEmitter();
29
- this.doSearch = new EventEmitter();
31
+ this.hasValidValues$ = this.values$.pipe(map(values => {
32
+ const hasValues = (Object.keys(values) || []).length > 0;
33
+ const rangeValues = (hasValues && Object.values(values)?.filter(value => value.start)) || [];
34
+ const validRangeValues = rangeValues?.filter(value => value.start < value.end);
35
+ return !!(hasValues && rangeValues.length === validRangeValues.length);
36
+ }));
30
37
  this.expanded$ = new BehaviorSubject(false);
38
+ this.clear$ = new Subject();
39
+ this.BOOLEAN_POSITIVE = 'booleanPositive';
40
+ this.BOOLEAN_NEGATIVE = 'booleanNegative';
41
+ this.BOOLEANTYPES = [this.BOOLEAN_POSITIVE, this.BOOLEAN_NEGATIVE];
42
+ this.booleanItems$ = this.translateService.stream('key').pipe(map(() => this.BOOLEANTYPES.map(type => ({
43
+ id: type,
44
+ text: this.translateService.instant(`searchFields.${type}`),
45
+ }))));
31
46
  }
32
47
  set searchFields(fields) {
33
48
  this.searchFields$.next(fields);
34
49
  }
50
+ set documentDefinitionName(documentDefinitionName) {
51
+ this.documentDefinitionName$.pipe(take(1)).subscribe(currentDocumentDefinitionName => {
52
+ if (currentDocumentDefinitionName !== documentDefinitionName) {
53
+ this.documentDefinitionName$.next(documentDefinitionName);
54
+ }
55
+ });
56
+ }
35
57
  ngOnInit() {
36
- this.openValuesSubscription();
58
+ this.openDocumentDefinitionNameSubscription();
37
59
  }
38
60
  ngOnDestroy() {
39
- this.valuesSubscription?.unsubscribe();
61
+ this.documentDefinitionNameSubscription?.unsubscribe();
40
62
  }
41
- singleValueChange(searchFieldKey, value) {
63
+ singleValueChange(searchFieldKey, value, isDateTime) {
42
64
  this.values$.pipe(take(1)).subscribe(values => {
43
- this.values$.next({ ...values, [searchFieldKey]: value });
65
+ if (value) {
66
+ this.values$.next({ ...values, [searchFieldKey]: this.getSingleValue(value, isDateTime) });
67
+ }
68
+ else if (Object.keys(values).includes(searchFieldKey)) {
69
+ const valuesCopy = { ...values };
70
+ delete valuesCopy[searchFieldKey];
71
+ this.values$.next(valuesCopy);
72
+ }
44
73
  });
45
74
  }
46
- multipleValueChange(searchFieldKey, value) {
75
+ multipleValueChange(searchFieldKey, value, isDateTime) {
47
76
  this.values$.pipe(take(1)).subscribe(values => {
48
- this.values$.next({ ...values, [searchFieldKey]: { start: value.start, end: value.end } });
77
+ if (value.start && value.end) {
78
+ this.values$.next({
79
+ ...values,
80
+ [searchFieldKey]: {
81
+ start: this.getSingleValue(value.start, isDateTime),
82
+ end: this.getSingleValue(value.end, isDateTime),
83
+ },
84
+ });
85
+ }
86
+ else if (values[searchFieldKey]) {
87
+ const valuesCopy = { ...values };
88
+ delete valuesCopy[searchFieldKey];
89
+ this.values$.next(valuesCopy);
90
+ }
49
91
  });
50
92
  }
51
93
  toggleExpanded() {
@@ -54,35 +96,48 @@ export class SearchFieldsComponent {
54
96
  });
55
97
  }
56
98
  search() {
57
- this.doSearch.emit();
99
+ this.values$.pipe(take(1)).subscribe(values => {
100
+ this.doSearch.emit(values);
101
+ });
58
102
  }
59
- openValuesSubscription() {
60
- this.valuesSubscription = combineLatest([this.searchFields$, this.values$]).subscribe(([searchFields, values]) => {
61
- const valuesKeys = Object.keys(values);
62
- const searchFieldsCopy = [...(searchFields || [])];
63
- valuesKeys.forEach(valueKey => {
64
- const correspondingSearchFieldIndex = searchFieldsCopy.findIndex(searchField => searchField.key === valueKey);
65
- if (correspondingSearchFieldIndex !== -1) {
66
- searchFieldsCopy[correspondingSearchFieldIndex].value = values[valueKey];
67
- }
68
- });
69
- console.log(searchFieldsCopy);
70
- this.valueChange.emit(searchFieldsCopy);
103
+ clear() {
104
+ this.clear$.next(null);
105
+ this.doSearch.emit({});
106
+ }
107
+ getSingleValue(value, isDateTime) {
108
+ if (isDateTime) {
109
+ return new Date(value).toISOString();
110
+ }
111
+ if (value === this.BOOLEAN_POSITIVE) {
112
+ return true;
113
+ }
114
+ if (value === this.BOOLEAN_NEGATIVE) {
115
+ return false;
116
+ }
117
+ return value;
118
+ }
119
+ openDocumentDefinitionNameSubscription() {
120
+ this.documentDefinitionNameSubscription = this.documentDefinitionName$.subscribe(() => {
121
+ this.collapse();
122
+ this.clear();
71
123
  });
72
124
  }
125
+ collapse() {
126
+ this.expanded$.next(false);
127
+ }
73
128
  }
74
- SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
75
- SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields" }, outputs: { valueChange: "valueChange", doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div class=\"row p-3\" [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\">\n <ng-container *ngFor=\"let searchField of searchFields$ | async; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'text' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-date-picker\n *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'single'\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"search()\"\n [disabled]=\"loading\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >{{ 'searchFields.clearButtonText' | translate }}</button\n >\n <button\n (click)=\"search()\"\n [disabled]=\"loading\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >{{ 'searchFields.searchButtonText' | translate }}</button\n >\n </div>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{ expanded: expanded$ | async } as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded\n ? 'mdi mdi-chevron-right accordion-button--active'\n : 'mdi mdi-chevron-down'\n \"\n >\n {{ \"searchFields.searchButtonText\" | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#F8F9F9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#F1F1F1}\n"], components: [{ type: i1.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { type: i2.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i3.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel"], outputs: ["valueChange"] }, { type: i3.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel"], outputs: ["valueChange"] }, { type: i3.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { type: i3.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { type: i3.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4.AsyncPipe, "translate": i5.TranslatePipe } });
129
+ SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
130
+ SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" [clear$]=\"clear$\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" [clear$]=\"clear$\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\" [clear$]=\"clear$\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\" [clear$]=\"clear$\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], components: [{ type: i2.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { type: i3.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i4.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "clear$"], outputs: ["valueChange"] }, { type: i4.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { type: i4.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { type: i4.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { type: i4.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { type: i4.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i5.AsyncPipe, "translate": i1.TranslatePipe } });
76
131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsComponent, decorators: [{
77
132
  type: Component,
78
- args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div class=\"row p-3\" [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\">\n <ng-container *ngFor=\"let searchField of searchFields$ | async; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'text' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-date-picker\n *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'single'\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"search()\"\n [disabled]=\"loading\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >{{ 'searchFields.clearButtonText' | translate }}</button\n >\n <button\n (click)=\"search()\"\n [disabled]=\"loading\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >{{ 'searchFields.searchButtonText' | translate }}</button\n >\n </div>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{ expanded: expanded$ | async } as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded\n ? 'mdi mdi-chevron-right accordion-button--active'\n : 'mdi mdi-chevron-down'\n \"\n >\n {{ \"searchFields.searchButtonText\" | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#F8F9F9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#F1F1F1}\n"] }]
79
- }], propDecorators: { loading: [{
133
+ args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" [clear$]=\"clear$\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" [clear$]=\"clear$\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\" [clear$]=\"clear$\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\" [clear$]=\"clear$\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
134
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { loading: [{
80
135
  type: Input
81
136
  }], searchFields: [{
82
137
  type: Input
83
- }], valueChange: [{
84
- type: Output
138
+ }], documentDefinitionName: [{
139
+ type: Input
85
140
  }], doSearch: [{
86
141
  type: Output
87
142
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFnQixJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFPeEUsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1XLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0MsRUFBRSxDQUFDLENBQUM7UUFNcEUsZ0JBQVcsR0FBOEMsSUFBSSxZQUFZLEVBRWhGLENBQUM7UUFDTSxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdkQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBd0QxRDtJQWhFQyxJQUFhLFlBQVksQ0FBQyxNQUEwQjtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBVUQsUUFBUTtRQUNOLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFzQixFQUFFLEtBQVU7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLGNBQXNCLEVBQUUsS0FBVTtRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNuRixDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBZ0MsQ0FBQztZQUVsRixVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLDZCQUE2QixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FDOUQsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FDNUMsQ0FBQztnQkFFRixJQUFJLDZCQUE2QixLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN4QyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7O21IQXJFVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiwwTEN6QmxDLHczUEErT0E7NEZEdE5hLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSx1QkFBdUI7OEJBU3hCLE9BQU87c0JBQWYsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U2VhcmNoRmllbGQsIFNlYXJjaEZpZWxkVmFsdWUsIFNlYXJjaEZpZWxkV2l0aFZhbHVlfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiwgdGFrZX0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFNlYXJjaEZpZWxkPj4oW10pO1xuXG4gIHJlYWRvbmx5IHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtba2V5OiBzdHJpbmddOiBTZWFyY2hGaWVsZFZhbHVlfT4oe30pO1xuXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBzZWFyY2hGaWVsZHMoZmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQubmV4dChmaWVsZHMpO1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkV2l0aFZhbHVlPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIEFycmF5PFNlYXJjaEZpZWxkV2l0aFZhbHVlPlxuICA+KCk7XG4gIEBPdXRwdXQoKSBkb1NlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICByZWFkb25seSBleHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHZhbHVlc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQoey4uLnZhbHVlcywgW3NlYXJjaEZpZWxkS2V5XTogdmFsdWV9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQoey4uLnZhbHVlcywgW3NlYXJjaEZpZWxkS2V5XToge3N0YXJ0OiB2YWx1ZS5zdGFydCwgZW5kOiB2YWx1ZS5lbmR9fSk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVFeHBhbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShleHBhbmRlZCA9PiB7XG4gICAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KCFleHBhbmRlZCk7XG4gICAgfSk7XG4gIH1cblxuICBzZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5kb1NlYXJjaC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXNTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlYXJjaEZpZWxkcyQsIHRoaXMudmFsdWVzJF0pLnN1YnNjcmliZShcbiAgICAgIChbc2VhcmNoRmllbGRzLCB2YWx1ZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0tleXMgPSBPYmplY3Qua2V5cyh2YWx1ZXMpO1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHNDb3B5ID0gWy4uLihzZWFyY2hGaWVsZHMgfHwgW10pXSBhcyBBcnJheTxTZWFyY2hGaWVsZFdpdGhWYWx1ZT47XG5cbiAgICAgICAgdmFsdWVzS2V5cy5mb3JFYWNoKHZhbHVlS2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjb3JyZXNwb25kaW5nU2VhcmNoRmllbGRJbmRleCA9IHNlYXJjaEZpZWxkc0NvcHkuZmluZEluZGV4KFxuICAgICAgICAgICAgc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQua2V5ID09PSB2YWx1ZUtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY29ycmVzcG9uZGluZ1NlYXJjaEZpZWxkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWVsZHNDb3B5W2NvcnJlc3BvbmRpbmdTZWFyY2hGaWVsZEluZGV4XS52YWx1ZSA9IHZhbHVlc1t2YWx1ZUtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZyhzZWFyY2hGaWVsZHNDb3B5KTtcblxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoc2VhcmNoRmllbGRzQ29weSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwic2VhcmNoIGZpZWxkc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZHNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgPHZhbHRpbW8tc3Bpbm5lcj48L3ZhbHRpbW8tc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLXdpZGdldD5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25BY2NvcmRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgcC0zXCIgW25nQ2xhc3NdPVwieydyb3ctLWhpZGRlbic6IChleHBhbmRlZCQgfCBhc3luYykgPT09IGZhbHNlfVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VhcmNoRmllbGQgb2Ygc2VhcmNoRmllbGRzJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRUZW1wbGF0ZTsgY29udGV4dDoge3NlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiKGkgKyAxKSAlIDMgPT09IDBcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC92YWx0aW1vLXdpZGdldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRUZW1wbGF0ZSBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICB0b29sdGlwS2V5OiAnc2VhcmNoRmllbGRzVG9vbHRpcHMuJyArIHNlYXJjaEZpZWxkLmtleSxcbiAgICAgIHRvb2x0aXA6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlXG4gICAgfSBhcyB2YXJzXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0O1xuICAgICAgICBjb250ZXh0OiB7c2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLCB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksIHRvb2x0aXA6IHZhcnMudG9vbHRpcH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXI7XG4gICAgICAgIGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSwgdG9vbHRpcDogdmFycy50b29sdGlwfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGU7XG4gICAgICAgIGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSwgdG9vbHRpcDogdmFycy50b29sdGlwfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7c2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLCB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksIHRvb2x0aXA6IHZhcnMudG9vbHRpcH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSwgdG9vbHRpcDogdmFycy50b29sdGlwfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhdHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkdHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICA+XG4gIDwvdi1pbnB1dD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhdHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGR0eXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICA+XG4gIDwvdi1pbnB1dD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuPlxuICA8di1kYXRlLXBpY2tlclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YXR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZHR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gID48L3YtZGF0ZS1waWNrZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhdHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGR0eXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dCBuYW1lPVwic3RhcnRcIiBbZnVsbFdpZHRoXT1cInRydWVcIiB0eXBlPVwibnVtYmVyXCIgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIj4gPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXQgbmFtZT1cImVuZFwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHR5cGU9XCJudW1iZXJcIiBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiPiA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGF0eXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGR0eXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1kYXRlLXBpY2tlciBuYW1lPVwic3RhcnRcIiBmdWxsV2lkdGg9XCJ0cnVlXCI+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXIgbmFtZT1cImVuZFwiIGZ1bGxXaWR0aD1cInRydWVcIj48L3YtZGF0ZS1waWNrZXI+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0b1RleHQ+XG4gIDxkaXYgY2xhc3M9XCJ0by10ZXh0XCI+XG4gICAgPHYtcGFyYWdyYXBoPnt7ICdzZWFyY2hGaWVsZHMudG8nIHwgdHJhbnNsYXRlIH19PC92LXBhcmFncmFwaD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCIgKm5nSWY9XCJ7ZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXNlY29uZGFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgICAgPnt7ICdzZWFyY2hGaWVsZHMuY2xlYXJCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uXG4gICAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tcHJpbWFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgICAgPnt7ICdzZWFyY2hGaWVsZHMuc2VhcmNoQnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvblxuICAgICAgPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uQWNjb3JkaW9uPlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cInsgZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jIH0gYXMgb2JzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFjY29yZGlvbi1idXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgIG9icy5leHBhbmRlZFxuICAgICAgICAgID8gJ21kaSBtZGktY2hldnJvbi1yaWdodCBhY2NvcmRpb24tYnV0dG9uLS1hY3RpdmUnXG4gICAgICAgICAgOiAnbWRpIG1kaS1jaGV2cm9uLWRvd24nXG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IFwic2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBZ0IsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBU25GLE1BQU0sT0FBTyxxQkFBcUI7SUFtRGhDLFlBQTZCLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBdkNyRCxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRW5GLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FB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K0JBQ0UsdUJBQXVCO3VHQUt4QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ08sWUFBWTtzQkFBeEIsS0FBSztnQkFHTyxzQkFBc0I7c0JBQWxDLEtBQUs7Z0JBT0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U2VhcmNoRmllbGQsIFNlYXJjaEZpZWxkQm9vbGVhbiwgU2VhcmNoRmllbGRWYWx1ZXN9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTZWxlY3RJdGVtfSBmcm9tICdAdmFsdGltby91c2VyLWludGVyZmFjZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZXQgc2VhcmNoRmllbGRzKGZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLm5leHQoZmllbGRzKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIGlmIChjdXJyZW50RG9jdW1lbnREZWZpbml0aW9uTmFtZSAhPT0gZG9jdW1lbnREZWZpbml0aW9uTmFtZSkge1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLm5leHQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgQE91dHB1dCgpIGRvU2VhcmNoOiBFdmVudEVtaXR0ZXI8U2VhcmNoRmllbGRWYWx1ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZFZhbHVlcz4oKTtcblxuICByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgcmVhZG9ubHkgc2VhcmNoRmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8U2VhcmNoRmllbGQ+PihbXSk7XG5cbiAgcmVhZG9ubHkgdmFsdWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGRWYWx1ZXM+KHt9KTtcblxuICByZWFkb25seSBoYXNWYWxpZFZhbHVlcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAodmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGhhc1ZhbHVlcyA9IChPYmplY3Qua2V5cyh2YWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgcmFuZ2VWYWx1ZXMgPVxuICAgICAgICAoaGFzVmFsdWVzICYmIE9iamVjdC52YWx1ZXModmFsdWVzKT8uZmlsdGVyKHZhbHVlID0+ICh2YWx1ZSBhcyBhbnkpLnN0YXJ0KSkgfHwgW107XG4gICAgICBjb25zdCB2YWxpZFJhbmdlVmFsdWVzID0gcmFuZ2VWYWx1ZXM/LmZpbHRlcihcbiAgICAgICAgdmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQgPCAodmFsdWUgYXMgYW55KS5lbmRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiAhIShoYXNWYWx1ZXMgJiYgcmFuZ2VWYWx1ZXMubGVuZ3RoID09PSB2YWxpZFJhbmdlVmFsdWVzLmxlbmd0aCk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBleHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xlYXIkID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcblxuICBwcml2YXRlIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX1BPU0lUSVZFOiBTZWFyY2hGaWVsZEJvb2xlYW4gPSAnYm9vbGVhblBvc2l0aXZlJztcbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX05FR0FUSVZFOiBTZWFyY2hGaWVsZEJvb2xlYW4gPSAnYm9vbGVhbk5lZ2F0aXZlJztcblxuICByZWFkb25seSBCT09MRUFOVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkQm9vbGVhbj4gPSBbdGhpcy5CT09MRUFOX1BPU0lUSVZFLCB0aGlzLkJPT0xFQU5fTkVHQVRJVkVdO1xuICByZWFkb25seSBib29sZWFuSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgbWFwKCgpID0+XG4gICAgICB0aGlzLkJPT0xFQU5UWVBFUy5tYXAodHlwZSA9PiAoe1xuICAgICAgICBpZDogdHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3R5cGV9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoey4uLnZhbHVlcywgW3NlYXJjaEZpZWxkS2V5XTogdGhpcy5nZXRTaW5nbGVWYWx1ZSh2YWx1ZSwgaXNEYXRlVGltZSl9KTtcbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXModmFsdWVzKS5pbmNsdWRlcyhzZWFyY2hGaWVsZEtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgaWYgKHZhbHVlLnN0YXJ0ICYmIHZhbHVlLmVuZCkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7XG4gICAgICAgICAgLi4udmFsdWVzLFxuICAgICAgICAgIFtzZWFyY2hGaWVsZEtleV06IHtcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLnN0YXJ0LCBpc0RhdGVUaW1lKSxcbiAgICAgICAgICAgIGVuZDogdGhpcy5nZXRTaW5nbGVWYWx1ZSh2YWx1ZS5lbmQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZXNbc2VhcmNoRmllbGRLZXldKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0NvcHkgPSB7Li4udmFsdWVzfTtcbiAgICAgICAgZGVsZXRlIHZhbHVlc0NvcHlbc2VhcmNoRmllbGRLZXldO1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXNDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGV4cGFuZGVkID0+IHtcbiAgICAgIHRoaXMuZXhwYW5kZWQkLm5leHQoIWV4cGFuZGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIHRoaXMuZG9TZWFyY2guZW1pdCh2YWx1ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhciQubmV4dChudWxsKTtcbiAgICB0aGlzLmRvU2VhcmNoLmVtaXQoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVWYWx1ZSh2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGlzRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fUE9TSVRJVkUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9ORUdBVElWRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwic2VhcmNoIGZpZWxkc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZHNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgPHZhbHRpbW8tc3Bpbm5lcj48L3ZhbHRpbW8tc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLXdpZGdldD5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25BY2NvcmRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm93IHAtM1wiXG4gICAgICBbbmdDbGFzc109XCJ7J3Jvdy0taGlkZGVuJzogKGV4cGFuZGVkJCB8IGFzeW5jKSA9PT0gZmFsc2V9XCJcbiAgICAgICpuZ0lmPVwic2VhcmNoRmllbGRzJCB8IGFzeW5jIGFzIHNlYXJjaEZpZWxkc1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VhcmNoRmllbGQgb2Ygc2VhcmNoRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRUZW1wbGF0ZTsgY29udGV4dDoge3NlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiKGkgKyAxKSAlIDMgPT09IDBcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJ1dHRvbnNUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogIXNlYXJjaEZpZWxkcyB8fCBzZWFyY2hGaWVsZHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8td2lkZ2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZFRlbXBsYXRlIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntcbiAgICAgIHRvb2x0aXBLZXk6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5LFxuICAgICAgdG9vbHRpcDogJ3NlYXJjaEZpZWxkc1Rvb2x0aXBzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUsXG4gICAgICBzZWFyY2hGaWVsZCxcbiAgICAgIHRpdGxlOlxuICAgICAgICBzZWFyY2hGaWVsZC50aXRsZSB8fFxuICAgICAgICAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5ICE9PSAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgID8gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IHNlYXJjaEZpZWxkLmtleSlcbiAgICB9IGFzIHZhcnNcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVRleHQ7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZVxuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGVcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGU7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZVxuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlQm9vbGVhbjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0UmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZVxuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGVcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZVxuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVUZXh0XG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuPlxuICA8di1pbnB1dFxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICA+XG4gIDwvdi1pbnB1dD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4+XG4gIDx2LWRhdGUtcGlja2VyXG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgPjwvdi1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0IG5hbWU9XCJzdGFydFwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjbGVhciRdPVwiY2xlYXIkXCI+IDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0IG5hbWU9XCJlbmRcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2xlYXIkXT1cImNsZWFyJFwiPiA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXIgbmFtZT1cInN0YXJ0XCIgZnVsbFdpZHRoPVwidHJ1ZVwiIFtjbGVhciRdPVwiY2xlYXIkXCI+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXIgbmFtZT1cImVuZFwiIGZ1bGxXaWR0aD1cInRydWVcIiBbY2xlYXIkXT1cImNsZWFyJFwiPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVCb29sZWFuXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJib29sZWFuSXRlbXMkIHwgYXN5bmMgYXMgYm9vbGVhbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJib29sZWFuSXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgPjwvdi1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RvVGV4dD5cbiAgPGRpdiBjbGFzcz1cInRvLXRleHRcIj5cbiAgICA8di1wYXJhZ3JhcGg+e3sgJ3NlYXJjaEZpZWxkcy50bycgfCB0cmFuc2xhdGUgfX08L3YtcGFyYWdyYXBoPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vU2VhcmNoRmllbGRzVGVtcGxhdGU7IGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogbm9TZWFyY2hGaWVsZHN9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cIntleHBhbmRlZDogZXhwYW5kZWQkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1idXR0b25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHNcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1zZWNvbmRhcnlcIlxuICAgICAgICAqbmdJZj1cIm9icy5leHBhbmRlZFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHMuY2xlYXJCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IG5vU2VhcmNoRmllbGRzIHx8IChoYXNWYWxpZFZhbHVlcyQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tcHJpbWFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1NlYXJjaEZpZWxkc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0zXCIgKm5nSWY9XCJub1NlYXJjaEZpZWxkc1wiPlxuICAgIDx2LXBhcmFncmFwaCBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2VudGVyXT1cInRydWVcIj57e1xuICAgICAgJ3NlYXJjaEZpZWxkcy5ub25lQ29uZmlndXJlZCcgfCB0cmFuc2xhdGVcbiAgICB9fTwvdi1wYXJhZ3JhcGg+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25BY2NvcmRpb24+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie2V4cGFuZGVkOiBleHBhbmRlZCQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKClcIlxuICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgIG9icy5leHBhbmRlZCA/ICdtZGkgbWRpLWNoZXZyb24tcmlnaHQgYWNjb3JkaW9uLWJ1dHRvbi0tYWN0aXZlJyA6ICdtZGkgbWRpLWNoZXZyb24tZG93bidcbiAgICAgIFwiXG4gICAgPlxuICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -19,7 +19,7 @@ import { SearchFieldsComponent } from './search-fields.component';
19
19
  import { SpinnerModule } from '../spinner/spinner.module';
20
20
  import { WidgetModule } from '../widget/widget.module';
21
21
  import { TranslateModule } from '@ngx-translate/core';
22
- import { ButtonModule, DatePickerModule, FormModule, InputLabelModule, InputModule, ParagraphModule, } from '@valtimo/user-interface';
22
+ import { ButtonModule, DatePickerModule, FormModule, InputLabelModule, InputModule, ParagraphModule, SelectModule, } from '@valtimo/user-interface';
23
23
  import * as i0 from "@angular/core";
24
24
  export class SearchFieldsModule {
25
25
  }
@@ -33,7 +33,8 @@ SearchFieldsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", vers
33
33
  DatePickerModule,
34
34
  InputLabelModule,
35
35
  ParagraphModule,
36
- ButtonModule], exports: [SearchFieldsComponent] });
36
+ ButtonModule,
37
+ SelectModule], exports: [SearchFieldsComponent] });
37
38
  SearchFieldsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, imports: [[
38
39
  CommonModule,
39
40
  SpinnerModule,
@@ -45,6 +46,7 @@ SearchFieldsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", vers
45
46
  InputLabelModule,
46
47
  ParagraphModule,
47
48
  ButtonModule,
49
+ SelectModule,
48
50
  ]] });
49
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, decorators: [{
50
52
  type: NgModule,
@@ -61,8 +63,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
61
63
  InputLabelModule,
62
64
  ParagraphModule,
63
65
  ButtonModule,
66
+ SelectModule,
64
67
  ],
65
68
  exports: [SearchFieldsComponent],
66
69
  }]
67
70
  }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEdBQ2hCLE1BQU0seUJBQXlCLENBQUM7O0FBa0JqQyxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBZmQscUJBQXFCLGFBRWxDLFlBQVk7UUFDWixhQUFhO1FBQ2IsWUFBWTtRQUNaLGVBQWU7UUFDZixXQUFXO1FBQ1gsVUFBVTtRQUNWLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLFlBQVksYUFFSixxQkFBcUI7aUhBRXBCLGtCQUFrQixZQWRwQjtZQUNQLFlBQVk7WUFDWixhQUFhO1lBQ2IsWUFBWTtZQUNaLGVBQWU7WUFDZixXQUFXO1lBQ1gsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLFlBQVk7U0FDYjs0RkFHVSxrQkFBa0I7a0JBaEI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtTZWFyY2hGaWVsZHNDb21wb25lbnR9IGZyb20gJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQnO1xuaW1wb3J0IHtTcGlubmVyTW9kdWxlfSBmcm9tICcuLi9zcGlubmVyL3NwaW5uZXIubW9kdWxlJztcbmltcG9ydCB7V2lkZ2V0TW9kdWxlfSBmcm9tICcuLi93aWRnZXQvd2lkZ2V0Lm1vZHVsZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIEZvcm1Nb2R1bGUsXG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBQYXJhZ3JhcGhNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2VhcmNoRmllbGRzQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTcGlubmVyTW9kdWxlLFxuICAgIFdpZGdldE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gICAgUGFyYWdyYXBoTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1NlYXJjaEZpZWxkc0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpZWxkc01vZHVsZSB7fVxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0seUJBQXlCLENBQUM7O0FBbUJqQyxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBaEJkLHFCQUFxQixhQUVsQyxZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixlQUFlO1FBQ2YsV0FBVztRQUNYLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZO1FBQ1osWUFBWSxhQUVKLHFCQUFxQjtpSEFFcEIsa0JBQWtCLFlBZnBCO1lBQ1AsWUFBWTtZQUNaLGFBQWE7WUFDYixZQUFZO1lBQ1osZUFBZTtZQUNmLFdBQVc7WUFDWCxVQUFVO1lBQ1YsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsWUFBWTtZQUNaLFlBQVk7U0FDYjs0RkFHVSxrQkFBa0I7a0JBakI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1NlYXJjaEZpZWxkc0NvbXBvbmVudH0gZnJvbSAnLi9zZWFyY2gtZmllbGRzLmNvbXBvbmVudCc7XG5pbXBvcnQge1NwaW5uZXJNb2R1bGV9IGZyb20gJy4uL3NwaW5uZXIvc3Bpbm5lci5tb2R1bGUnO1xuaW1wb3J0IHtXaWRnZXRNb2R1bGV9IGZyb20gJy4uL3dpZGdldC93aWRnZXQubW9kdWxlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgRm9ybU1vZHVsZSxcbiAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIFBhcmFncmFwaE1vZHVsZSxcbiAgU2VsZWN0TW9kdWxlLFxufSBmcm9tICdAdmFsdGltby91c2VyLWludGVyZmFjZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1NlYXJjaEZpZWxkc0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU3Bpbm5lck1vZHVsZSxcbiAgICBXaWRnZXRNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIEZvcm1Nb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgICBJbnB1dExhYmVsTW9kdWxlLFxuICAgIFBhcmFncmFwaE1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgU2VsZWN0TW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbU2VhcmNoRmllbGRzQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRzTW9kdWxlIHt9XG4iXX0=