@yuuvis/client-framework 0.7.3 → 0.8.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.
Files changed (42) hide show
  1. package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +2 -2
  2. package/esm2022/forms/index.mjs +5 -1
  3. package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +32 -32
  4. package/esm2022/forms/lib/elements/number/number.component.mjs +3 -3
  5. package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +3 -3
  6. package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +38 -0
  7. package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +181 -0
  8. package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +2 -0
  9. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +98 -0
  10. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +2 -0
  11. package/esm2022/forms/lib/elements/string/string.component.mjs +10 -3
  12. package/esm2022/list/lib/list.component.mjs +6 -4
  13. package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +3 -3
  14. package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +5 -3
  15. package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +3 -3
  16. package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +2 -2
  17. package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +2 -2
  18. package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +2 -2
  19. package/fesm2022/yuuvis-client-framework-actions.mjs +1 -1
  20. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-forms.mjs +339 -44
  22. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  23. package/fesm2022/yuuvis-client-framework-list.mjs +5 -3
  24. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  25. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +6 -4
  26. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-object-details.mjs +2 -2
  28. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
  30. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  31. package/fesm2022/yuuvis-client-framework-tile-list.mjs +1 -1
  32. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  33. package/forms/index.d.ts +4 -0
  34. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +2 -1
  35. package/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.d.ts +13 -0
  36. package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +33 -0
  37. package/forms/lib/elements/range-select-date/range-select-date.interface.d.ts +5 -0
  38. package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +28 -0
  39. package/forms/lib/elements/range-select-filesize/range-select-filesize.interface.d.ts +5 -0
  40. package/list/lib/list.component.d.ts +2 -1
  41. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +1 -0
  42. package/package.json +28 -28
@@ -0,0 +1,181 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, inject, input, signal } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormBuilder, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
+ import { marker } from '@colsen1991/ngx-translate-extract-marker';
6
+ import { LocaleDatePipe, Operator, OperatorLabel, SearchUtils, TranslateService } from '@yuuvis/client-core';
7
+ import { YvcDropdownModule } from '@yuuvis/components/dropdown';
8
+ import { YvcOverlayService } from '@yuuvis/components/overlay';
9
+ import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@yuuvis/components/dropdown";
12
+ import * as i2 from "@angular/forms";
13
+ // marker for extracting translations for the available date range options
14
+ marker('yuv.form.element.range-select-date.option.any');
15
+ marker('yuv.form.element.range-select-date.option.today');
16
+ marker('yuv.form.element.range-select-date.option.yesterday');
17
+ marker('yuv.form.element.range-select-date.option.thisWeek');
18
+ marker('yuv.form.element.range-select-date.option.lastWeek');
19
+ marker('yuv.form.element.range-select-date.option.thisMonth');
20
+ marker('yuv.form.element.range-select-date.option.lastMonth');
21
+ marker('yuv.form.element.range-select-date.option.thisYear');
22
+ marker('yuv.form.element.range-select-date.option.lastYear');
23
+ marker('yuv.form.element.range-select-date.option.custom');
24
+ /**
25
+ * Component for selecting a date range based on pre-defined ranges like
26
+ * 'today', 'this week', 'this month', etc.
27
+ * It also allows to pick a custom date range.
28
+ */
29
+ export class RangeSelectDateComponent {
30
+ #overlay;
31
+ #fb;
32
+ #ANY_OPTION;
33
+ #CUSTOM_OPTION;
34
+ #customDateRange;
35
+ constructor() {
36
+ this.translate = inject(TranslateService);
37
+ this.#overlay = inject(YvcOverlayService);
38
+ this.#fb = inject(FormBuilder);
39
+ this.#ANY_OPTION = 'any';
40
+ this.#CUSTOM_OPTION = 'custom';
41
+ this.dateOptions = signal([]);
42
+ this.innerForm = this.#fb.nonNullable.group({
43
+ range: [this.#ANY_OPTION]
44
+ });
45
+ /**
46
+ * Range values to be used in the dropdown.
47
+ */
48
+ this.ranges = input(['today', 'yesterday', 'thisWeek', 'thisMonth', 'thisYear']);
49
+ /**
50
+ * Whether to show the custom date range option.
51
+ */
52
+ this.customRange = input(true);
53
+ // ControlValueAccessor implementation
54
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
55
+ this.propagateChange = (_) => { };
56
+ this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
57
+ this.#setupOptions();
58
+ this.innerForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
59
+ }
60
+ #onFormValueChange(v) {
61
+ if (v.range === this.#CUSTOM_OPTION) {
62
+ if (!this.#customDateRange || this.dateOptions().find((o) => o.value === this.#CUSTOM_OPTION)?.label === this.#customDateRangeToString())
63
+ this.#openCustomRangeDialog();
64
+ else
65
+ this.propagateChange({
66
+ rangeValue: this.#customDateRange,
67
+ label: this.#customDateRangeToString()
68
+ });
69
+ }
70
+ else {
71
+ const { start, end } = SearchUtils.dateRangeStartEnd(v.range);
72
+ this.propagateChange(v.range !== this.#ANY_OPTION
73
+ ? {
74
+ rangeValue: { operator: Operator.INTERVAL_INCLUDE_BOTH, firstValue: start, secondValue: end },
75
+ label: this.translate.instant(`yuv.form.element.range-select-date.option.${v.range}`)
76
+ }
77
+ : undefined);
78
+ this.#customDateRange = undefined;
79
+ this.#setupOptions();
80
+ }
81
+ }
82
+ #openCustomRangeDialog() {
83
+ // open date range picker
84
+ const o = this.#overlay.open(DateRangePickerComponent, {
85
+ range: this.#customDateRange
86
+ });
87
+ o.afterClosed$.subscribe((res) => {
88
+ this.#customDateRange = res.data;
89
+ if (!res.data) {
90
+ this.innerForm.patchValue({ range: this.#ANY_OPTION });
91
+ this.#setupOptions();
92
+ }
93
+ else {
94
+ this.#onFormValueChange(this.innerForm.value);
95
+ this.#setupOptions(this.#customDateRangeToString());
96
+ setTimeout(() => {
97
+ this.innerForm.patchValue({ range: this.#CUSTOM_OPTION }, {
98
+ emitEvent: false
99
+ });
100
+ });
101
+ }
102
+ });
103
+ }
104
+ #setupOptions(custom) {
105
+ const options = this.ranges().map((value) => ({
106
+ label: this.translate.instant(`yuv.form.element.range-select-date.option.${value}`),
107
+ value
108
+ }));
109
+ if (this.customRange())
110
+ options.push({
111
+ label: custom || this.translate.instant('yuv.form.element.range-select-date.option.custom'),
112
+ value: this.#CUSTOM_OPTION
113
+ });
114
+ this.dateOptions.set([
115
+ {
116
+ label: this.translate.instant('yuv.form.element.range-select-date.option.any'),
117
+ value: this.#ANY_OPTION
118
+ },
119
+ ...options
120
+ ]);
121
+ }
122
+ #customDateRangeToString() {
123
+ if (!this.#customDateRange)
124
+ return undefined;
125
+ const dp = new LocaleDatePipe(this.translate);
126
+ switch (this.#customDateRange.operator) {
127
+ case Operator.EQUAL: {
128
+ return dp.transform(this.#customDateRange.firstValue, 'shortDate');
129
+ }
130
+ case Operator.GREATER_OR_EQUAL: {
131
+ return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
132
+ }
133
+ case Operator.LESS_OR_EQUAL: {
134
+ return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
135
+ }
136
+ case Operator.INTERVAL_INCLUDE_BOTH: {
137
+ return `${dp.transform(this.#customDateRange.firstValue, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue, 'shortDate')}`;
138
+ }
139
+ }
140
+ return undefined;
141
+ }
142
+ writeValue(value) {
143
+ if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {
144
+ const dr = SearchUtils.getMatchingDateRange(value.rangeValue);
145
+ if (dr) {
146
+ this.innerForm.patchValue({ range: dr });
147
+ }
148
+ else {
149
+ this.#customDateRange = value.rangeValue;
150
+ this.innerForm.patchValue({ range: this.#CUSTOM_OPTION });
151
+ }
152
+ }
153
+ else {
154
+ this.innerForm.patchValue({ range: this.#ANY_OPTION });
155
+ }
156
+ }
157
+ registerOnChange(fn) {
158
+ this.propagateChange = fn;
159
+ }
160
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
161
+ registerOnTouched(fn) { }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: RangeSelectDateComponent, isStandalone: true, selector: "yuv-range-select-date", inputs: { ranges: { classPropertyName: "ranges", publicName: "ranges", isSignal: true, isRequired: false, transformFunction: null }, customRange: { classPropertyName: "customRange", publicName: "customRange", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
164
+ {
165
+ provide: NG_VALUE_ACCESSOR,
166
+ useExisting: forwardRef(() => RangeSelectDateComponent),
167
+ multi: true
168
+ }
169
+ ], ngImport: i0, template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectDateComponent, decorators: [{
172
+ type: Component,
173
+ args: [{ selector: 'yuv-range-select-date', standalone: true, imports: [CommonModule, YvcDropdownModule, ReactiveFormsModule], providers: [
174
+ {
175
+ provide: NG_VALUE_ACCESSOR,
176
+ useExisting: forwardRef(() => RangeSelectDateComponent),
177
+ multi: true
178
+ }
179
+ ], template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"] }]
180
+ }], ctorParameters: () => [] });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3JhbmdlLXNlbGVjdC1kYXRlL3JhbmdlLXNlbGVjdC1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZGF0ZS9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEUsT0FBTyxFQUFhLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFjLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BJLE9BQU8sRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRixPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7QUFHM0YsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0FBQzFELE1BQU0sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBQzlELE1BQU0sQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQzdELE1BQU0sQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQzdELE1BQU0sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBQzlELE1BQU0sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBQzlELE1BQU0sQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQzdELE1BQU0sQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQzdELE1BQU0sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0FBRTNEOzs7O0dBSUc7QUFlSCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLFFBQVEsQ0FBNkI7SUFDckMsR0FBRyxDQUF1QjtJQUUxQixXQUFXLENBQVM7SUFDcEIsY0FBYyxDQUFZO0lBRzFCLGdCQUFnQixDQUFjO0lBZTlCO1FBdkJRLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxhQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUUxQixnQkFBVyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxDQUFDLENBQUM7UUFHM0MsY0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNyQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQzFCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsV0FBTSxHQUFHLEtBQUssQ0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pGOztXQUVHO1FBQ0gsZ0JBQVcsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFvR25DLHNDQUFzQztRQUV0QyxnRUFBZ0U7UUFDaEUsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBcEcvQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBTTtRQUN2QixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDdEksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7O2dCQUU5QixJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtpQkFDdkMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBa0IsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxlQUFlLENBQ2xCLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVc7Z0JBQzFCLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtvQkFDN0YsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3RGO2dCQUNILENBQUMsQ0FBQyxTQUFTLENBQ2QsQ0FBQztZQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLHlCQUF5QjtRQUN6QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUM3QixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQWtDLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUVqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBRXBELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQ3ZCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFDOUI7d0JBQ0UsU0FBUyxFQUFFLEtBQUs7cUJBQ2pCLENBQ0YsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBZTtRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsS0FBSyxFQUFFLENBQUM7WUFDbkYsS0FBSztTQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQztnQkFDM0YsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUEyQjthQUN4QyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuQjtnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUM7Z0JBQzlFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVzthQUN4QjtZQUNELEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sR0FBRyxhQUFhLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BILENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixPQUFPLEdBQUcsYUFBYSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakgsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsV0FBVyxDQUFDLElBQUksYUFBYSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNqTSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFPRCxVQUFVLENBQUMsS0FBNEI7UUFDckMsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sRUFBRSxHQUEwQixXQUFXLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JGLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBYztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLGlCQUFpQixDQUFDLEVBQWMsSUFBUyxDQUFDOytHQWxKL0Isd0JBQXdCO21HQUF4Qix3QkFBd0IscVZBUnhCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDdkQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ3hDSCxrS0FFTyx3SkQ2QkssWUFBWSw4QkFBRSxpQkFBaUIsb05BQUUsbUJBQW1COzs0RkFXbkQsd0JBQXdCO2tCQWRwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsYUFHcEQ7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFya2VyIH0gZnJvbSAnQGNvbHNlbjE5OTEvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UsIExvY2FsZURhdGVQaXBlLCBPcGVyYXRvciwgT3BlcmF0b3JMYWJlbCwgUmFuZ2VWYWx1ZSwgU2VhcmNoVXRpbHMsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VFdmVudCwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYW5nZVNlbGVjdERhdGVWYWx1ZSB9IGZyb20gJy4vcmFuZ2Utc2VsZWN0LWRhdGUuaW50ZXJmYWNlJztcblxuLy8gbWFya2VyIGZvciBleHRyYWN0aW5nIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGF2YWlsYWJsZSBkYXRlIHJhbmdlIG9wdGlvbnNcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24uYW55Jyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnRvZGF5Jyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnllc3RlcmRheScpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi50aGlzV2VlaycpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi5sYXN0V2VlaycpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi50aGlzTW9udGgnKTtcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24ubGFzdE1vbnRoJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLnRoaXNZZWFyJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmxhc3RZZWFyJyk7XG5tYXJrZXIoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmN1c3RvbScpO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3Igc2VsZWN0aW5nIGEgZGF0ZSByYW5nZSBiYXNlZCBvbiBwcmUtZGVmaW5lZCByYW5nZXMgbGlrZVxuICogJ3RvZGF5JywgJ3RoaXMgd2VlaycsICd0aGlzIG1vbnRoJywgZXRjLlxuICogSXQgYWxzbyBhbGxvd3MgdG8gcGljayBhIGN1c3RvbSBkYXRlIHJhbmdlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtcmFuZ2Utc2VsZWN0LWRhdGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBZdmNEcm9wZG93bk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yYW5nZS1zZWxlY3QtZGF0ZS5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlU2VsZWN0RGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICNvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgI2ZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAjQU5ZX09QVElPTiA9ICdhbnknO1xuICAjQ1VTVE9NX09QVElPTiA9ICdjdXN0b20nO1xuXG4gIGRhdGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgI2N1c3RvbURhdGVSYW5nZT86IFJhbmdlVmFsdWU7XG5cbiAgaW5uZXJGb3JtID0gdGhpcy4jZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgIHJhbmdlOiBbdGhpcy4jQU5ZX09QVElPTl1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFJhbmdlIHZhbHVlcyB0byBiZSB1c2VkIGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHJhbmdlcyA9IGlucHV0PERhdGVSYW5nZVtdPihbJ3RvZGF5JywgJ3llc3RlcmRheScsICd0aGlzV2VlaycsICd0aGlzTW9udGgnLCAndGhpc1llYXInXSk7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGN1c3RvbSBkYXRlIHJhbmdlIG9wdGlvbi5cbiAgICovXG4gIGN1c3RvbVJhbmdlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgIHRoaXMuaW5uZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICBpZiAodi5yYW5nZSA9PT0gdGhpcy4jQ1VTVE9NX09QVElPTikge1xuICAgICAgaWYgKCF0aGlzLiNjdXN0b21EYXRlUmFuZ2UgfHwgdGhpcy5kYXRlT3B0aW9ucygpLmZpbmQoKG8pID0+IG8udmFsdWUgPT09IHRoaXMuI0NVU1RPTV9PUFRJT04pPy5sYWJlbCA9PT0gdGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSlcbiAgICAgICAgdGhpcy4jb3BlbkN1c3RvbVJhbmdlRGlhbG9nKCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHtcbiAgICAgICAgICByYW5nZVZhbHVlOiB0aGlzLiNjdXN0b21EYXRlUmFuZ2UsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuI2N1c3RvbURhdGVSYW5nZVRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gU2VhcmNoVXRpbHMuZGF0ZVJhbmdlU3RhcnRFbmQodi5yYW5nZSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoXG4gICAgICAgIHYucmFuZ2UgIT09IHRoaXMuI0FOWV9PUFRJT05cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmFuZ2VWYWx1ZTogeyBvcGVyYXRvcjogT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RILCBmaXJzdFZhbHVlOiBzdGFydCwgc2Vjb25kVmFsdWU6IGVuZCB9LFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgeXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZGF0ZS5vcHRpb24uJHt2LnJhbmdlfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuI2N1c3RvbURhdGVSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gICNvcGVuQ3VzdG9tUmFuZ2VEaWFsb2coKSB7XG4gICAgLy8gb3BlbiBkYXRlIHJhbmdlIHBpY2tlclxuICAgIGNvbnN0IG8gPSB0aGlzLiNvdmVybGF5Lm9wZW4oRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCB7XG4gICAgICByYW5nZTogdGhpcy4jY3VzdG9tRGF0ZVJhbmdlXG4gICAgfSk7XG4gICAgby5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKChyZXM6IE92ZXJsYXlDbG9zZUV2ZW50PFJhbmdlVmFsdWU+KSA9PiB7XG4gICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSByZXMuZGF0YTtcblxuICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICB0aGlzLmlubmVyRm9ybS5wYXRjaFZhbHVlKHsgcmFuZ2U6IHRoaXMuI0FOWV9PUFRJT04gfSk7XG4gICAgICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jb25Gb3JtVmFsdWVDaGFuZ2UodGhpcy5pbm5lckZvcm0udmFsdWUpO1xuICAgICAgICB0aGlzLiNzZXR1cE9wdGlvbnModGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbm5lckZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIHsgcmFuZ2U6IHRoaXMuI0NVU1RPTV9PUFRJT04gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgI3NldHVwT3B0aW9ucyhjdXN0b20/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yYW5nZXMoKS5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYHl1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLiR7dmFsdWV9YCksXG4gICAgICB2YWx1ZVxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5jdXN0b21SYW5nZSgpKVxuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGN1c3RvbSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1kYXRlLm9wdGlvbi5jdXN0b20nKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuI0NVU1RPTV9PUFRJT04gYXMgRGF0ZVJhbmdlXG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5mb3JtLmVsZW1lbnQucmFuZ2Utc2VsZWN0LWRhdGUub3B0aW9uLmFueScpLFxuICAgICAgICB2YWx1ZTogdGhpcy4jQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICBdKTtcbiAgfVxuXG4gICNjdXN0b21EYXRlUmFuZ2VUb1N0cmluZygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy4jY3VzdG9tRGF0ZVJhbmdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRwID0gbmV3IExvY2FsZURhdGVQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgICBzd2l0Y2ggKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICByZXR1cm4gZHAudHJhbnNmb3JtKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5maXJzdFZhbHVlIGFzIERhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5HUkVBVEVSX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuTEVTU19PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5MRVNTX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RIOiB7XG4gICAgICAgIHJldHVybiBgJHtkcC50cmFuc2Zvcm0odGhpcy4jY3VzdG9tRGF0ZVJhbmdlLmZpcnN0VmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfSAke09wZXJhdG9yTGFiZWwuSU5URVJWQUxfSU5DTFVERV9CT1RIfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2Uuc2Vjb25kVmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IFJhbmdlU2VsZWN0RGF0ZVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlPy5yYW5nZVZhbHVlPy5vcGVyYXRvciAmJiB2YWx1ZT8ucmFuZ2VWYWx1ZT8uZmlyc3RWYWx1ZSkge1xuICAgICAgY29uc3QgZHI6IERhdGVSYW5nZSB8IHVuZGVmaW5lZCA9IFNlYXJjaFV0aWxzLmdldE1hdGNoaW5nRGF0ZVJhbmdlKHZhbHVlLnJhbmdlVmFsdWUpO1xuICAgICAgaWYgKGRyKSB7XG4gICAgICAgIHRoaXMuaW5uZXJGb3JtLnBhdGNoVmFsdWUoeyByYW5nZTogZHIgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSB2YWx1ZS5yYW5nZVZhbHVlO1xuICAgICAgICB0aGlzLmlubmVyRm9ybS5wYXRjaFZhbHVlKHsgcmFuZ2U6IHRoaXMuI0NVU1RPTV9PUFRJT04gfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5uZXJGb3JtLnBhdGNoVmFsdWUoeyByYW5nZTogdGhpcy4jQU5ZX09QVElPTiB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHt9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybVwiPlxuICAgIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VcIiBbb3B0aW9uc109XCJkYXRlT3B0aW9ucygpXCIgW2Rpc2FibGVDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC95dmMtZHJvcGRvd24+XG48L2Zvcm0+Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWRhdGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3JhbmdlLXNlbGVjdC1kYXRlL3JhbmdlLXNlbGVjdC1kYXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmFuZ2VWYWx1ZSB9IGZyb20gXCJAeXV1dmlzL2NsaWVudC1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VTZWxlY3REYXRlVmFsdWUge1xuICAgIHJhbmdlVmFsdWU6IFJhbmdlVmFsdWU7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG59Il19
@@ -0,0 +1,98 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, inject, input, signal } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormBuilder, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
+ import { marker } from '@colsen1991/ngx-translate-extract-marker';
6
+ import { TranslateService } from '@ngx-translate/core';
7
+ import { SearchUtils } from '@yuuvis/client-core';
8
+ import { YvcDropdownModule } from '@yuuvis/components/dropdown';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@yuuvis/components/dropdown";
11
+ import * as i2 from "@angular/forms";
12
+ // marker for extracting translations for the available filesize range options
13
+ marker('yuv.form.element.range-select-filesize.option.any');
14
+ marker('yuv.form.element.range-select-filesize.option.small');
15
+ marker('yuv.form.element.range-select-filesize.option.medium');
16
+ marker('yuv.form.element.range-select-filesize.option.large');
17
+ marker('yuv.form.element.range-select-filesize.option.verylarge');
18
+ /**
19
+ * Component for selecting a range of filesizes based on pre-defined ranges like
20
+ * 'today', 'this week', 'this month', etc.
21
+ */
22
+ export class RangeSelectFilesizeComponent {
23
+ #fb;
24
+ #ANY_OPTION;
25
+ constructor() {
26
+ this.translate = inject(TranslateService);
27
+ this.#fb = inject(FormBuilder);
28
+ this.#ANY_OPTION = 'any';
29
+ this.options = signal([]);
30
+ this.innerForm = this.#fb.nonNullable.group({
31
+ range: [this.#ANY_OPTION]
32
+ });
33
+ /**
34
+ * Range values to be used in the dropdown.
35
+ */
36
+ this.ranges = input(['small', 'medium', 'large', 'verylarge']);
37
+ // ControlValueAccessor implementation
38
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
39
+ this.propagateChange = (_) => { };
40
+ this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
41
+ this.#setupOptions();
42
+ this.innerForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
43
+ }
44
+ #onFormValueChange(v) {
45
+ const rangeValue = v.range !== this.#ANY_OPTION ? SearchUtils.filesizeRangeToRangeValue(v.range) : undefined;
46
+ const res = rangeValue && {
47
+ rangeValue,
48
+ label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${v.range}`)
49
+ };
50
+ this.propagateChange(res);
51
+ }
52
+ #setupOptions() {
53
+ const options = this.ranges().map((value) => ({
54
+ label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${value}`),
55
+ value
56
+ }));
57
+ this.options.set([
58
+ {
59
+ label: this.translate.instant('yuv.form.element.range-select-filesize.option.any'),
60
+ value: this.#ANY_OPTION
61
+ },
62
+ ...options
63
+ ]);
64
+ }
65
+ writeValue(value) {
66
+ const patch = { range: this.#ANY_OPTION };
67
+ if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {
68
+ const range = SearchUtils.getMatchingFilesizeRange(value.rangeValue);
69
+ if (range)
70
+ patch.range = range;
71
+ }
72
+ this.innerForm.patchValue(patch);
73
+ }
74
+ registerOnChange(fn) {
75
+ this.propagateChange = fn;
76
+ }
77
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
78
+ registerOnTouched(fn) { }
79
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectFilesizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: RangeSelectFilesizeComponent, isStandalone: true, selector: "yuv-range-select-filesize", inputs: { ranges: { classPropertyName: "ranges", publicName: "ranges", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
81
+ {
82
+ provide: NG_VALUE_ACCESSOR,
83
+ useExisting: forwardRef(() => RangeSelectFilesizeComponent),
84
+ multi: true
85
+ }
86
+ ], ngImport: i0, template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"options()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>\n", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RangeSelectFilesizeComponent, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'yuv-range-select-filesize', standalone: true, imports: [CommonModule, YvcDropdownModule, ReactiveFormsModule], providers: [
91
+ {
92
+ provide: NG_VALUE_ACCESSOR,
93
+ useExisting: forwardRef(() => RangeSelectFilesizeComponent),
94
+ multi: true
95
+ }
96
+ ], template: "<form [formGroup]=\"innerForm\">\n <yvc-dropdown formControlName=\"range\" [options]=\"options()\" [disableClearButton]=\"true\"></yvc-dropdown>\n</form>\n", styles: [":host form{display:flex}:host form yvc-dropdown{flex:1;outline-offset:0px;color:currentColor}\n"] }]
97
+ }], ctorParameters: () => [] });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWZpbGVzaXplLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZmlsZXNpemUvcmFuZ2Utc2VsZWN0LWZpbGVzaXplLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZmlsZXNpemUvcmFuZ2Utc2VsZWN0LWZpbGVzaXplLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQTZCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQUdoRiw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFDNUQsTUFBTSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLHNE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QUE4QixXQUFXLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hHLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxpQkFBaUIsQ0FBQyxFQUFjLElBQVMsQ0FBQzsrR0FqRS9CLDRCQUE0QjttR0FBNUIsNEJBQTRCLCtNQVI1QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7Z0JBQzNELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkNoQ0gsZ0tBR0Esd0pEb0JZLFlBQVksOEJBQUUsaUJBQWlCLG9OQUFFLG1CQUFtQjs7NEZBV25ELDRCQUE0QjtrQkFkeEMsU0FBUzsrQkFDRSwyQkFBMkIsY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLGFBR3BEO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDOzRCQUMzRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hcmtlciB9IGZyb20gJ0Bjb2xzZW4xOTkxL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZXNpemVSYW5nZSwgUmFuZ2VWYWx1ZSwgU2VhcmNoVXRpbHMgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBSYW5nZVNlbGVjdEZpbGVzaXplVmFsdWUgfSBmcm9tICcuL3JhbmdlLXNlbGVjdC1maWxlc2l6ZS5pbnRlcmZhY2UnO1xuXG4vLyBtYXJrZXIgZm9yIGV4dHJhY3RpbmcgdHJhbnNsYXRpb25zIGZvciB0aGUgYXZhaWxhYmxlIGZpbGVzaXplIHJhbmdlIG9wdGlvbnNcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZmlsZXNpemUub3B0aW9uLmFueScpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1maWxlc2l6ZS5vcHRpb24uc21hbGwnKTtcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZmlsZXNpemUub3B0aW9uLm1lZGl1bScpO1xubWFya2VyKCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1maWxlc2l6ZS5vcHRpb24ubGFyZ2UnKTtcbm1hcmtlcigneXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZmlsZXNpemUub3B0aW9uLnZlcnlsYXJnZScpO1xuLyoqXG4gKiBDb21wb25lbnQgZm9yIHNlbGVjdGluZyBhIHJhbmdlIG9mIGZpbGVzaXplcyBiYXNlZCBvbiBwcmUtZGVmaW5lZCByYW5nZXMgbGlrZVxuICogJ3RvZGF5JywgJ3RoaXMgd2VlaycsICd0aGlzIG1vbnRoJywgZXRjLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtcmFuZ2Utc2VsZWN0LWZpbGVzaXplJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFuZ2Utc2VsZWN0LWZpbGVzaXplLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JhbmdlLXNlbGVjdC1maWxlc2l6ZS5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYW5nZVNlbGVjdEZpbGVzaXplQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgI2ZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAjQU5ZX09QVElPTiA9ICdhbnknO1xuXG4gIG9wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuICBpbm5lckZvcm0gPSB0aGlzLiNmYi5ub25OdWxsYWJsZS5ncm91cCh7XG4gICAgcmFuZ2U6IFt0aGlzLiNBTllfT1BUSU9OXVxuICB9KTtcblxuICAvKipcbiAgICogUmFuZ2UgdmFsdWVzIHRvIGJlIHVzZWQgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcmFuZ2VzID0gaW5wdXQ8RmlsZXNpemVSYW5nZVtdPihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZScsICd2ZXJ5bGFyZ2UnXSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuICAgIHRoaXMuaW5uZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICBjb25zdCByYW5nZVZhbHVlOiBSYW5nZVZhbHVlIHwgdW5kZWZpbmVkID0gdi5yYW5nZSAhPT0gdGhpcy4jQU5ZX09QVElPTiA/IFNlYXJjaFV0aWxzLmZpbGVzaXplUmFuZ2VUb1JhbmdlVmFsdWUodi5yYW5nZSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzOiBSYW5nZVNlbGVjdEZpbGVzaXplVmFsdWUgfCB1bmRlZmluZWQgPSByYW5nZVZhbHVlICYmIHtcbiAgICAgIHJhbmdlVmFsdWUsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgeXV2LmZvcm0uZWxlbWVudC5yYW5nZS1zZWxlY3QtZmlsZXNpemUub3B0aW9uLiR7di5yYW5nZX1gKVxuICAgIH07XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UocmVzKTtcbiAgfVxuXG4gICNzZXR1cE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucmFuZ2VzKCkubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGB5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1maWxlc2l6ZS5vcHRpb24uJHt2YWx1ZX1gKSxcbiAgICAgIHZhbHVlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5vcHRpb25zLnNldChbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuZm9ybS5lbGVtZW50LnJhbmdlLXNlbGVjdC1maWxlc2l6ZS5vcHRpb24uYW55JyksXG4gICAgICAgIHZhbHVlOiB0aGlzLiNBTllfT1BUSU9OXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIF0pO1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU/OiBSYW5nZVNlbGVjdEZpbGVzaXplVmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRjaCA9IHsgcmFuZ2U6IHRoaXMuI0FOWV9PUFRJT04gfTtcbiAgICBpZiAodmFsdWU/LnJhbmdlVmFsdWU/Lm9wZXJhdG9yICYmIHZhbHVlPy5yYW5nZVZhbHVlPy5maXJzdFZhbHVlKSB7XG4gICAgICBjb25zdCByYW5nZTogRmlsZXNpemVSYW5nZSB8IHVuZGVmaW5lZCA9IFNlYXJjaFV0aWxzLmdldE1hdGNoaW5nRmlsZXNpemVSYW5nZSh2YWx1ZS5yYW5nZVZhbHVlKTtcbiAgICAgIGlmIChyYW5nZSkgcGF0Y2gucmFuZ2UgPSByYW5nZTtcbiAgICB9XG4gICAgdGhpcy5pbm5lckZvcm0ucGF0Y2hWYWx1ZShwYXRjaCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHt9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybVwiPlxuICAgIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwicmFuZ2VcIiBbb3B0aW9uc109XCJvcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0LWZpbGVzaXplLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9yYW5nZS1zZWxlY3QtZmlsZXNpemUvcmFuZ2Utc2VsZWN0LWZpbGVzaXplLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmFuZ2VWYWx1ZSB9IGZyb20gXCJAeXV1dmlzL2NsaWVudC1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VTZWxlY3RGaWxlc2l6ZVZhbHVlIHtcbiAgICByYW5nZVZhbHVlOiBSYW5nZVZhbHVlO1xuICAgIGxhYmVsPzogc3RyaW5nO1xufSJdfQ==
@@ -90,6 +90,9 @@ export class StringComponent {
90
90
  this.propagateChange(this.value);
91
91
  }
92
92
  writeValue(value) {
93
+ if (Array.isArray(value)) {
94
+ value = value.filter((v) => typeof v === 'string' && v.trim().length > 0);
95
+ }
93
96
  this.formatedValue = Utils.formatMailTo(value, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);
94
97
  this.value = value || null;
95
98
  }
@@ -138,6 +141,10 @@ export class StringComponent {
138
141
  this.propagate();
139
142
  }
140
143
  onBlur() {
144
+ if (this.multiselect) {
145
+ // add on blur
146
+ this.value.push('');
147
+ }
141
148
  if (this.trimValue()) {
142
149
  this.propagate();
143
150
  }
@@ -213,7 +220,7 @@ export class StringComponent {
213
220
  useExisting: forwardRef(() => StringComponent),
214
221
  multi: true
215
222
  }
216
- ], ngImport: i0, template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{font-family:Roboto;display:flex;flex-flow:row nowrap;align-items:center}:host .p-autocomplete-token-label{display:flex;align-items:center;-webkit-user-select:text;user-select:text}:host .p-autocomplete-token-label .label{padding:0 calc(var(--app-pane-padding) / 4);word-break:break-word}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcChipsModule }, { kind: "component", type: i2.Chips, selector: "yvc-chips", inputs: ["field", "placeholder", "max", "disabled"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
223
+ ], ngImport: i0, template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n [addOnBlur]=\"true\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;align-items:center}:host .yvc-chips-list li.chip{--yvc-form-element-border-color: var(--text-color-hint)}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcChipsModule }, { kind: "component", type: i2.Chips, selector: "yvc-chips", inputs: ["field", "placeholder", "max", "disabled", "addOnBlur"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
217
224
  }
218
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StringComponent, decorators: [{
219
226
  type: Component,
@@ -228,7 +235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
228
235
  useExisting: forwardRef(() => StringComponent),
229
236
  multi: true
230
237
  }
231
- ], template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{font-family:Roboto;display:flex;flex-flow:row nowrap;align-items:center}:host .p-autocomplete-token-label{display:flex;align-items:center;-webkit-user-select:text;user-select:text}:host .p-autocomplete-token-label .label{padding:0 calc(var(--app-pane-padding) / 4);word-break:break-word}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"] }]
238
+ ], template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n [addOnBlur]=\"true\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;align-items:center}:host .yvc-chips-list li.chip{--yvc-form-element-border-color: var(--text-color-hint)}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"] }]
232
239
  }], propDecorators: { fe: [{
233
240
  type: HostBinding,
234
241
  args: ['class.yvc-form-element']
@@ -251,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
251
258
  }], maxLength: [{
252
259
  type: Input
253
260
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9zdHJpbmcvc3RyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9zdHJpbmcvc3RyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBbUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SixPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFtQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFvQkgsTUFBTSxPQUFPLGVBQWU7SUFuQjVCO1FBb0JVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEMsdUJBQWtCLEdBQUc7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDdkUsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDbkUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7U0FDeEUsQ0FBQztRQUdGLDBEQUEwRDtRQUNuQixPQUFFLEdBQUcsSUFBSSxDQUFDO1FBRWpEOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFNN0I7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQXNEM0IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLHFCQUFnQixHQUE2QixFQUFFLENBQUM7UUFFeEMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBRXhDLG9CQUFlLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztLQWlJbEM7SUEzTEM7Ozs7O09BS0c7SUFDSCxJQUNJLGVBQWUsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZCxVQUFVLEVBQUUsb0JBQW9CLENBQUMsS0FBSztvQkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO2lCQUNwQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUc7b0JBQ2QsVUFBVSxFQUFFLG9CQUFvQixDQUFDLEdBQUc7b0JBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRztpQkFDbEMsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLO29CQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7aUJBQ3BDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQTZCTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEtBQUssb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxpQkFBaUIsS0FBVSxDQUFDO0lBRTVCLGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFakIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkgsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxFQUFFLENBQUM7WUFDcEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25FLGtIQUFrSDtZQUNsSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEtBQUssb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUM7WUFDckQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBYyxFQUFFLGNBQXNCO1FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksT0FBTyxDQUFDO1lBQ1osSUFBSSxjQUFjLEtBQUssY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuRCxPQUFPO29CQUNMLHdKQUF3SixDQUFDO1lBQzdKLENBQUM7aUJBQU0sSUFBSSxjQUFjLEtBQUssY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4RCxPQUFPLEdBQUcsdUZBQXVGLENBQUM7WUFDcEcsQ0FBQztpQkFBTSxJQUFJLGNBQWMsS0FBSyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFELE9BQU8sR0FBRyxnREFBZ0QsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFHLElBQUksRUFBRTtvQkFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQXpOVSxlQUFlO21HQUFmLGVBQWUsd1ZBYmY7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ3pDSCxxcERBb0RBLG9oQ0R6QlksWUFBWSw0SEFBRSxjQUFjLGlKQUFFLGFBQWEsOEhBQUUsV0FBVzs7NEZBZ0J2RCxlQUFlO2tCQW5CM0IsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLGFBR3hEO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQWNzQyxFQUFFO3NCQUF4QyxXQUFXO3VCQUFDLHdCQUF3QjtnQkFLNUIsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBNkJHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENsYXNzaWZpY2F0aW9uLCBDbGFzc2lmaWNhdGlvblByZWZpeCwgRm9ybWF0dGVkTWFpbFRvLCBTaXR1YXRpb24sIFV0aWxzIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9pY29ucyc7XG5pbXBvcnQgeyBZdmNDaGlwc01vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9jaGlwcyc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgZm9ybSBpbnB1dCBmb3Igc3RyaW5ncy4gQmFzZWQgb24gdGhlIGlucHV0IHZhbHVlcyBkaWZmZXJlbnQga2luZHMgb2YgaW5wdXRzIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICpcbiAqIEltcGxlbWVudHMgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQW5ndWxhciBmb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBzdHJpbmcgaW5wdXQgdmFsaWRhdGluZyBpbnB1dCB0byBiZSBiZXR3ZWVuIDUgYW5kIDEwIGNoYXJhY3RlcnMgLS0+XG4gKiA8eXV2LXN0cmluZyBbbWluTGVuZ3RoXT1cIjVcIiBbbWF4TGVuZ3RoXT1cIjEwXCI+PC95dXYtc3RyaW5nPlxuICpcbiAqIDwhLS0gc3RyaW5nIGlucHV0IHRoYXQgb25seSBhbGxvdyBkaWdpdHMgLS0+XG4gKiA8eXV2LXN0cmluZyAgW3JlZ2V4XT1cIlswLTldKlwiPjwveXV2LXN0cmluZz5cbiAqXG4gKiA8IS0tIHN0cmluZyBpbnB1dCByZW5kZXJpbmcgYSBsYXJnZSB0ZXh0YXJlYSAtLT5cbiAqIDx5dXYtc3RyaW5nIFtyb3dzXT1cIjEwXCI+PC95dXYtc3RyaW5nPlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LXN0cmluZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFl2Y0NoaXBzTW9kdWxlLCBZdmNJY29uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zdHJpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHJpbmcuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTdHJpbmdDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTdHJpbmdDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU3RyaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgaWNvbnNTZXJ2aWNlID0gaW5qZWN0KEljb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIGNsYXNzaWZpeXRpb25JY29ucyA9IHtcbiAgICBlbWFpbDogdGhpcy5pY29uc1NlcnZpY2UuZ2V0SWNvbihDbGFzc2lmaWNhdGlvblByZWZpeC5FTUFJTF9JQ09OKSB8fCAnJyxcbiAgICB1cmw6IHRoaXMuaWNvbnNTZXJ2aWNlLmdldEljb24oQ2xhc3NpZmljYXRpb25QcmVmaXguVVJMX0lDT04pIHx8ICcnLFxuICAgIHBob25lOiB0aGlzLmljb25zU2VydmljZS5nZXRJY29uKENsYXNzaWZpY2F0aW9uUHJlZml4LlBIT05FX0lDT04pIHx8ICcnXG4gIH07XG4gIG1heEVudHJ5Q291bnRJZkludmFsaWQ/OiBudW1iZXI7XG5cbiAgLy8gcHJvdmlkZXMgYWxsIGNzcyB2YXJpYWJsZXMgZGVmaW5lZCBieSB8eXV1dmlzL2NvbW9uZW50c1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnl2Yy1mb3JtLWVsZW1lbnQnKSBmZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRvciB0aGF0IG11bHRpcGxlIHN0cmluZ3MgY291bGQgYmUgaW5zZXJ0ZWQsIHRoZXkgd2lsbCBiZSByZW5kZXJlZCBhcyBjaGlwcyAoZGVmYXVsdDogZmFsc2UpLlxuICAgKi9cbiAgQElucHV0KCkgbXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldHRpbmcgcm93cyB0byBtb3JlIHRoYW4gMSB3aWxsIGdlbmVyYXRlIGEgdGV4dGFyZWEgaW5zdGVhZCBvZiBhbiBpbnB1dCB0YWdcbiAgICogYW5kIGFwcGx5IHRoZSByb3dzIHByb3BlcnR5IHRvIGl0XG4gICAqL1xuICBASW5wdXQoKSByb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogV2lsbCBwcmV2ZW50IHRoZSBpbnB1dCBmcm9tIGJlaW5nIGNoYW5nZWQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgKi9cbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEVuYWJsZSBhdXRvZnVjdXMgZm9yIHRoZSBpbnB1dCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBASW5wdXQoKSBhdXRvZm9jdXMgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc2VtYW50aWNzIGZvciB0aGUgZm9ybSBlbGVtZW50LiBQb3NzaWJsZSB2YWx1ZXMgYXJlXG4gICAqIGBlbWFpbGAgKHZhbGlkYXRlcyBhbmQgY3JlYXRlcyBhIGxpbmsgdG8gc2VuZCBhbiBlbWFpbCBvbmNlIHRoZXJlXG4gICAqIGlzIGEgdmFsaWQgZW1haWwgYWRkcmVzcykgYW5kIGB1cmxgICh2YWxpZGF0ZXMgYW5kIGNyZWF0ZXMgYSBsaW5rXG4gICAqIHRvIGFuIFVSTCB0eXBlZCBpbnRvIHRoZSBmb3JtIGVsZW1lbnQpLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGNsYXNzaWZpY2F0aW9ucyhjOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2NsYXNzaWZpY2F0aW9ucyA9IGM7XG4gICAgaWYgKGMgJiYgYy5sZW5ndGgpIHtcbiAgICAgIGlmIChjLmluY2x1ZGVzKENsYXNzaWZpY2F0aW9uLlNUUklOR19FTUFJTCkpIHtcbiAgICAgICAgdGhpcy5jbGFzc2lmeSA9IHtcbiAgICAgICAgICBocmVmUHJlZml4OiBDbGFzc2lmaWNhdGlvblByZWZpeC5FTUFJTCxcbiAgICAgICAgICBpY29uOiB0aGlzLmNsYXNzaWZpeXRpb25JY29ucy5lbWFpbFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjLmluY2x1ZGVzKENsYXNzaWZpY2F0aW9uLlNUUklOR19VUkwpKSB7XG4gICAgICAgIHRoaXMuY2xhc3NpZnkgPSB7XG4gICAgICAgICAgaHJlZlByZWZpeDogQ2xhc3NpZmljYXRpb25QcmVmaXguVVJMLFxuICAgICAgICAgIGljb246IHRoaXMuY2xhc3NpZml5dGlvbkljb25zLnVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjLmluY2x1ZGVzKENsYXNzaWZpY2F0aW9uLlNUUklOR19QSE9ORSkpIHtcbiAgICAgICAgdGhpcy5jbGFzc2lmeSA9IHtcbiAgICAgICAgICBocmVmUHJlZml4OiBDbGFzc2lmaWNhdGlvblByZWZpeC5QSE9ORSxcbiAgICAgICAgICBpY29uOiB0aGlzLmNsYXNzaWZpeXRpb25JY29ucy5waG9uZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjbGFzc2lmaWNhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzaWZpY2F0aW9ucztcbiAgfVxuICAvKipcbiAgICogUG9zc2libGVzIHZhbHVlcyBhcmUgYEVESVRgIChkZWZhdWx0KSxgU0VBUkNIYCxgQ1JFQVRFYC4gSW4gc2VhcmNoIHNpdHVhdGlvbiB2YWxpZGF0aW9uIG9mIHRoZSBmb3JtIGVsZW1lbnQgd2lsbCBiZSB0dXJuZWQgb2ZmLCBzbyB5b3UgYXJlIGFibGUgdG8gZW50ZXIgc2VhcmNoIHRlcm1zIHRoYXQgZG8gbm90IG1lZXQgdGhlIGVsZW1lbnRzIHZhbGlkYXRvcnMuXG4gICAqL1xuICBASW5wdXQoKSBzaXR1YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgdmFsdWUgYWdhaW5zdFxuICAgKi9cbiAgQElucHV0KCkgcmVnZXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNaW5pbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAqL1xuICBASW5wdXQoKSBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAqL1xuICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgLy8gbW9kZWwgdmFsdWVcbiAgdmFsdWU6IGFueTtcbiAgZm9ybWF0ZWRWYWx1ZT86IEZvcm1hdHRlZE1haWxUbztcbiAgdmFsaWQgPSBmYWxzZTtcbiAgdmFsaWRhdGlvbkVycm9yczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG4gIGNsYXNzaWZ5PzogeyBocmVmUHJlZml4OiBzdHJpbmc7IGljb246IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICBwcml2YXRlIF9jbGFzc2lmaWNhdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgcHJpdmF0ZSBwcm9wYWdhdGUoKSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1hdGVkVmFsdWUgPSBVdGlscy5mb3JtYXRNYWlsVG8odmFsdWUsIHRoaXMuY2xhc3NpZnk/LmhyZWZQcmVmaXggPT09IENsYXNzaWZpY2F0aW9uUHJlZml4LkVNQUlMKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgb25WYWx1ZUNoYW5nZSh2YWw6IGFueSkge1xuICAgIHRoaXMubWF4RW50cnlDb3VudElmSW52YWxpZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcblxuICAgIGlmIChVdGlscy5pc0VtcHR5KHZhbCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5wcm9wYWdhdGUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpQ2hlY2sgPSAoY2hlY2s6IChzOiBzdHJpbmcpID0+IGJvb2xlYW4pID0+ICEhKHRoaXMubXVsdGlzZWxlY3QgPyB2YWwgOiBbdmFsXSkuZmluZCgodjogc3RyaW5nKSA9PiBjaGVjayh2KSk7XG5cbiAgICAvLyB2YWxpZGF0ZSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICBpZiAodGhpcy5yZWdleCAmJiBtdWx0aUNoZWNrKCh2OiBzdHJpbmcpID0+ICFSZWdFeHAodGhpcy5yZWdleCEpLnRlc3QodikpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ3JlZ2V4JyB9KTtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBjbGFzc2lmaWNhdGlvbiBzZXR0aW5nc1xuICAgIGlmICh0aGlzLmNsYXNzaWZpY2F0aW9ucyAmJiB0aGlzLmNsYXNzaWZpY2F0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xhc3NpZmljYXRpb25zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgaWYgKG11bHRpQ2hlY2soKHYpID0+ICF0aGlzLnZhbGlkYXRlQ2xhc3NpZmljYXRpb24odiwgYykpKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBrZXk6ICdjbGFzc2lmaWNhdGlvbicgKyBjIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gdmFsaWRhdGUgbWluIGxlbmd0aFxuICAgIGlmICghVXRpbHMuaXNFbXB0eSh0aGlzLm1pbkxlbmd0aCkgJiYgbXVsdGlDaGVjaygodikgPT4gdi5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCEpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ21pbmxlbmd0aCcsIHBhcmFtczogeyBtaW5MZW5ndGg6IHRoaXMubWluTGVuZ3RoIH0gfSk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgbWF4IGxlbmd0aFxuICAgIGlmICghVXRpbHMuaXNFbXB0eSh0aGlzLm1heExlbmd0aCkgJiYgbXVsdGlDaGVjaygodikgPT4gdi5sZW5ndGggPiB0aGlzLm1heExlbmd0aCEpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ21heGxlbmd0aCcsIHBhcmFtczogeyBtYXhMZW5ndGg6IHRoaXMubWF4TGVuZ3RoIH0gfSk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgaW52YWxpZCBpZiBvbmx5IHdoaXRlc3BhY2VzXG4gICAgaWYgKG11bHRpQ2hlY2soKHYpID0+IHYubGVuZ3RoID4gMCAmJiAhdi50cmltKCkubGVuZ3RoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBrZXk6ICdvbmx5V2hpdGVzcGFjZXMnIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmIHRoaXMubXVsdGlzZWxlY3QgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgLy8gU2V0dGluZyBtYXhFbnRyeUNvdW50SWZJbnZhbGlkIHRvIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBhcnJheSB0byBwcmV2ZW50IHRoZSB1c2VyIHRvIGFkZCBtb3JlIGVudHJpZXMuXG4gICAgICB0aGlzLm1heEVudHJ5Q291bnRJZkludmFsaWQgPSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1hdGVkVmFsdWUgPSBVdGlscy5mb3JtYXRNYWlsVG8odmFsLCB0aGlzLmNsYXNzaWZ5Py5ocmVmUHJlZml4ID09PSBDbGFzc2lmaWNhdGlvblByZWZpeC5FTUFJTCk7XG4gICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICBpZiAodGhpcy50cmltVmFsdWUoKSkge1xuICAgICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHJldHVybnMgd2V0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiB0cmltbWVkXG4gICAqL1xuICBwcml2YXRlIHRyaW1WYWx1ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoQmVmb3JlID0gdGhpcy52YWx1ZS5qb2luKCcnKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmpvaW4oJycpLmxlbmd0aCAhPT0gbGVuZ3RoQmVmb3JlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoQmVmb3JlID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoICE9PSBsZW5ndGhCZWZvcmU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDbGFzc2lmaWNhdGlvbihzdHJpbmc6IHN0cmluZywgY2xhc3NpZmljYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNpdHVhdGlvbiA9PT0gU2l0dWF0aW9uLlNFQVJDSCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXR0ZXJuO1xuICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfRU1BSUwpIHtcbiAgICAgICAgcGF0dGVybiA9XG4gICAgICAgICAgL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfVVJMKSB7XG4gICAgICAgIHBhdHRlcm4gPSAvKGh0dHB8ZnRwfGh0dHBzKTpcXC9cXC9bXFx3LV0rKFxcLltcXHctXSspPyhbXFx3LixAP149JSZhbXA7OlxcL34rIy1dKltcXHdAP149JSZhbXA7XFwvfisjLV0pPy87XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfUEhPTkUpIHtcbiAgICAgICAgcGF0dGVybiA9IC9eWytdKlsoXXswLDF9WzAtOV17MSw0fVspXXswLDF9Wy14XFxzXFwuLzAtOV0qJC9nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdHRlcm4gPyBwYXR0ZXJuLnRlc3Qoc3RyaW5nKSA6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgbnVsbCB3aGVuIHZhbGlkIGVsc2UgdGhlIHZhbGlkYXRpb24gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBVdGlscy5hcnJheVRvT2JqZWN0KHRoaXMudmFsaWRhdGlvbkVycm9ycywgJ2tleScsIChlcnIpID0+ICh7IHZhbGlkOiBmYWxzZSwgLi4uZXJyIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMucm93cyAmJiB0aGlzLnJvd3MgPiAxID8gJ3RleHRhcmVhJyA6ICdpbnB1dCcpO1xuICAgICAgICBpZiAoZWwpIGVsLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKCghcm93cyB8fCByb3dzIDw9IDEpICYmICFtdWx0aXNlbGVjdCkge1xuICA8aW5wdXQgdHlwZT1cInRleHRcIiAoYmx1cik9XCJvbkJsdXIoKVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIiAvPlxufVxuQGVsc2UgaWYgKCghcm93cyB8fCByb3dzIDw9IDEpICYmIG11bHRpc2VsZWN0KSB7XG4gIDwhLS0gc2luZ2xlIGxpbmUgaW5wdXQgd2l0aCBtdWx0aXNlbGVjdC0tPlxuICA8eXZjLWNoaXBzXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICBbbWF4XT1cIm1heEVudHJ5Q291bnRJZkludmFsaWRcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKClcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW25nQ2xhc3NdPVwieyBpbnZhbGlkOiB2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCB9XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSAjY2hpcFRlbXBsYXRlPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwLWF1dG9jb21wbGV0ZS10b2tlbi1sYWJlbFwiPlxuICAgICAgICBAaWYgKGNsYXNzaWZ5ICYmICF2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmeSBpbmNoaXBcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJ7eyBjbGFzc2lmeS5ocmVmUHJlZml4ICsgaXRlbSB9fVwiPlxuICAgICAgICAgICAgICA8eXZjLWljb24gW3N2Z109XCJjbGFzc2lmeS5pY29uIVwiPjwveXZjLWljb24+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAge3sgaXRlbSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3l2Yy1jaGlwcz5cbn0gQGVsc2UgaWYgKHJvd3MgJiYgcm93cyA+IDEpIHtcbiAgPCEtLSBtdWx0aSBsaW5lIHRleHQgaW5wdXRzIC0tPlxuICA8dGV4dGFyZWFcbiAgICBjbGFzcz1cImlucHV0LXRleHRhcmVhXCJcbiAgICBwSW5wdXRUZXh0YXJlYVxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gID48L3RleHRhcmVhPlxufVxuXG5AaWYgKGNsYXNzaWZ5KSB7XG4gIDxkaXYgY2xhc3M9XCJjbGFzc2lmeVwiPlxuICAgIEBpZiAodmFsdWUgJiYgIXZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmIChjbGFzc2lmeS5ocmVmUHJlZml4ICE9PSAnJyB8fCAhbXVsdGlzZWxlY3QgfHwgdmFsdWUubGVuZ3RoIDw9IDEpKSB7XG4gICAgICA8YSBocmVmPVwie3sgY2xhc3NpZnkuaHJlZlByZWZpeCArIGZvcm1hdGVkVmFsdWUgfX1cIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiY2xhc3NpZnkuaWNvbiFcIj48L3l2Yy1pY29uPlxuICAgICAgPC9hPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPHl2Yy1pY29uIFtzdmddPVwiY2xhc3NpZnkuaWNvbiFcIj48L3l2Yy1pY29uPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9zdHJpbmcvc3RyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9zdHJpbmcvc3RyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBbUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SixPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFtQixTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFvQkgsTUFBTSxPQUFPLGVBQWU7SUFuQjVCO1FBb0JVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEMsdUJBQWtCLEdBQUc7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FB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OzRGQWdCdkQsZUFBZTtrQkFuQjNCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUd4RDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFjc0MsRUFBRTtzQkFBeEMsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBSzVCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFRRixlQUFlO3NCQURsQixLQUFLO2dCQTZCRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZywgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDbGFzc2lmaWNhdGlvbiwgQ2xhc3NpZmljYXRpb25QcmVmaXgsIEZvcm1hdHRlZE1haWxUbywgU2l0dWF0aW9uLCBVdGlscyB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvaWNvbnMnO1xuaW1wb3J0IHsgWXZjQ2hpcHNNb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvY2hpcHMnO1xuaW1wb3J0IHsgWXZjSWNvbk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9pY29uJztcblxuLyoqXG4gKiBDcmVhdGVzIGZvcm0gaW5wdXQgZm9yIHN0cmluZ3MuIEJhc2VkIG9uIHRoZSBpbnB1dCB2YWx1ZXMgZGlmZmVyZW50IGtpbmRzIG9mIGlucHV0cyB3aWxsIGJlIGdlbmVyYXRlZC5cbiAqXG4gKiBJbXBsZW1lbnRzIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgc28gaXQgY2FuIGJlIHVzZWQgd2l0aGluIEFuZ3VsYXIgZm9ybXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gc3RyaW5nIGlucHV0IHZhbGlkYXRpbmcgaW5wdXQgdG8gYmUgYmV0d2VlbiA1IGFuZCAxMCBjaGFyYWN0ZXJzIC0tPlxuICogPHl1di1zdHJpbmcgW21pbkxlbmd0aF09XCI1XCIgW21heExlbmd0aF09XCIxMFwiPjwveXV2LXN0cmluZz5cbiAqXG4gKiA8IS0tIHN0cmluZyBpbnB1dCB0aGF0IG9ubHkgYWxsb3cgZGlnaXRzIC0tPlxuICogPHl1di1zdHJpbmcgIFtyZWdleF09XCJbMC05XSpcIj48L3l1di1zdHJpbmc+XG4gKlxuICogPCEtLSBzdHJpbmcgaW5wdXQgcmVuZGVyaW5nIGEgbGFyZ2UgdGV4dGFyZWEgLS0+XG4gKiA8eXV2LXN0cmluZyBbcm93c109XCIxMFwiPjwveXV2LXN0cmluZz5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1di1zdHJpbmcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBZdmNDaGlwc01vZHVsZSwgWXZjSWNvbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RyaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RyaW5nLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RyaW5nQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RyaW5nQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFN0cmluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIGljb25zU2VydmljZSA9IGluamVjdChJY29uU2VydmljZSk7XG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICBjbGFzc2lmaXl0aW9uSWNvbnMgPSB7XG4gICAgZW1haWw6IHRoaXMuaWNvbnNTZXJ2aWNlLmdldEljb24oQ2xhc3NpZmljYXRpb25QcmVmaXguRU1BSUxfSUNPTikgfHwgJycsXG4gICAgdXJsOiB0aGlzLmljb25zU2VydmljZS5nZXRJY29uKENsYXNzaWZpY2F0aW9uUHJlZml4LlVSTF9JQ09OKSB8fCAnJyxcbiAgICBwaG9uZTogdGhpcy5pY29uc1NlcnZpY2UuZ2V0SWNvbihDbGFzc2lmaWNhdGlvblByZWZpeC5QSE9ORV9JQ09OKSB8fCAnJ1xuICB9O1xuICBtYXhFbnRyeUNvdW50SWZJbnZhbGlkPzogbnVtYmVyO1xuXG4gIC8vIHByb3ZpZGVzIGFsbCBjc3MgdmFyaWFibGVzIGRlZmluZWQgYnkgfHl1dXZpcy9jb21vbmVudHNcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy55dmMtZm9ybS1lbGVtZW50JykgZmUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0b3IgdGhhdCBtdWx0aXBsZSBzdHJpbmdzIGNvdWxkIGJlIGluc2VydGVkLCB0aGV5IHdpbGwgYmUgcmVuZGVyZWQgYXMgY2hpcHMgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICovXG4gIEBJbnB1dCgpIG11bHRpc2VsZWN0ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXR0aW5nIHJvd3MgdG8gbW9yZSB0aGFuIDEgd2lsbCBnZW5lcmF0ZSBhIHRleHRhcmVhIGluc3RlYWQgb2YgYW4gaW5wdXQgdGFnXG4gICAqIGFuZCBhcHBseSB0aGUgcm93cyBwcm9wZXJ0eSB0byBpdFxuICAgKi9cbiAgQElucHV0KCkgcm93cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdpbGwgcHJldmVudCB0aGUgaW5wdXQgZnJvbSBiZWluZyBjaGFuZ2VkIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBFbmFibGUgYXV0b2Z1Y3VzIGZvciB0aGUgaW5wdXQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgKi9cbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlbWFudGljcyBmb3IgdGhlIGZvcm0gZWxlbWVudC4gUG9zc2libGUgdmFsdWVzIGFyZVxuICAgKiBgZW1haWxgICh2YWxpZGF0ZXMgYW5kIGNyZWF0ZXMgYSBsaW5rIHRvIHNlbmQgYW4gZW1haWwgb25jZSB0aGVyZVxuICAgKiBpcyBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpIGFuZCBgdXJsYCAodmFsaWRhdGVzIGFuZCBjcmVhdGVzIGEgbGlua1xuICAgKiB0byBhbiBVUkwgdHlwZWQgaW50byB0aGUgZm9ybSBlbGVtZW50KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGFzc2lmaWNhdGlvbnMoYzogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9jbGFzc2lmaWNhdGlvbnMgPSBjO1xuICAgIGlmIChjICYmIGMubGVuZ3RoKSB7XG4gICAgICBpZiAoYy5pbmNsdWRlcyhDbGFzc2lmaWNhdGlvbi5TVFJJTkdfRU1BSUwpKSB7XG4gICAgICAgIHRoaXMuY2xhc3NpZnkgPSB7XG4gICAgICAgICAgaHJlZlByZWZpeDogQ2xhc3NpZmljYXRpb25QcmVmaXguRU1BSUwsXG4gICAgICAgICAgaWNvbjogdGhpcy5jbGFzc2lmaXl0aW9uSWNvbnMuZW1haWxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoYy5pbmNsdWRlcyhDbGFzc2lmaWNhdGlvbi5TVFJJTkdfVVJMKSkge1xuICAgICAgICB0aGlzLmNsYXNzaWZ5ID0ge1xuICAgICAgICAgIGhyZWZQcmVmaXg6IENsYXNzaWZpY2F0aW9uUHJlZml4LlVSTCxcbiAgICAgICAgICBpY29uOiB0aGlzLmNsYXNzaWZpeXRpb25JY29ucy51cmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoYy5pbmNsdWRlcyhDbGFzc2lmaWNhdGlvbi5TVFJJTkdfUEhPTkUpKSB7XG4gICAgICAgIHRoaXMuY2xhc3NpZnkgPSB7XG4gICAgICAgICAgaHJlZlByZWZpeDogQ2xhc3NpZmljYXRpb25QcmVmaXguUEhPTkUsXG4gICAgICAgICAgaWNvbjogdGhpcy5jbGFzc2lmaXl0aW9uSWNvbnMucGhvbmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY2xhc3NpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGFzc2lmaWNhdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFBvc3NpYmxlcyB2YWx1ZXMgYXJlIGBFRElUYCAoZGVmYXVsdCksYFNFQVJDSGAsYENSRUFURWAuIEluIHNlYXJjaCBzaXR1YXRpb24gdmFsaWRhdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IHdpbGwgYmUgdHVybmVkIG9mZiwgc28geW91IGFyZSBhYmxlIHRvIGVudGVyIHNlYXJjaCB0ZXJtcyB0aGF0IGRvIG5vdCBtZWV0IHRoZSBlbGVtZW50cyB2YWxpZGF0b3JzLlxuICAgKi9cbiAgQElucHV0KCkgc2l0dWF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlIGFnYWluc3RcbiAgICovXG4gIEBJbnB1dCgpIHJlZ2V4Pzogc3RyaW5nO1xuICAvKipcbiAgICogTWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVyc1xuICAgKi9cbiAgQElucHV0KCkgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuICAgKi9cbiAgQElucHV0KCkgbWF4TGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8vIG1vZGVsIHZhbHVlXG4gIHZhbHVlOiBhbnk7XG4gIGZvcm1hdGVkVmFsdWU/OiBGb3JtYXR0ZWRNYWlsVG87XG4gIHZhbGlkID0gZmFsc2U7XG4gIHZhbGlkYXRpb25FcnJvcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuICBjbGFzc2lmeT86IHsgaHJlZlByZWZpeDogc3RyaW5nOyBpY29uOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbiAgcHJpdmF0ZSBfY2xhc3NpZmljYXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHByaXZhdGUgcHJvcGFnYXRlKCkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0ZWRWYWx1ZSA9IFV0aWxzLmZvcm1hdE1haWxUbyh2YWx1ZSwgdGhpcy5jbGFzc2lmeT8uaHJlZlByZWZpeCA9PT0gQ2xhc3NpZmljYXRpb25QcmVmaXguRU1BSUwpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCBudWxsO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge31cblxuICBvblZhbHVlQ2hhbmdlKHZhbDogYW55KSB7XG4gICAgdGhpcy5tYXhFbnRyeUNvdW50SWZJbnZhbGlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IFtdO1xuXG4gICAgaWYgKFV0aWxzLmlzRW1wdHkodmFsKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnByb3BhZ2F0ZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbXVsdGlDaGVjayA9IChjaGVjazogKHM6IHN0cmluZykgPT4gYm9vbGVhbikgPT4gISEodGhpcy5tdWx0aXNlbGVjdCA/IHZhbCA6IFt2YWxdKS5maW5kKCh2OiBzdHJpbmcpID0+IGNoZWNrKHYpKTtcblxuICAgIC8vIHZhbGlkYXRlIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgIGlmICh0aGlzLnJlZ2V4ICYmIG11bHRpQ2hlY2soKHY6IHN0cmluZykgPT4gIVJlZ0V4cCh0aGlzLnJlZ2V4ISkudGVzdCh2KSkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAncmVnZXgnIH0pO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGNsYXNzaWZpY2F0aW9uIHNldHRpbmdzXG4gICAgaWYgKHRoaXMuY2xhc3NpZmljYXRpb25zICYmIHRoaXMuY2xhc3NpZmljYXRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBpZiAobXVsdGlDaGVjaygodikgPT4gIXRoaXMudmFsaWRhdGVDbGFzc2lmaWNhdGlvbih2LCBjKSkpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ2NsYXNzaWZpY2F0aW9uJyArIGMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyB2YWxpZGF0ZSBtaW4gbGVuZ3RoXG4gICAgaWYgKCFVdGlscy5pc0VtcHR5KHRoaXMubWluTGVuZ3RoKSAmJiBtdWx0aUNoZWNrKCh2KSA9PiB2Lmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoISkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAnbWlubGVuZ3RoJywgcGFyYW1zOiB7IG1pbkxlbmd0aDogdGhpcy5taW5MZW5ndGggfSB9KTtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBtYXggbGVuZ3RoXG4gICAgaWYgKCFVdGlscy5pc0VtcHR5KHRoaXMubWF4TGVuZ3RoKSAmJiBtdWx0aUNoZWNrKCh2KSA9PiB2Lmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoISkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAnbWF4bGVuZ3RoJywgcGFyYW1zOiB7IG1heExlbmd0aDogdGhpcy5tYXhMZW5ndGggfSB9KTtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBpbnZhbGlkIGlmIG9ubHkgd2hpdGVzcGFjZXNcbiAgICBpZiAobXVsdGlDaGVjaygodikgPT4gdi5sZW5ndGggPiAwICYmICF2LnRyaW0oKS5sZW5ndGgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ29ubHlXaGl0ZXNwYWNlcycgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgdGhpcy5tdWx0aXNlbGVjdCAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICAvLyBTZXR0aW5nIG1heEVudHJ5Q291bnRJZkludmFsaWQgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHZhbHVlIGFycmF5IHRvIHByZXZlbnQgdGhlIHVzZXIgdG8gYWRkIG1vcmUgZW50cmllcy5cbiAgICAgIHRoaXMubWF4RW50cnlDb3VudElmSW52YWxpZCA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0ZWRWYWx1ZSA9IFV0aWxzLmZvcm1hdE1haWxUbyh2YWwsIHRoaXMuY2xhc3NpZnk/LmhyZWZQcmVmaXggPT09IENsYXNzaWZpY2F0aW9uUHJlZml4LkVNQUlMKTtcbiAgICB0aGlzLnByb3BhZ2F0ZSgpO1xuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIGlmKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgIC8vIGFkZCBvbiBibHVyXG4gICAgICB0aGlzLnZhbHVlLnB1c2goJycpO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmltVmFsdWUoKSkge1xuICAgICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHJldHVybnMgd2V0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiB0cmltbWVkXG4gICAqL1xuICBwcml2YXRlIHRyaW1WYWx1ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoQmVmb3JlID0gdGhpcy52YWx1ZS5qb2luKCcnKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLm1hcCgodjogc3RyaW5nKSA9PiB2LnRyaW0oKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmpvaW4oJycpLmxlbmd0aCAhPT0gbGVuZ3RoQmVmb3JlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoQmVmb3JlID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoICE9PSBsZW5ndGhCZWZvcmU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDbGFzc2lmaWNhdGlvbihzdHJpbmc6IHN0cmluZywgY2xhc3NpZmljYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNpdHVhdGlvbiA9PT0gU2l0dWF0aW9uLlNFQVJDSCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXR0ZXJuO1xuICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfRU1BSUwpIHtcbiAgICAgICAgcGF0dGVybiA9XG4gICAgICAgICAgL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfVVJMKSB7XG4gICAgICAgIHBhdHRlcm4gPSAvKGh0dHB8ZnRwfGh0dHBzKTpcXC9cXC9bXFx3LV0rKFxcLltcXHctXSspPyhbXFx3LixAP149JSZhbXA7OlxcL34rIy1dKltcXHdAP149JSZhbXA7XFwvfisjLV0pPy87XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzaWZpY2F0aW9uID09PSBDbGFzc2lmaWNhdGlvbi5TVFJJTkdfUEhPTkUpIHtcbiAgICAgICAgcGF0dGVybiA9IC9eWytdKlsoXXswLDF9WzAtOV17MSw0fVspXXswLDF9Wy14XFxzXFwuLzAtOV0qJC9nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdHRlcm4gPyBwYXR0ZXJuLnRlc3Qoc3RyaW5nKSA6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgbnVsbCB3aGVuIHZhbGlkIGVsc2UgdGhlIHZhbGlkYXRpb24gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBVdGlscy5hcnJheVRvT2JqZWN0KHRoaXMudmFsaWRhdGlvbkVycm9ycywgJ2tleScsIChlcnIpID0+ICh7IHZhbGlkOiBmYWxzZSwgLi4uZXJyIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMucm93cyAmJiB0aGlzLnJvd3MgPiAxID8gJ3RleHRhcmVhJyA6ICdpbnB1dCcpO1xuICAgICAgICBpZiAoZWwpIGVsLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKCghcm93cyB8fCByb3dzIDw9IDEpICYmICFtdWx0aXNlbGVjdCkge1xuICA8aW5wdXQgdHlwZT1cInRleHRcIiAoYmx1cik9XCJvbkJsdXIoKVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIiAvPlxufVxuQGVsc2UgaWYgKCghcm93cyB8fCByb3dzIDw9IDEpICYmIG11bHRpc2VsZWN0KSB7XG4gIDwhLS0gc2luZ2xlIGxpbmUgaW5wdXQgd2l0aCBtdWx0aXNlbGVjdC0tPlxuICA8eXZjLWNoaXBzXG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICBbbWF4XT1cIm1heEVudHJ5Q291bnRJZkludmFsaWRcIlxuICAgIFthZGRPbkJsdXJdPVwidHJ1ZVwiXG4gICAgKG9uQmx1cik9XCJvbkJsdXIoKVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbbmdDbGFzc109XCJ7IGludmFsaWQ6IHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoIH1cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtICNjaGlwVGVtcGxhdGU+XG4gICAgICA8c3BhbiBjbGFzcz1cInAtYXV0b2NvbXBsZXRlLXRva2VuLWxhYmVsXCI+XG4gICAgICAgIEBpZiAoY2xhc3NpZnkgJiYgIXZhbGlkYXRpb25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsYXNzaWZ5IGluY2hpcFwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cInt7IGNsYXNzaWZ5LmhyZWZQcmVmaXggKyBpdGVtIH19XCI+XG4gICAgICAgICAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cImNsYXNzaWZ5Lmljb24hXCI+PC95dmMtaWNvbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICB7eyBpdGVtIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwveXZjLWNoaXBzPlxufSBAZWxzZSBpZiAocm93cyAmJiByb3dzID4gMSkge1xuICA8IS0tIG11bHRpIGxpbmUgdGV4dCBpbnB1dHMgLS0+XG4gIDx0ZXh0YXJlYVxuICAgIGNsYXNzPVwiaW5wdXQtdGV4dGFyZWFcIlxuICAgIHBJbnB1dFRleHRhcmVhXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIFtyb3dzXT1cInJvd3NcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgPjwvdGV4dGFyZWE+XG59XG5cbkBpZiAoY2xhc3NpZnkpIHtcbiAgPGRpdiBjbGFzcz1cImNsYXNzaWZ5XCI+XG4gICAgQGlmICh2YWx1ZSAmJiAhdmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgKGNsYXNzaWZ5LmhyZWZQcmVmaXggIT09ICcnIHx8ICFtdWx0aXNlbGVjdCB8fCB2YWx1ZS5sZW5ndGggPD0gMSkpIHtcbiAgICAgIDxhIGhyZWY9XCJ7eyBjbGFzc2lmeS5ocmVmUHJlZml4ICsgZm9ybWF0ZWRWYWx1ZSB9fVwiPlxuICAgICAgICA8eXZjLWljb24gW3N2Z109XCJjbGFzc2lmeS5pY29uIVwiPjwveXZjLWljb24+XG4gICAgICA8L2E+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8eXZjLWljb24gW3N2Z109XCJjbGFzc2lmeS5pY29uIVwiPjwveXZjLWljb24+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==