verben-ng-ui 1.3.4 → 1.3.6

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 (21) hide show
  1. package/esm2022/src/lib/components/data-columns/data-columns.component.mjs +45 -9
  2. package/esm2022/src/lib/components/data-filter/data-filter.component.mjs +179 -24
  3. package/esm2022/src/lib/components/data-filter/data-filter.types.mjs +9 -1
  4. package/esm2022/src/lib/components/data-table/data-table.types.mjs +18 -2
  5. package/esm2022/src/lib/components/data-view/data-view.component.mjs +3 -3
  6. package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +3 -3
  7. package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs +43 -7
  8. package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs.map +1 -1
  9. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs +185 -22
  10. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs.map +1 -1
  11. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs +18 -1
  12. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs.map +1 -1
  13. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs +2 -2
  14. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs.map +1 -1
  15. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +2 -2
  16. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
  17. package/package.json +52 -52
  18. package/src/lib/components/data-columns/data-columns.component.d.ts +12 -3
  19. package/src/lib/components/data-filter/data-filter.component.d.ts +59 -7
  20. package/src/lib/components/data-filter/data-filter.types.d.ts +4 -2
  21. package/src/lib/components/data-table/data-table.types.d.ts +31 -0
@@ -1,5 +1,6 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { STRING_OPERATORS, NUMBER_OPERATORS, DATE_OPERATORS, } from './data-filter.types';
1
+ import { Component, Input, Output, EventEmitter, } from '@angular/core';
2
+ import { ColumnValueType, } from 'verben-ng-ui/src/lib/components/data-table';
3
+ import { STRING_OPERATORS, NUMBER_OPERATORS, DATE_OPERATORS, BOOL_OPERATORS, ENUM_OPERATORS, } from './data-filter.types';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common";
5
6
  import * as i2 from "@angular/forms";
@@ -10,6 +11,12 @@ import * as i6 from "verben-ng-ui/src/lib/verbena-input";
10
11
  export class DataFilterComponent {
11
12
  columns;
12
13
  data;
14
+ /**
15
+ * Optional restored filters: the panel opens pre-populated with these as
16
+ * selected filter chips. Applied once (the first time a non-empty value
17
+ * arrives) so it never clobbers the user's in-progress edits afterwards.
18
+ */
19
+ initialFilters;
13
20
  filterApplied = new EventEmitter();
14
21
  resetFilter = new EventEmitter();
15
22
  filterableColumns = [];
@@ -19,8 +26,48 @@ export class DataFilterComponent {
19
26
  showAllFilters = false;
20
27
  maxVisibleItems = 3;
21
28
  currentColumnType = null;
29
+ /**
30
+ * Options for the value dropdown when the selected column is bool or enum.
31
+ * Always normalised to `{ label, value }` so the template binds one shape.
32
+ */
33
+ valueOptions = [];
34
+ /**
35
+ * Held as strings rather than booleans: `verben-drop-down` gates its selected
36
+ * label on a truthiness check, so an option valued `false` would render as
37
+ * though nothing were picked. Coerced back to a boolean in `addFilter`.
38
+ */
39
+ boolOptions = [
40
+ { label: 'Yes', value: 'true' },
41
+ { label: 'No', value: 'false' },
42
+ ];
43
+ // Set once the user edits the panel, so restored/host filters no longer
44
+ // overwrite their in-progress work.
45
+ userTouched = false;
22
46
  ngOnInit() {
23
47
  this.initializeFilterableColumns();
48
+ this.hydrateSavedFilters();
49
+ }
50
+ ngOnChanges(changes) {
51
+ // Pick up filters restored asynchronously by the host after first render.
52
+ if (changes['initialFilters']) {
53
+ this.hydrateSavedFilters();
54
+ }
55
+ }
56
+ /**
57
+ * Seed the saved-filter chips from the restored filters. Skipped once the user
58
+ * has touched the panel so it never overwrites their in-progress edits.
59
+ */
60
+ hydrateSavedFilters() {
61
+ if (this.userTouched)
62
+ return;
63
+ this.savedFilters = (this.initialFilters ?? []).map((filter) => ({
64
+ ...filter,
65
+ selected: true,
66
+ }));
67
+ }
68
+ /** Marks the panel as user-edited (called from template interactions). */
69
+ markTouched() {
70
+ this.userTouched = true;
24
71
  }
25
72
  initializeFilterableColumns() {
26
73
  this.filterableColumns = this.columns.filter((col) => col.accessorKey);
@@ -34,7 +81,13 @@ export class DataFilterComponent {
34
81
  this.currentFilter.operator = undefined;
35
82
  this.currentFilter.value = undefined;
36
83
  // Determine column type and set available operators
37
- this.currentColumnType = this.determineColumnType(column);
84
+ this.currentColumnType = this.resolveColumnType(column);
85
+ this.valueOptions =
86
+ this.currentColumnType === 'bool'
87
+ ? this.boolOptions
88
+ : this.currentColumnType === 'enum'
89
+ ? this.normalizeValueOptions(column.valueOptions)
90
+ : [];
38
91
  switch (this.currentColumnType) {
39
92
  case 'string':
40
93
  this.availableOperators = STRING_OPERATORS;
@@ -45,23 +98,34 @@ export class DataFilterComponent {
45
98
  case 'date':
46
99
  this.availableOperators = DATE_OPERATORS;
47
100
  break;
101
+ case 'bool':
102
+ this.availableOperators = BOOL_OPERATORS;
103
+ break;
104
+ case 'enum':
105
+ this.availableOperators = ENUM_OPERATORS;
106
+ break;
48
107
  default:
49
108
  this.availableOperators = [];
50
109
  }
51
110
  }
52
111
  addFilter() {
53
- if (!this.currentFilter.columnId ||
54
- !this.currentFilter.operator ||
55
- !this.currentFilter.value) {
112
+ const value = this.currentFilter.value;
113
+ // Checked explicitly rather than for falsiness: `false` is a valid bool
114
+ // filter and `0` a valid number one.
115
+ const hasValue = value !== undefined && value !== null && value !== '';
116
+ if (!this.currentFilter.columnId || !this.currentFilter.operator || !hasValue) {
56
117
  return;
57
118
  }
58
119
  const newFilter = {
59
120
  columnId: this.currentFilter.columnId,
60
121
  operator: this.currentFilter.operator,
61
- value: this.currentFilter.value,
122
+ // Bool values round-trip through the dropdown as strings; hosts receive
123
+ // a real boolean.
124
+ value: this.currentColumnType === 'bool' ? value === 'true' : value,
62
125
  selected: true,
63
126
  };
64
127
  this.savedFilters.unshift(newFilter);
128
+ this.userTouched = true;
65
129
  this.resetCurrentFilter();
66
130
  }
67
131
  getFilterDescription(filter) {
@@ -70,46 +134,135 @@ export class DataFilterComponent {
70
134
  return '';
71
135
  const columnName = typeof column.header === 'function' ? column.header({}) : column.header;
72
136
  const operator = this.getOperatorLabel(filter.operator);
73
- let value = filter.value;
74
- if (value instanceof Date) {
75
- value = value.toLocaleDateString();
137
+ return `${columnName} ${operator} ${this.getValueLabel(column, filter.value)}`;
138
+ }
139
+ /** Renders a stored filter value the way it was chosen, not as raw data. */
140
+ getValueLabel(column, value) {
141
+ if (value instanceof Date)
142
+ return value.toLocaleDateString();
143
+ if (typeof value === 'boolean')
144
+ return value ? 'Yes' : 'No';
145
+ // The native date input yields a 'YYYY-MM-DD' string; restored filters may
146
+ // carry one too. Parsed as local time — `new Date('2026-07-28')` is treated
147
+ // as UTC and would display as the previous day west of Greenwich.
148
+ if (typeof value === 'string' && this.isDateString(value)) {
149
+ const [year, month, day] = value.slice(0, 10).split('-').map(Number);
150
+ return new Date(year, month - 1, day).toLocaleDateString();
76
151
  }
77
- return `${columnName} ${operator} ${value}`;
152
+ const option = this.normalizeValueOptions(column.valueOptions).find((candidate) => candidate.value === value);
153
+ return option ? option.label : `${value}`;
78
154
  }
79
155
  getOperatorLabel(operatorValue) {
80
156
  const operator = [
81
157
  ...STRING_OPERATORS,
82
158
  ...NUMBER_OPERATORS,
83
159
  ...DATE_OPERATORS,
160
+ ...BOOL_OPERATORS,
161
+ ...ENUM_OPERATORS,
84
162
  ].find((op) => op.value === operatorValue);
85
163
  return operator ? operator.label.toLowerCase() : operatorValue;
86
164
  }
87
- determineColumnType(column) {
88
- if (!this.data.length)
89
- return null;
90
- const sampleValue = column.accessorKey
91
- ? this.data[0][column.accessorKey]
92
- : column.accessorFn
93
- ? column.accessorFn(this.data[0])
94
- : null;
95
- if (sampleValue === null)
96
- return null;
165
+ /**
166
+ * Prefers the type declared on the column, falling back to inspecting the data
167
+ * only when the host has not declared one.
168
+ */
169
+ resolveColumnType(column) {
170
+ if (column.valueType) {
171
+ // An Enum with no declared members has nothing to populate a dropdown
172
+ // with, so it degrades to a free-text filter rather than an empty select.
173
+ if (column.valueType === ColumnValueType.Enum &&
174
+ !this.normalizeValueOptions(column.valueOptions).length) {
175
+ return 'string';
176
+ }
177
+ return this.mapValueType(column.valueType);
178
+ }
179
+ return this.inferColumnType(column);
180
+ }
181
+ mapValueType(valueType) {
182
+ switch (valueType) {
183
+ case ColumnValueType.Date:
184
+ return 'date';
185
+ case ColumnValueType.Number:
186
+ case ColumnValueType.Integer:
187
+ case ColumnValueType.Decimal:
188
+ case ColumnValueType.Currency:
189
+ return 'number';
190
+ case ColumnValueType.Bool:
191
+ return 'bool';
192
+ case ColumnValueType.Enum:
193
+ return 'enum';
194
+ default:
195
+ return 'string';
196
+ }
197
+ }
198
+ /**
199
+ * Best-effort type detection for columns that declare no `valueType`. Falls
200
+ * back to 'string' rather than null so the value field always renders.
201
+ */
202
+ inferColumnType(column) {
203
+ const sampleValue = this.firstNonEmptyValue(column);
97
204
  if (sampleValue instanceof Date)
98
205
  return 'date';
99
206
  if (typeof sampleValue === 'number')
100
207
  return 'number';
208
+ if (typeof sampleValue === 'boolean')
209
+ return 'bool';
210
+ if (typeof sampleValue === 'string' && this.isDateString(sampleValue)) {
211
+ return 'date';
212
+ }
101
213
  return 'string';
102
214
  }
215
+ /**
216
+ * Scans rows for the first usable sample — sampling only the first row misses
217
+ * the type whenever that row happens to hold a null or undefined value.
218
+ */
219
+ firstNonEmptyValue(column) {
220
+ for (const row of this.data ?? []) {
221
+ const value = this.readValue(column, row);
222
+ if (value !== null && value !== undefined && value !== '')
223
+ return value;
224
+ }
225
+ return null;
226
+ }
227
+ readValue(column, row) {
228
+ if (column.accessorKey)
229
+ return row[column.accessorKey];
230
+ if (column.accessorFn)
231
+ return column.accessorFn(row);
232
+ return null;
233
+ }
234
+ /**
235
+ * Dates usually arrive from an API as ISO strings, which would otherwise be
236
+ * typed as plain text. Anchored to ISO-ish input so ordinary strings that
237
+ * `Date` happens to parse (e.g. "March") are not misread as dates.
238
+ */
239
+ isDateString(value) {
240
+ if (!/^\d{4}-\d{2}-\d{2}([T\s]|$)/.test(value))
241
+ return false;
242
+ return !Number.isNaN(new Date(value).getTime());
243
+ }
244
+ /** Accepts either supported `valueOptions` shape and returns one of them. */
245
+ normalizeValueOptions(options) {
246
+ if (!options?.length)
247
+ return [];
248
+ return options.map((option) => typeof option === 'string'
249
+ ? { label: option, value: option }
250
+ : option);
251
+ }
103
252
  resetCurrentFilter() {
104
253
  this.currentFilter = {};
105
254
  this.availableOperators = [];
255
+ this.currentColumnType = null;
256
+ this.valueOptions = [];
106
257
  }
107
258
  resetAll() {
259
+ this.userTouched = true;
108
260
  this.savedFilters = [];
109
261
  this.resetCurrentFilter();
110
262
  this.resetFilter.emit();
111
263
  }
112
264
  applyFilters() {
265
+ this.userTouched = true;
113
266
  const activeFilters = this.savedFilters
114
267
  .filter((filter) => filter.selected)
115
268
  .map(({ columnId, operator, value }) => ({
@@ -136,18 +289,20 @@ export class DataFilterComponent {
136
289
  return this.savedFilters.filter((filter) => filter.selected).length;
137
290
  }
138
291
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeholder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeholder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchCase=\"'string'\"\n type=\"text\"\n placeholder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data", initialFilters: "initialFilters" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
140
293
  }
141
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, decorators: [{
142
295
  type: Component,
143
- args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeholder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeholder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchCase=\"'string'\"\n type=\"text\"\n placeholder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"] }]
296
+ args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"] }]
144
297
  }], propDecorators: { columns: [{
145
298
  type: Input
146
299
  }], data: [{
147
300
  type: Input
301
+ }], initialFilters: [{
302
+ type: Input
148
303
  }], filterApplied: [{
149
304
  type: Output
150
305
  }], resetFilter: [{
151
306
  type: Output
152
307
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUlMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNmLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBTzdCLE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsT0FBTyxDQUF5QjtJQUNoQyxJQUFJLENBQU87SUFDVixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFDdEQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0MsaUJBQWlCLEdBQTBCLEVBQUUsQ0FBQztJQUM5QyxrQkFBa0IsR0FBcUIsRUFBRSxDQUFDO0lBQzFDLFlBQVksR0FBZ0QsRUFBRSxDQUFDO0lBQy9ELGFBQWEsR0FBNkIsRUFBRSxDQUFDO0lBQzdDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixpQkFBaUIsR0FBd0MsSUFBSSxDQUFDO0lBRTlELFFBQVE7UUFDTixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdB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QU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0ExSlUsbUJBQW1COzRGQUFuQixtQkFBbUIsOEtDaEJoQywrN0lBZ0pBOzs0RkRoSWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7XG4gIEZpbHRlck9wZXJhdG9yLFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlckdyb3VwLFxuICBTVFJJTkdfT1BFUkFUT1JTLFxuICBOVU1CRVJfT1BFUkFUT1JTLFxuICBEQVRFX09QRVJBVE9SUyxcbn0gZnJvbSAnLi9kYXRhLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDb25kaXRpb25bXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBmaWx0ZXJhYmxlQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIGF2YWlsYWJsZU9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXSA9IFtdO1xuICBzYXZlZEZpbHRlcnM6IChGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgY3VycmVudEZpbHRlcjogUGFydGlhbDxGaWx0ZXJDb25kaXRpb24+ID0ge307XG4gIHNob3dBbGxGaWx0ZXJzID0gZmFsc2U7XG4gIG1heFZpc2libGVJdGVtcyA9IDM7XG4gIGN1cnJlbnRDb2x1bW5UeXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRmlsdGVyYWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSk7XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdChjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgPSBjb2x1bW5JZDtcblxuICAgIC8vIFJlc2V0IG90aGVyIHZhbHVlc1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29sdW1uIHR5cGUgYW5kIHNldCBhdmFpbGFibGUgb3BlcmF0b3JzXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9IHRoaXMuZGV0ZXJtaW5lQ29sdW1uVHlwZShjb2x1bW4pO1xuXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRDb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFNUUklOR19PUEVSQVRPUlM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBOVU1CRVJfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IERBVEVfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gICAgfVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfHxcbiAgICAgICF0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWVcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGaWx0ZXI6IEZpbHRlckNvbmRpdGlvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSA9IHtcbiAgICAgIGNvbHVtbklkOiB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQhLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcixcbiAgICAgIHZhbHVlOiB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlZEZpbHRlcnMudW5zaGlmdChuZXdGaWx0ZXIpO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXI6IEZpbHRlckNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmlkID09PSBmaWx0ZXIuY29sdW1uSWRcbiAgICApO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID1cbiAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yTGFiZWwoZmlsdGVyLm9wZXJhdG9yKTtcblxuICAgIGxldCB2YWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29sdW1uTmFtZX0gJHtvcGVyYXRvcn0gJHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvckxhYmVsKG9wZXJhdG9yVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBbXG4gICAgICAuLi5TVFJJTkdfT1BFUkFUT1JTLFxuICAgICAgLi4uTlVNQkVSX09QRVJBVE9SUyxcbiAgICAgIC4uLkRBVEVfT1BFUkFUT1JTLFxuICAgIF0uZmluZCgob3ApID0+IG9wLnZhbHVlID09PSBvcGVyYXRvclZhbHVlKTtcbiAgICByZXR1cm4gb3BlcmF0b3IgPyBvcGVyYXRvci5sYWJlbC50b0xvd2VyQ2FzZSgpIDogb3BlcmF0b3JWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQ29sdW1uVHlwZShcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD5cbiAgKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8IG51bGwge1xuICAgIGlmICghdGhpcy5kYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IGNvbHVtbi5hY2Nlc3NvcktleVxuICAgICAgPyB0aGlzLmRhdGFbMF1bY29sdW1uLmFjY2Vzc29yS2V5XVxuICAgICAgOiBjb2x1bW4uYWNjZXNzb3JGblxuICAgICAgPyBjb2x1bW4uYWNjZXNzb3JGbih0aGlzLmRhdGFbMF0pXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoc2FtcGxlVmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHNhbXBsZVZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuICdkYXRlJztcbiAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuICdudW1iZXInO1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDdXJyZW50RmlsdGVyKCkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IHt9O1xuICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gIH1cblxuICByZXNldEFsbCgpIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IFtdO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gICAgdGhpcy5yZXNldEZpbHRlci5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZClcbiAgICAgIC5tYXAoKHsgY29sdW1uSWQsIG9wZXJhdG9yLCB2YWx1ZSB9KSA9PiAoe1xuICAgICAgICBjb2x1bW5JZCxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIHZhbHVlLFxuICAgICAgfSkpO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZC5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uTGFiZWwoY29sdW1uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb2x1bW5cbiAgICAgID8gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjb2x1bW4uaGVhZGVyKHt9KVxuICAgICAgICA6IGNvbHVtbi5oZWFkZXJcbiAgICAgIDogY29sdW1uSWQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbEZpbHRlcnNcbiAgICAgID8gdGhpcy5zYXZlZEZpbHRlcnNcbiAgICAgIDogdGhpcy5zYXZlZEZpbHRlcnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlSXRlbXMpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZUZpbHRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpLmxlbmd0aDtcbiAgfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIlxuICBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICBGaWx0ZXIgPHN1cD4oe3sgYWN0aXZlRmlsdGVyQ291bnQgfX0pPC9zdXA+XG4gICAgPC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDwhLS0gU2F2ZWQgRmlsdGVycyBTZWN0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5GaWx0ZXJzPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdmlzaWJsZUZpbHRlcnNcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIuc2VsZWN0ZWRcIiAvPlxuICAgICAgICAgIDxsYWJlbD57eyBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXIpIH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNhdmVkRmlsdGVycy5sZW5ndGggPiBtYXhWaXNpYmxlSXRlbXNcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICAgIChjbGljayk9XCJzaG93QWxsRmlsdGVycyA9ICFzaG93QWxsRmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIHt7IHNob3dBbGxGaWx0ZXJzID8gXCJTaG93IExlc3NcIiA6IFwiU2hvdyBNb3JlXCIgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgPCEtLSBOZXcgRmlsdGVyIE9wZXJhdGlvbiAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+T3BlcmF0aW9uPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwib3BlcmF0aW9uLWdyaWRcIj5cbiAgICAgICAgPCEtLSBDb2x1bW4gU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNvbHVtblwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwiaGVhZGVyXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIuY29sdW1uSWRcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29sdW1uU2VsZWN0KCRldmVudClcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDwhLS0gT3BlcmF0b3IgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IG9wZXJhdG9yXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVPcGVyYXRvcnNcIlxuICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5vcGVyYXRvclwiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgPCEtLSBWYWx1ZSBJbnB1dCBiYXNlZCBvbiB0eXBlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjdXJyZW50Q29sdW1uVHlwZVwiPlxuICAgICAgICAgIDwhLS0gRGF0ZSBJbnB1dCAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbnVtYmVyXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IChkZWZhdWx0KSAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgdGV4dFwiXG4gICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiNXB4XCJcbiAgICAgICAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci10ZXh0KVwiXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgICAgcGQ9XCIycHggNnB4XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b24gbWwtYXV0b1wiIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiPisgQWRkPC9idXR0b24+XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiPkZpbHRlcjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGVBQWUsR0FDaEIsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBS0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQU83QixNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE9BQU8sQ0FBeUI7SUFDaEMsSUFBSSxDQUFPO0lBQ3BCOzs7O09BSUc7SUFDTSxjQUFjLENBQXFCO0lBQ2xDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUN0RCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQyxpQkFBaUIsR0FBMEIsRUFBRSxDQUFDO0lBQzlDLGtCQUFrQixHQUFxQixFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFnRCxFQUFFLENBQUM7SUFDL0QsYUFBYSxHQUE2QixFQUFFLENBQUM7SUFDN0MsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLGlCQUFpQixHQUE4QixJQUFJLENBQUM7SUFDcEQ7OztPQUdHO0lBQ0gsWUFBWSxHQUF3QixFQUFFLENB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QVEsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0E3VFUsbUJBQW1COzRGQUFuQixtQkFBbUIscU9DL0JoQywwM0tBeUtBOzs0RkQxSWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb2x1bW5WYWx1ZU9wdGlvbixcbiAgQ29sdW1uVmFsdWVUeXBlLFxufSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHtcbiAgRmlsdGVyT3BlcmF0b3IsXG4gIEZpbHRlck9wZXJhdG9yVHlwZSxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJHcm91cCxcbiAgU1RSSU5HX09QRVJBVE9SUyxcbiAgTlVNQkVSX09QRVJBVE9SUyxcbiAgREFURV9PUEVSQVRPUlMsXG4gIEJPT0xfT1BFUkFUT1JTLFxuICBFTlVNX09QRVJBVE9SUyxcbn0gZnJvbSAnLi9kYXRhLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD5bXTtcbiAgQElucHV0KCkgZGF0YSE6IFRbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlc3RvcmVkIGZpbHRlcnM6IHRoZSBwYW5lbCBvcGVucyBwcmUtcG9wdWxhdGVkIHdpdGggdGhlc2UgYXNcbiAgICogc2VsZWN0ZWQgZmlsdGVyIGNoaXBzLiBBcHBsaWVkIG9uY2UgKHRoZSBmaXJzdCB0aW1lIGEgbm9uLWVtcHR5IHZhbHVlXG4gICAqIGFycml2ZXMpIHNvIGl0IG5ldmVyIGNsb2JiZXJzIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgZWRpdHMgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxGaWx0ZXJzPzogRmlsdGVyQ29uZGl0aW9uW107XG4gIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDb25kaXRpb25bXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBmaWx0ZXJhYmxlQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIGF2YWlsYWJsZU9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXSA9IFtdO1xuICBzYXZlZEZpbHRlcnM6IChGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgY3VycmVudEZpbHRlcjogUGFydGlhbDxGaWx0ZXJDb25kaXRpb24+ID0ge307XG4gIHNob3dBbGxGaWx0ZXJzID0gZmFsc2U7XG4gIG1heFZpc2libGVJdGVtcyA9IDM7XG4gIGN1cnJlbnRDb2x1bW5UeXBlOiBGaWx0ZXJPcGVyYXRvclR5cGUgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSB2YWx1ZSBkcm9wZG93biB3aGVuIHRoZSBzZWxlY3RlZCBjb2x1bW4gaXMgYm9vbCBvciBlbnVtLlxuICAgKiBBbHdheXMgbm9ybWFsaXNlZCB0byBgeyBsYWJlbCwgdmFsdWUgfWAgc28gdGhlIHRlbXBsYXRlIGJpbmRzIG9uZSBzaGFwZS5cbiAgICovXG4gIHZhbHVlT3B0aW9uczogQ29sdW1uVmFsdWVPcHRpb25bXSA9IFtdO1xuICAvKipcbiAgICogSGVsZCBhcyBzdHJpbmdzIHJhdGhlciB0aGFuIGJvb2xlYW5zOiBgdmVyYmVuLWRyb3AtZG93bmAgZ2F0ZXMgaXRzIHNlbGVjdGVkXG4gICAqIGxhYmVsIG9uIGEgdHJ1dGhpbmVzcyBjaGVjaywgc28gYW4gb3B0aW9uIHZhbHVlZCBgZmFsc2VgIHdvdWxkIHJlbmRlciBhc1xuICAgKiB0aG91Z2ggbm90aGluZyB3ZXJlIHBpY2tlZC4gQ29lcmNlZCBiYWNrIHRvIGEgYm9vbGVhbiBpbiBgYWRkRmlsdGVyYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vbE9wdGlvbnM6IENvbHVtblZhbHVlT3B0aW9uW10gPSBbXG4gICAgeyBsYWJlbDogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSxcbiAgICB7IGxhYmVsOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICBdO1xuICAvLyBTZXQgb25jZSB0aGUgdXNlciBlZGl0cyB0aGUgcGFuZWwsIHNvIHJlc3RvcmVkL2hvc3QgZmlsdGVycyBubyBsb25nZXJcbiAgLy8gb3ZlcndyaXRlIHRoZWlyIGluLXByb2dyZXNzIHdvcmsuXG4gIHByaXZhdGUgdXNlclRvdWNoZWQgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJhYmxlQ29sdW1ucygpO1xuICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFBpY2sgdXAgZmlsdGVycyByZXN0b3JlZCBhc3luY2hyb25vdXNseSBieSB0aGUgaG9zdCBhZnRlciBmaXJzdCByZW5kZXIuXG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxGaWx0ZXJzJ10pIHtcbiAgICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVkIHRoZSBzYXZlZC1maWx0ZXIgY2hpcHMgZnJvbSB0aGUgcmVzdG9yZWQgZmlsdGVycy4gU2tpcHBlZCBvbmNlIHRoZSB1c2VyXG4gICAqIGhhcyB0b3VjaGVkIHRoZSBwYW5lbCBzbyBpdCBuZXZlciBvdmVyd3JpdGVzIHRoZWlyIGluLXByb2dyZXNzIGVkaXRzLlxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlU2F2ZWRGaWx0ZXJzKCkge1xuICAgIGlmICh0aGlzLnVzZXJUb3VjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSAodGhpcy5pbml0aWFsRmlsdGVycyA/PyBbXSkubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKiogTWFya3MgdGhlIHBhbmVsIGFzIHVzZXItZWRpdGVkIChjYWxsZWQgZnJvbSB0ZW1wbGF0ZSBpbnRlcmFjdGlvbnMpLiAqL1xuICBtYXJrVG91Y2hlZCgpIHtcbiAgICB0aGlzLnVzZXJUb3VjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSk7XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdChjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgPSBjb2x1bW5JZDtcblxuICAgIC8vIFJlc2V0IG90aGVyIHZhbHVlc1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29sdW1uIHR5cGUgYW5kIHNldCBhdmFpbGFibGUgb3BlcmF0b3JzXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9IHRoaXMucmVzb2x2ZUNvbHVtblR5cGUoY29sdW1uKTtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9XG4gICAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID09PSAnYm9vbCdcbiAgICAgICAgPyB0aGlzLmJvb2xPcHRpb25zXG4gICAgICAgIDogdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9PT0gJ2VudW0nXG4gICAgICAgID8gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucylcbiAgICAgICAgOiBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50Q29sdW1uVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBTVFJJTkdfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gTlVNQkVSX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBEQVRFX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib29sJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBCT09MX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBFTlVNX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZpbHRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3VycmVudEZpbHRlci52YWx1ZTtcbiAgICAvLyBDaGVja2VkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gZm9yIGZhbHNpbmVzczogYGZhbHNlYCBpcyBhIHZhbGlkIGJvb2xcbiAgICAvLyBmaWx0ZXIgYW5kIGAwYCBhIHZhbGlkIG51bWJlciBvbmUuXG4gICAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJztcblxuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkIHx8ICF0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfHwgIWhhc1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsdGVyOiBGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0gPSB7XG4gICAgICBjb2x1bW5JZDogdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkISxcbiAgICAgIG9wZXJhdG9yOiB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IsXG4gICAgICAvLyBCb29sIHZhbHVlcyByb3VuZC10cmlwIHRocm91Z2ggdGhlIGRyb3Bkb3duIGFzIHN0cmluZ3M7IGhvc3RzIHJlY2VpdmVcbiAgICAgIC8vIGEgcmVhbCBib29sZWFuLlxuICAgICAgdmFsdWU6IHRoaXMuY3VycmVudENvbHVtblR5cGUgPT09ICdib29sJyA/IHZhbHVlID09PSAndHJ1ZScgOiB2YWx1ZSEsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlZEZpbHRlcnMudW5zaGlmdChuZXdGaWx0ZXIpO1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXI6IEZpbHRlckNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmlkID09PSBmaWx0ZXIuY29sdW1uSWRcbiAgICApO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID1cbiAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yTGFiZWwoZmlsdGVyLm9wZXJhdG9yKTtcblxuICAgIHJldHVybiBgJHtjb2x1bW5OYW1lfSAke29wZXJhdG9yfSAke3RoaXMuZ2V0VmFsdWVMYWJlbChjb2x1bW4sIGZpbHRlci52YWx1ZSl9YDtcbiAgfVxuXG4gIC8qKiBSZW5kZXJzIGEgc3RvcmVkIGZpbHRlciB2YWx1ZSB0aGUgd2F5IGl0IHdhcyBjaG9zZW4sIG5vdCBhcyByYXcgZGF0YS4gKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZUxhYmVsKFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICB2YWx1ZTogRmlsdGVyQ29uZGl0aW9uWyd2YWx1ZSddXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlID8gJ1llcycgOiAnTm8nO1xuXG4gICAgLy8gVGhlIG5hdGl2ZSBkYXRlIGlucHV0IHlpZWxkcyBhICdZWVlZLU1NLUREJyBzdHJpbmc7IHJlc3RvcmVkIGZpbHRlcnMgbWF5XG4gICAgLy8gY2Fycnkgb25lIHRvby4gUGFyc2VkIGFzIGxvY2FsIHRpbWUg4oCUIGBuZXcgRGF0ZSgnMjAyNi0wNy0yOCcpYCBpcyB0cmVhdGVkXG4gICAgLy8gYXMgVVRDIGFuZCB3b3VsZCBkaXNwbGF5IGFzIHRoZSBwcmV2aW91cyBkYXkgd2VzdCBvZiBHcmVlbndpY2guXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0RhdGVTdHJpbmcodmFsdWUpKSB7XG4gICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZS5zbGljZSgwLCAxMCkuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucykuZmluZChcbiAgICAgIChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS52YWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvckxhYmVsKG9wZXJhdG9yVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBbXG4gICAgICAuLi5TVFJJTkdfT1BFUkFUT1JTLFxuICAgICAgLi4uTlVNQkVSX09QRVJBVE9SUyxcbiAgICAgIC4uLkRBVEVfT1BFUkFUT1JTLFxuICAgICAgLi4uQk9PTF9PUEVSQVRPUlMsXG4gICAgICAuLi5FTlVNX09QRVJBVE9SUyxcbiAgICBdLmZpbmQoKG9wKSA9PiBvcC52YWx1ZSA9PT0gb3BlcmF0b3JWYWx1ZSk7XG4gICAgcmV0dXJuIG9wZXJhdG9yID8gb3BlcmF0b3IubGFiZWwudG9Mb3dlckNhc2UoKSA6IG9wZXJhdG9yVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJlZmVycyB0aGUgdHlwZSBkZWNsYXJlZCBvbiB0aGUgY29sdW1uLCBmYWxsaW5nIGJhY2sgdG8gaW5zcGVjdGluZyB0aGUgZGF0YVxuICAgKiBvbmx5IHdoZW4gdGhlIGhvc3QgaGFzIG5vdCBkZWNsYXJlZCBvbmUuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVDb2x1bW5UeXBlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPik6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUpIHtcbiAgICAgIC8vIEFuIEVudW0gd2l0aCBubyBkZWNsYXJlZCBtZW1iZXJzIGhhcyBub3RoaW5nIHRvIHBvcHVsYXRlIGEgZHJvcGRvd25cbiAgICAgIC8vIHdpdGgsIHNvIGl0IGRlZ3JhZGVzIHRvIGEgZnJlZS10ZXh0IGZpbHRlciByYXRoZXIgdGhhbiBhbiBlbXB0eSBzZWxlY3QuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi52YWx1ZVR5cGUgPT09IENvbHVtblZhbHVlVHlwZS5FbnVtICYmXG4gICAgICAgICF0aGlzLm5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhjb2x1bW4udmFsdWVPcHRpb25zKS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tYXBWYWx1ZVR5cGUoY29sdW1uLnZhbHVlVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5mZXJDb2x1bW5UeXBlKGNvbHVtbik7XG4gIH1cblxuICBwcml2YXRlIG1hcFZhbHVlVHlwZSh2YWx1ZVR5cGU6IENvbHVtblZhbHVlVHlwZSk6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5JbnRlZ2VyOlxuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRGVjaW1hbDpcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkN1cnJlbmN5OlxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5Cb29sOlxuICAgICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRW51bTpcbiAgICAgICAgcmV0dXJuICdlbnVtJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmVzdC1lZmZvcnQgdHlwZSBkZXRlY3Rpb24gZm9yIGNvbHVtbnMgdGhhdCBkZWNsYXJlIG5vIGB2YWx1ZVR5cGVgLiBGYWxsc1xuICAgKiBiYWNrIHRvICdzdHJpbmcnIHJhdGhlciB0aGFuIG51bGwgc28gdGhlIHZhbHVlIGZpZWxkIGFsd2F5cyByZW5kZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmZlckNvbHVtblR5cGUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogRmlsdGVyT3BlcmF0b3JUeXBlIHtcbiAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IHRoaXMuZmlyc3ROb25FbXB0eVZhbHVlKGNvbHVtbik7XG5cbiAgICBpZiAoc2FtcGxlVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGUnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2wnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNEYXRlU3RyaW5nKHNhbXBsZVZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRlJztcbiAgICB9XG4gICAgcmV0dXJuICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHJvd3MgZm9yIHRoZSBmaXJzdCB1c2FibGUgc2FtcGxlIOKAlCBzYW1wbGluZyBvbmx5IHRoZSBmaXJzdCByb3cgbWlzc2VzXG4gICAqIHRoZSB0eXBlIHdoZW5ldmVyIHRoYXQgcm93IGhhcHBlbnMgdG8gaG9sZCBhIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdE5vbkVtcHR5VmFsdWUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogdW5rbm93biB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZhbHVlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPiwgcm93OiBUKTogdW5rbm93biB7XG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkgcmV0dXJuIHJvd1tjb2x1bW4uYWNjZXNzb3JLZXldO1xuICAgIGlmIChjb2x1bW4uYWNjZXNzb3JGbikgcmV0dXJuIGNvbHVtbi5hY2Nlc3NvckZuKHJvdyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGF0ZXMgdXN1YWxseSBhcnJpdmUgZnJvbSBhbiBBUEkgYXMgSVNPIHN0cmluZ3MsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZVxuICAgKiB0eXBlZCBhcyBwbGFpbiB0ZXh0LiBBbmNob3JlZCB0byBJU08taXNoIGlucHV0IHNvIG9yZGluYXJ5IHN0cmluZ3MgdGhhdFxuICAgKiBgRGF0ZWAgaGFwcGVucyB0byBwYXJzZSAoZS5nLiBcIk1hcmNoXCIpIGFyZSBub3QgbWlzcmVhZCBhcyBkYXRlcy5cbiAgICovXG4gIHByaXZhdGUgaXNEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIS9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oW1RcXHNdfCQpLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLyoqIEFjY2VwdHMgZWl0aGVyIHN1cHBvcnRlZCBgdmFsdWVPcHRpb25zYCBzaGFwZSBhbmQgcmV0dXJucyBvbmUgb2YgdGhlbS4gKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVWYWx1ZU9wdGlvbnMoXG4gICAgb3B0aW9uczogc3RyaW5nW10gfCBDb2x1bW5WYWx1ZU9wdGlvbltdIHwgdW5kZWZpbmVkXG4gICk6IENvbHVtblZhbHVlT3B0aW9uW10ge1xuICAgIGlmICghb3B0aW9ucz8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgcmV0dXJuIChvcHRpb25zIGFzIHVua25vd25bXSkubWFwKChvcHRpb24pID0+XG4gICAgICB0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgbGFiZWw6IG9wdGlvbiwgdmFsdWU6IG9wdGlvbiB9XG4gICAgICAgIDogKG9wdGlvbiBhcyBDb2x1bW5WYWx1ZU9wdGlvbilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyID0ge307XG4gICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9IFtdO1xuICB9XG5cbiAgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy51c2VyVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLnJlc2V0Q3VycmVudEZpbHRlcigpO1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLnNhdmVkRmlsdGVyc1xuICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpXG4gICAgICAubWFwKCh7IGNvbHVtbklkLCBvcGVyYXRvciwgdmFsdWUgfSkgPT4gKHtcbiAgICAgICAgY29sdW1uSWQsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICB2YWx1ZSxcbiAgICAgIH0pKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQuZW1pdChhY3RpdmVGaWx0ZXJzKTtcbiAgfVxuXG4gIGdldENvbHVtbkxhYmVsKGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29sdW1uXG4gICAgICA/IHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgICAgOiBjb2x1bW4uaGVhZGVyXG4gICAgICA6IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0IHZpc2libGVGaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxGaWx0ZXJzXG4gICAgICA/IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICA6IHRoaXMuc2F2ZWRGaWx0ZXJzLnNsaWNlKDAsIHRoaXMubWF4VmlzaWJsZUl0ZW1zKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNhdmVkRmlsdGVycy5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLnNlbGVjdGVkKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tY2FyZFxuICB3aWR0aD1cIjI0cmVtXCJcbiAgYm9yZGVyUmFkaXVzPVwiMXJlbVwiXG4gIFtib3JkZXJdPVwiJzFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItcHJpbWFyeSknXCJcbiAgYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci1zdXJmYWNlKVwiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgRmlsdGVyIDxzdXA+KHt7IGFjdGl2ZUZpbHRlckNvdW50IH19KTwvc3VwPlxuICAgIDwvaDQ+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRBbGwoKVwiXG4gICAgPlxuICAgICAgUmVzZXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8IS0tIFNhdmVkIEZpbHRlcnMgU2VjdGlvbiAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RmlsdGVyczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHZpc2libGVGaWx0ZXJzXCIgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiZmlsdGVyLnNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwibWFya1RvdWNoZWQoKVwiIC8+XG4gICAgICAgICAgPGxhYmVsPnt7IGdldEZpbHRlckRlc2NyaXB0aW9uKGZpbHRlcikgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aCA+IG1heFZpc2libGVJdGVtc1wiXG4gICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dBbGxGaWx0ZXJzID0gIXNob3dBbGxGaWx0ZXJzXCJcbiAgICAgID5cbiAgICAgICAge3sgc2hvd0FsbEZpbHRlcnMgPyBcIlNob3cgTGVzc1wiIDogXCJTaG93IE1vcmVcIiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG5cbiAgICA8IS0tIE5ldyBGaWx0ZXIgT3BlcmF0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5PcGVyYXRpb248L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcGVyYXRpb24tZ3JpZFwiPlxuICAgICAgICA8IS0tIENvbHVtbiBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY29sdW1uXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJmaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5jb2x1bW5JZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db2x1bW5TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgPCEtLSBPcGVyYXRvciBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgb3BlcmF0b3JcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZU9wZXJhdG9yc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICA8IS0tIFZhbHVlIElucHV0IGJhc2VkIG9uIHR5cGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImN1cnJlbnRDb2x1bW5UeXBlXCI+XG4gICAgICAgICAgPCEtLSBEYXRlIElucHV0IOKAlCBuYXRpdmUgcmF0aGVyIHRoYW4gdGhlIGxpYnJhcnkgZGF0ZSBwaWNrZXIsIHdob3NlXG4gICAgICAgICAgICAgICBvdmVybGF5IHJlbmRlcnMgb2ZmIHNjcmVlbiBmcm9tIHRoaXMgbmFycm93IHBhbmVsLiAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgbnVtYmVyXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBZZXMgLyBObyBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYm9vbCdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBFbnVtIE1lbWJlciBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZW51bSdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IChkZWZhdWx0KSAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJFbnRlciB0ZXh0XCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvbiBtbC1hdXRvXCIgKGNsaWNrKT1cImFkZEZpbHRlcigpXCI+KyBBZGQ8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+RmlsdGVyPC9idXR0b24+XG4gIDwvZGl2PlxuPC92ZXJiZW4tY2FyZD5cbiJdfQ==
@@ -14,4 +14,12 @@ export const DATE_OPERATORS = [
14
14
  { label: 'Before', value: 'before', type: 'date' },
15
15
  { label: 'After', value: 'after', type: 'date' },
16
16
  ];
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzdELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ3JELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQy9ELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yVHlwZSA9ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyT3BlcmF0b3Ige1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICB0eXBlOiBGaWx0ZXJPcGVyYXRvclR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBTVFJJTkdfT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnU3RhcnRzIFdpdGgnLCB2YWx1ZTogJ3N0YXJ0c1dpdGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnRW5kcyBXaXRoJywgdmFsdWU6ICdlbmRzV2l0aCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIHsgbGFiZWw6ICdDb250YWlucycsIHZhbHVlOiAnY29udGFpbnMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnRXF1YWxzJywgdmFsdWU6ICdlcXVhbHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IE5VTUJFUl9PUEVSQVRPUlM6IEZpbHRlck9wZXJhdG9yW10gPSBbXG4gIHsgbGFiZWw6ICdFcXVhbCcsIHZhbHVlOiAnZXF1YWwnLCB0eXBlOiAnbnVtYmVyJyB9LFxuICB7IGxhYmVsOiAnR3JlYXRlciBUaGFuJywgdmFsdWU6ICdncmVhdGVyVGhhbicsIHR5cGU6ICdudW1iZXInIH0sXG4gIHsgbGFiZWw6ICdMZXNzIFRoYW4nLCB2YWx1ZTogJ2xlc3NUaGFuJywgdHlwZTogJ251bWJlcicgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBEQVRFX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ09uJywgdmFsdWU6ICdvbicsIHR5cGU6ICdkYXRlJyB9LFxuICB7IGxhYmVsOiAnQmVmb3JlJywgdmFsdWU6ICdiZWZvcmUnLCB0eXBlOiAnZGF0ZScgfSxcbiAgeyBsYWJlbDogJ0FmdGVyJywgdmFsdWU6ICdhZnRlcicsIHR5cGU6ICdkYXRlJyB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xuICBjb2x1bW5JZDogc3RyaW5nO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU3RhdGUge1xuICBncm91cHM6IEZpbHRlckdyb3VwW107XG4gIGFjdGl2ZUZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdO1xufVxuIl19
17
+ export const BOOL_OPERATORS = [
18
+ { label: 'Is', value: 'is', type: 'bool' },
19
+ { label: 'Is Not', value: 'isNot', type: 'bool' },
20
+ ];
21
+ export const ENUM_OPERATORS = [
22
+ { label: 'Is', value: 'is', type: 'enum' },
23
+ { label: 'Is Not', value: 'isNot', type: 'enum' },
24
+ ];
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzdELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ3JELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQy9ELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0NBQ2xELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFCO0lBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDMUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3JUeXBlID1cbiAgfCAnc3RyaW5nJ1xuICB8ICdudW1iZXInXG4gIHwgJ2RhdGUnXG4gIHwgJ2Jvb2wnXG4gIHwgJ2VudW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wZXJhdG9yIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyT3BlcmF0b3JUeXBlO1xufVxuXG5leHBvcnQgY29uc3QgU1RSSU5HX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ1N0YXJ0cyBXaXRoJywgdmFsdWU6ICdzdGFydHNXaXRoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VuZHMgV2l0aCcsIHZhbHVlOiAnZW5kc1dpdGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnQ29udGFpbnMnLCB2YWx1ZTogJ2NvbnRhaW5zJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VxdWFscycsIHZhbHVlOiAnZXF1YWxzJywgdHlwZTogJ3N0cmluZycgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBOVU1CRVJfT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnRXF1YWwnLCB2YWx1ZTogJ2VxdWFsJywgdHlwZTogJ251bWJlcicgfSxcbiAgeyBsYWJlbDogJ0dyZWF0ZXIgVGhhbicsIHZhbHVlOiAnZ3JlYXRlclRoYW4nLCB0eXBlOiAnbnVtYmVyJyB9LFxuICB7IGxhYmVsOiAnTGVzcyBUaGFuJywgdmFsdWU6ICdsZXNzVGhhbicsIHR5cGU6ICdudW1iZXInIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgREFURV9PUEVSQVRPUlM6IEZpbHRlck9wZXJhdG9yW10gPSBbXG4gIHsgbGFiZWw6ICdPbicsIHZhbHVlOiAnb24nLCB0eXBlOiAnZGF0ZScgfSxcbiAgeyBsYWJlbDogJ0JlZm9yZScsIHZhbHVlOiAnYmVmb3JlJywgdHlwZTogJ2RhdGUnIH0sXG4gIHsgbGFiZWw6ICdBZnRlcicsIHZhbHVlOiAnYWZ0ZXInLCB0eXBlOiAnZGF0ZScgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBCT09MX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ0lzJywgdmFsdWU6ICdpcycsIHR5cGU6ICdib29sJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdib29sJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVOVU1fT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnSXMnLCB2YWx1ZTogJ2lzJywgdHlwZTogJ2VudW0nIH0sXG4gIHsgbGFiZWw6ICdJcyBOb3QnLCB2YWx1ZTogJ2lzTm90JywgdHlwZTogJ2VudW0nIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmRpdGlvbiB7XG4gIGNvbHVtbklkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU3RhdGUge1xuICBncm91cHM6IEZpbHRlckdyb3VwW107XG4gIGFjdGl2ZUZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdO1xufVxuIl19
@@ -1,4 +1,20 @@
1
- export {};
1
+ /**
2
+ * Declared type of a column's underlying value. Deliberately general rather than
3
+ * filter-specific: operation components that consume `ColumnDefinition` all need
4
+ * to know a column's type (the filter panel picks the value control from it, and
5
+ * import validation, sorting and exports have the same need).
6
+ */
7
+ export var ColumnValueType;
8
+ (function (ColumnValueType) {
9
+ ColumnValueType["String"] = "String";
10
+ ColumnValueType["Number"] = "Number";
11
+ ColumnValueType["Integer"] = "Integer";
12
+ ColumnValueType["Decimal"] = "Decimal";
13
+ ColumnValueType["Currency"] = "Currency";
14
+ ColumnValueType["Date"] = "Date";
15
+ ColumnValueType["Bool"] = "Bool";
16
+ ColumnValueType["Enum"] = "Enum";
17
+ })(ColumnValueType || (ColumnValueType = {}));
2
18
  // ====================================
3
19
  // export type ColumnDefinitionBase<T> = {
4
20
  // id: string;
@@ -35,4 +51,4 @@ export {};
35
51
  // | { [K in keyof T]: ColumnDefinitionWithKey<T, K> }[keyof T]
36
52
  // | ColumnDefinitionWithFn<T>
37
53
  // | ColumnDefinitionWithNeither<T>;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUE4RkEsdUNBQXVDO0FBRXZDLDBDQUEwQztBQUMxQyxnQkFBZ0I7QUFDaEIsOENBQThDO0FBQzlDLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsdUNBQXVDO0FBQ3ZDLHVDQUF1QztBQUN2QyxpQ0FBaUM7QUFDakMsOEJBQThCO0FBQzlCLHdCQUF3QjtBQUN4QixLQUFLO0FBRUwsNEVBQTRFO0FBQzVFLHVDQUF1QztBQUN2QyxPQUFPO0FBQ1Asc0JBQXNCO0FBQ3RCLGtDQUFrQztBQUNsQyxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBQ3hCLDRDQUE0QztBQUM1QyxLQUFLO0FBRUwsK0VBQStFO0FBQy9FLHlCQUF5QjtBQUN6QiwrQkFBK0I7QUFDL0IseUNBQXlDO0FBQ3pDLEtBQUs7QUFFTCwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIsS0FBSztBQUVMLHdFQUF3RTtBQUN4RSxvQ0FBb0M7QUFDcEMsaUVBQWlFO0FBQ2pFLGdDQUFnQztBQUNoQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBYnN0cmFjdENvbnRyb2xPcHRpb25zLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBGb3JtQ29udHJvbCxcbiAgVmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqIEJ1aWx0LWluIGFnZ3JlZ2F0aW9ucyB0aGF0IGNhbiBiZSBjb21wdXRlZCBvdmVyIGEgY29sdW1uJ3MgdmFsdWVzLiAqL1xuZXhwb3J0IHR5cGUgRm9vdGVyQWdncmVnYXRpb24gPSAnc3VtJyB8ICdhdmcnIHwgJ21pbicgfCAnbWF4JyB8ICdjb3VudCc7XG5cbi8qKlxuICogUmljaGVyIGRlY2xhcmF0aXZlIGZvb3RlciBjb25maWd1cmF0aW9uIGZvciBhIGNvbHVtbi4gT3ZlcnJpZGVzIHRoZSBzaW1wbGVcbiAqIGBmb290ZXJGbmAgd2hlbiBzZXQuIERyaXZlcyBib3RoIHRoZSB0YWJsZSdzIGA8dGZvb3Q+YCBhbmQgZXhwb3J0cy5cbiAqXG4gKiBWYWx1ZSBwcmVjZWRlbmNlIChoaWdoZXN0IOKGkiBsb3dlc3QpOiBgdmFsdWVGbmAg4oaSIGBhZ2dyZWdhdGlvbmAg4oaSIGxhYmVsLW9ubHkuXG4gKiBGb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIHJlbmRlcmVkIG1hcmt1cCB1c2UgYENvbHVtbkRlZmluaXRpb24uZm9vdGVyVGVtcGxhdGVgLFxuICogd2hpY2ggdGFrZXMgcHJlY2VkZW5jZSBpbiB0aGUgdGFibGUgKGJ1dCBpcyBpZ25vcmVkIGJ5IGV4cG9ydHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkZvb3RlckNvbmZpZzxUPiB7XG4gIC8qKiBCdWlsdC1pbiBhZ2dyZWdhdGlvbiBjb21wdXRlZCBvdmVyIHRoZSBjb2x1bW4ncyB2YWx1ZXMgYWNyb3NzIGFsbCByb3dzLiAqL1xuICBhZ2dyZWdhdGlvbj86IEZvb3RlckFnZ3JlZ2F0aW9uO1xuICAvKipcbiAgICogQ3VzdG9tIHJlZHVjZXIgcmVjZWl2aW5nIGV2ZXJ5IChub24tZ3JvdXApIHJvdyBhbmQgdGhlIGNvbHVtbi5cbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBhZ2dyZWdhdGlvbmAuXG4gICAqL1xuICB2YWx1ZUZuPzogKHJvd3M6IFRbXSwgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSA9PiBhbnk7XG4gIC8qKiBTdGF0aWMgbGFiZWwgcmVuZGVyZWQgYWxvbmdzaWRlIC8gaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgdmFsdWUgKGUuZy4gXCJUb3RhbFwiKS4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBGb3JtYXRzIHRoZSBjb21wdXRlZCB2YWx1ZSBmb3IgZGlzcGxheSBhbmQgc3RyaW5nLWJhc2VkIGV4cG9ydHMuICovXG4gIGZvcm1hdHRlcj86ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG4gIC8qKiBTZXQgdG8gYGZhbHNlYCB0byBrZWVwIHRoaXMgY29sdW1uJ3MgZm9vdGVyIG91dCBvZiBleHBvcnRzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGluY2x1ZGVJbkV4cG9ydD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVmaW5pdGlvbjxUPiB7XG4gIGlkOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nIHwgKChjb250ZXh0OiBhbnkpID0+IGFueSk7XG4gIGFjY2Vzc29yS2V5Pzoga2V5b2YgVDtcbiAgYWNjZXNzb3JGbj86IChyb3c6IFQpID0+IGFueTtcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgY2VsbEVkaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogU2ltcGxlIGZvb3RlciByZWR1Y2VyIOKAlCBhbmFsb2dvdXMgdG8gYGFjY2Vzc29yRm5gLiBSZWNlaXZlcyB0aGUgY29sdW1uJ3NcbiAgICogZXh0cmFjdGVkIHZhbHVlcyAoYW5kIHRoZSBub24tZ3JvdXAgcm93cykgYW5kIHJldHVybnMgdGhlIGZvb3RlciB2YWx1ZSB1c2VkXG4gICAqIGJ5IHRoZSB0YWJsZSBmb290ZXIgYW5kIGV4cG9ydHMuIE92ZXJyaWRkZW4gYnkgYGZvb3RlcmAgd2hlbiB0aGF0IGlzIHNldC5cbiAgICovXG4gIGZvb3RlckZuPzogKHZhbHVlczogYW55W10sIHJvd3M6IFRbXSkgPT4gYW55O1xuICAvKiogUmljaGVyIGRlY2xhcmF0aXZlIGZvb3Rlcjsgb3ZlcnJpZGVzIGBmb290ZXJGbmAgd2hlbiBzZXQuICovXG4gIGZvb3Rlcj86IENvbHVtbkZvb3RlckNvbmZpZzxUPjtcbiAgc29ydEFjdGlvbj86ICdBU0MnIHwgJ0RFU0MnO1xuICBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG4gIGdyb3VwTmFtZT86IHN0cmluZztcbiAgdmFsaWRhdG9yRm4/OiAodmFsdWU6IFRba2V5b2YgVF0pID0+IGJvb2xlYW47XG4gIGltcG9ydEtleT86IGtleW9mIFQ7XG4gIGNhbkltcG9ydD86IGJvb2xlYW47XG4gIGNhbkV4cG9ydD86IGJvb2xlYW47XG4gIGltcG9ydEJ5Pzoga2V5b2YgVCB8ICgoaW1wb3J0ZWRSb3c6IGFueSkgPT4gVFtrZXlvZiBUXSk7XG4gIGV4cG9ydEJ5Pzoga2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpO1xuICBpc0hpZGRlbj86IGJvb2xlYW47XG59XG5cbi8vIERlZmluZSBhIHR5cGUgdGhhdCBleHRlbmRzIFQgd2l0aCBhIF9rZXkgcHJvcGVydHlcbmV4cG9ydCB0eXBlIERhdGFXaXRoS2V5PFQ+ID0ge1xuICBfa2V5OiBzdHJpbmcgfCBudW1iZXI7XG4gIF9rZXlfcHJvcDoga2V5b2YgVCB8ICdfaW5kZXgnO1xuICBvcmlnaW5hbERhdGE6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBHcm91cGVkRGF0YVJvdzxUPiA9IERhdGFXaXRoS2V5PFQ+ICYge1xuICBpc0dyb3VwUm93PzogYm9vbGVhbjtcbiAgZ3JvdXBWYWx1ZT86IGFueTtcbiAgZ3JvdXBUaXRsZT86IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1Db250cm9sT2Y8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdPzogRm9ybUNvbnRyb2w7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Hcm91cENvbmZpZzxcbiAgVENvbnRyb2wgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9XG4+IHtcbiAgY29udHJvbHM6IFRDb250cm9sO1xuICB2YWxpZGF0b3JPck9wdHM/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBBYnN0cmFjdENvbnRyb2xPcHRpb25zIHwgbnVsbDtcbiAgYXN5bmNWYWxpZGF0b3I/OiBBc3luY1ZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbltdIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgRWRpdGVkRGF0YTxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0/OiBUW0tdIGV4dGVuZHMgb2JqZWN0ID8gUGFydGlhbDxUW0tdPiA6IFRbS107XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbkJhc2U8VD4gPSB7XG4vLyAgIGlkOiBzdHJpbmc7XG4vLyAgIGhlYWRlcjogc3RyaW5nIHwgKChjb250ZXh0OiBhbnkpID0+IGFueSk7XG4vLyAgIGNlbGxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4vLyAgIGNlbGxFZGl0VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuLy8gICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4vLyAgIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgc29ydEFjdGlvbj86ICdBU0MnIHwgJ0RFU0MnO1xuLy8gICBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG4vLyAgIGdyb3VwTmFtZT86IHN0cmluZztcbi8vIH07XG5cbi8vIC8vIEhlbHBlciB0eXBlIHRvIGNyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIHdpdGggYSBzcGVjaWZpYyBhY2Nlc3NvciBrZXlcbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb25XaXRoS2V5PFxuLy8gICBULFxuLy8gICBLIGV4dGVuZHMga2V5b2YgVFxuLy8gPiA9IENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ICYge1xuLy8gICBhY2Nlc3NvcktleTogSztcbi8vICAgYWNjZXNzb3JGbj86IG5ldmVyO1xuLy8gICB2YWxpZGF0b3JGbj86ICh2YWx1ZTogVFtLXSkgPT4gYm9vbGVhbjtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb25XaXRoRm48VCwgUiA9IGFueT4gPSBDb2x1bW5EZWZpbml0aW9uQmFzZTxUPiAmIHtcbi8vICAgYWNjZXNzb3JLZXk/OiBuZXZlcjtcbi8vICAgYWNjZXNzb3JGbjogKHJvdzogVCkgPT4gUjtcbi8vICAgdmFsaWRhdG9yRm4/OiAodmFsdWU6IFIpID0+IGJvb2xlYW47XG4vLyB9O1xuXG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uV2l0aE5laXRoZXI8VD4gPSBDb2x1bW5EZWZpbml0aW9uQmFzZTxUPiAmIHtcbi8vICAgYWNjZXNzb3JLZXk/OiBuZXZlcjtcbi8vICAgYWNjZXNzb3JGbj86IG5ldmVyO1xuLy8gICB2YWxpZGF0b3JGbj86IG5ldmVyO1xuLy8gfTtcblxuLy8gLy8gVW5pb24gdHlwZSB0aGF0IHJlcHJlc2VudHMgYWxsIHBvc3NpYmxlIGNvbHVtbiBkZWZpbml0aW9uIHZhcmlhbnRzXG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uPFQ+ID1cbi8vICAgfCB7IFtLIGluIGtleW9mIFRdOiBDb2x1bW5EZWZpbml0aW9uV2l0aEtleTxULCBLPiB9W2tleW9mIFRdXG4vLyAgIHwgQ29sdW1uRGVmaW5pdGlvbldpdGhGbjxUPlxuLy8gICB8IENvbHVtbkRlZmluaXRpb25XaXRoTmVpdGhlcjxUPjtcbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9DQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLGVBU1g7QUFURCxXQUFZLGVBQWU7SUFDekIsb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsd0NBQXFCLENBQUE7SUFDckIsZ0NBQWEsQ0FBQTtJQUNiLGdDQUFhLENBQUE7SUFDYixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLGVBQWUsS0FBZixlQUFlLFFBUzFCO0FBNEVELHVDQUF1QztBQUV2QywwQ0FBMEM7QUFDMUMsZ0JBQWdCO0FBQ2hCLDhDQUE4QztBQUM5QyxxQ0FBcUM7QUFDckMseUNBQXlDO0FBQ3pDLHVDQUF1QztBQUN2Qyx1Q0FBdUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDhCQUE4QjtBQUM5Qix3QkFBd0I7QUFDeEIsS0FBSztBQUVMLDRFQUE0RTtBQUM1RSx1Q0FBdUM7QUFDdkMsT0FBTztBQUNQLHNCQUFzQjtBQUN0QixrQ0FBa0M7QUFDbEMsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4Qiw0Q0FBNEM7QUFDNUMsS0FBSztBQUVMLCtFQUErRTtBQUMvRSx5QkFBeUI7QUFDekIsK0JBQStCO0FBQy9CLHlDQUF5QztBQUN6QyxLQUFLO0FBRUwsMkVBQTJFO0FBQzNFLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLEtBQUs7QUFFTCx3RUFBd0U7QUFDeEUsb0NBQW9DO0FBQ3BDLGlFQUFpRTtBQUNqRSxnQ0FBZ0M7QUFDaEMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sT3B0aW9ucyxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKiBCdWlsdC1pbiBhZ2dyZWdhdGlvbnMgdGhhdCBjYW4gYmUgY29tcHV0ZWQgb3ZlciBhIGNvbHVtbidzIHZhbHVlcy4gKi9cbmV4cG9ydCB0eXBlIEZvb3RlckFnZ3JlZ2F0aW9uID0gJ3N1bScgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCcgfCAnY291bnQnO1xuXG4vKipcbiAqIFJpY2hlciBkZWNsYXJhdGl2ZSBmb290ZXIgY29uZmlndXJhdGlvbiBmb3IgYSBjb2x1bW4uIE92ZXJyaWRlcyB0aGUgc2ltcGxlXG4gKiBgZm9vdGVyRm5gIHdoZW4gc2V0LiBEcml2ZXMgYm90aCB0aGUgdGFibGUncyBgPHRmb290PmAgYW5kIGV4cG9ydHMuXG4gKlxuICogVmFsdWUgcHJlY2VkZW5jZSAoaGlnaGVzdCDihpIgbG93ZXN0KTogYHZhbHVlRm5gIOKGkiBgYWdncmVnYXRpb25gIOKGkiBsYWJlbC1vbmx5LlxuICogRm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSByZW5kZXJlZCBtYXJrdXAgdXNlIGBDb2x1bW5EZWZpbml0aW9uLmZvb3RlclRlbXBsYXRlYCxcbiAqIHdoaWNoIHRha2VzIHByZWNlZGVuY2UgaW4gdGhlIHRhYmxlIChidXQgaXMgaWdub3JlZCBieSBleHBvcnRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Gb290ZXJDb25maWc8VD4ge1xuICAvKiogQnVpbHQtaW4gYWdncmVnYXRpb24gY29tcHV0ZWQgb3ZlciB0aGUgY29sdW1uJ3MgdmFsdWVzIGFjcm9zcyBhbGwgcm93cy4gKi9cbiAgYWdncmVnYXRpb24/OiBGb290ZXJBZ2dyZWdhdGlvbjtcbiAgLyoqXG4gICAqIEN1c3RvbSByZWR1Y2VyIHJlY2VpdmluZyBldmVyeSAobm9uLWdyb3VwKSByb3cgYW5kIHRoZSBjb2x1bW4uXG4gICAqIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBgYWdncmVnYXRpb25gLlxuICAgKi9cbiAgdmFsdWVGbj86IChyb3dzOiBUW10sIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPikgPT4gYW55O1xuICAvKiogU3RhdGljIGxhYmVsIHJlbmRlcmVkIGFsb25nc2lkZSAvIGluc3RlYWQgb2YgdGhlIGNvbXB1dGVkIHZhbHVlIChlLmcuIFwiVG90YWxcIikuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogRm9ybWF0cyB0aGUgY29tcHV0ZWQgdmFsdWUgZm9yIGRpc3BsYXkgYW5kIHN0cmluZy1iYXNlZCBleHBvcnRzLiAqL1xuICBmb3JtYXR0ZXI/OiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xuICAvKiogU2V0IHRvIGBmYWxzZWAgdG8ga2VlcCB0aGlzIGNvbHVtbidzIGZvb3RlciBvdXQgb2YgZXhwb3J0cy4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBpbmNsdWRlSW5FeHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlY2xhcmVkIHR5cGUgb2YgYSBjb2x1bW4ncyB1bmRlcmx5aW5nIHZhbHVlLiBEZWxpYmVyYXRlbHkgZ2VuZXJhbCByYXRoZXIgdGhhblxuICogZmlsdGVyLXNwZWNpZmljOiBvcGVyYXRpb24gY29tcG9uZW50cyB0aGF0IGNvbnN1bWUgYENvbHVtbkRlZmluaXRpb25gIGFsbCBuZWVkXG4gKiB0byBrbm93IGEgY29sdW1uJ3MgdHlwZSAodGhlIGZpbHRlciBwYW5lbCBwaWNrcyB0aGUgdmFsdWUgY29udHJvbCBmcm9tIGl0LCBhbmRcbiAqIGltcG9ydCB2YWxpZGF0aW9uLCBzb3J0aW5nIGFuZCBleHBvcnRzIGhhdmUgdGhlIHNhbWUgbmVlZCkuXG4gKi9cbmV4cG9ydCBlbnVtIENvbHVtblZhbHVlVHlwZSB7XG4gIFN0cmluZyA9ICdTdHJpbmcnLFxuICBOdW1iZXIgPSAnTnVtYmVyJyxcbiAgSW50ZWdlciA9ICdJbnRlZ2VyJyxcbiAgRGVjaW1hbCA9ICdEZWNpbWFsJyxcbiAgQ3VycmVuY3kgPSAnQ3VycmVuY3knLFxuICBEYXRlID0gJ0RhdGUnLFxuICBCb29sID0gJ0Jvb2wnLFxuICBFbnVtID0gJ0VudW0nLFxufVxuXG4vKiogQW4gYWxsb3dlZCB2YWx1ZSBmb3IgYSBjb2x1bW4gd2hvc2UgYHZhbHVlVHlwZWAgaXMgYEVudW1gLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5WYWx1ZU9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRGVmaW5pdGlvbjxUPiB7XG4gIGlkOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nIHwgKChjb250ZXh0OiBhbnkpID0+IGFueSk7XG4gIGFjY2Vzc29yS2V5Pzoga2V5b2YgVDtcbiAgYWNjZXNzb3JGbj86IChyb3c6IFQpID0+IGFueTtcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgY2VsbEVkaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogU2ltcGxlIGZvb3RlciByZWR1Y2VyIOKAlCBhbmFsb2dvdXMgdG8gYGFjY2Vzc29yRm5gLiBSZWNlaXZlcyB0aGUgY29sdW1uJ3NcbiAgICogZXh0cmFjdGVkIHZhbHVlcyAoYW5kIHRoZSBub24tZ3JvdXAgcm93cykgYW5kIHJldHVybnMgdGhlIGZvb3RlciB2YWx1ZSB1c2VkXG4gICAqIGJ5IHRoZSB0YWJsZSBmb290ZXIgYW5kIGV4cG9ydHMuIE92ZXJyaWRkZW4gYnkgYGZvb3RlcmAgd2hlbiB0aGF0IGlzIHNldC5cbiAgICovXG4gIGZvb3RlckZuPzogKHZhbHVlczogYW55W10sIHJvd3M6IFRbXSkgPT4gYW55O1xuICAvKiogUmljaGVyIGRlY2xhcmF0aXZlIGZvb3Rlcjsgb3ZlcnJpZGVzIGBmb290ZXJGbmAgd2hlbiBzZXQuICovXG4gIGZvb3Rlcj86IENvbHVtbkZvb3RlckNvbmZpZzxUPjtcbiAgc29ydEFjdGlvbj86ICdBU0MnIHwgJ0RFU0MnO1xuICBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7XG4gIGdyb3VwTmFtZT86IHN0cmluZztcbiAgdmFsaWRhdG9yRm4/OiAodmFsdWU6IFRba2V5b2YgVF0pID0+IGJvb2xlYW47XG4gIGltcG9ydEtleT86IGtleW9mIFQ7XG4gIGNhbkltcG9ydD86IGJvb2xlYW47XG4gIGNhbkV4cG9ydD86IGJvb2xlYW47XG4gIGltcG9ydEJ5Pzoga2V5b2YgVCB8ICgoaW1wb3J0ZWRSb3c6IGFueSkgPT4gVFtrZXlvZiBUXSk7XG4gIGV4cG9ydEJ5Pzoga2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpO1xuICBpc0hpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoaXMgY29sdW1uJ3MgdmFsdWUuIE9wdGlvbmFsIOKAlCBjb25zdW1lcnMgdGhhdCBuZWVkIGEgdHlwZSBmYWxsIGJhY2tcbiAgICogdG8gaW5mZXJyaW5nIG9uZSBmcm9tIHRoZSBkYXRhIHdoZW4gaXQgaXMgb21pdHRlZC5cbiAgICovXG4gIHZhbHVlVHlwZT86IENvbHVtblZhbHVlVHlwZTtcbiAgLyoqXG4gICAqIEFsbG93ZWQgdmFsdWVzIHdoZW4gYHZhbHVlVHlwZWAgaXMgYEVudW1gLiBFaXRoZXIgYSBwbGFpbiBsaXN0IG9mIG1lbWJlcnMgb3JcbiAgICogYHsgbGFiZWwsIHZhbHVlIH1gIHBhaXJzIHdoZW4gdGhlIGRpc3BsYXkgdGV4dCBkaWZmZXJzIGZyb20gdGhlIHN0b3JlZCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlT3B0aW9ucz86IHN0cmluZ1tdIHwgQ29sdW1uVmFsdWVPcHRpb25bXTtcbn1cblxuLy8gRGVmaW5lIGEgdHlwZSB0aGF0IGV4dGVuZHMgVCB3aXRoIGEgX2tleSBwcm9wZXJ0eVxuZXhwb3J0IHR5cGUgRGF0YVdpdGhLZXk8VD4gPSB7XG4gIF9rZXk6IHN0cmluZyB8IG51bWJlcjtcbiAgX2tleV9wcm9wOiBrZXlvZiBUIHwgJ19pbmRleCc7XG4gIG9yaWdpbmFsRGF0YTogVDtcbn07XG5cbmV4cG9ydCB0eXBlIEdyb3VwZWREYXRhUm93PFQ+ID0gRGF0YVdpdGhLZXk8VD4gJiB7XG4gIGlzR3JvdXBSb3c/OiBib29sZWFuO1xuICBncm91cFZhbHVlPzogYW55O1xuICBncm91cFRpdGxlPzogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xPZjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0/OiBGb3JtQ29udHJvbDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUdyb3VwQ29uZmlnPFxuICBUQ29udHJvbCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH1cbj4ge1xuICBjb250cm9sczogVENvbnRyb2w7XG4gIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsO1xuICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBFZGl0ZWREYXRhPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXT86IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBQYXJ0aWFsPFRbS10+IDogVFtLXTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBleHBvcnQgdHlwZSBDb2x1bW5EZWZpbml0aW9uQmFzZTxUPiA9IHtcbi8vICAgaWQ6IHN0cmluZztcbi8vICAgaGVhZGVyOiBzdHJpbmcgfCAoKGNvbnRleHQ6IGFueSkgPT4gYW55KTtcbi8vICAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgY2VsbEVkaXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4vLyAgIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbi8vICAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuLy8gICBzb3J0QWN0aW9uPzogJ0FTQycgfCAnREVTQyc7XG4vLyAgIGZvcm1Db250cm9sTmFtZT86IHN0cmluZztcbi8vICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuLy8gfTtcblxuLy8gLy8gSGVscGVyIHR5cGUgdG8gY3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gd2l0aCBhIHNwZWNpZmljIGFjY2Vzc29yIGtleVxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbldpdGhLZXk8XG4vLyAgIFQsXG4vLyAgIEsgZXh0ZW5kcyBrZXlvZiBUXG4vLyA+ID0gQ29sdW1uRGVmaW5pdGlvbkJhc2U8VD4gJiB7XG4vLyAgIGFjY2Vzc29yS2V5OiBLO1xuLy8gICBhY2Nlc3NvckZuPzogbmV2ZXI7XG4vLyAgIHZhbGlkYXRvckZuPzogKHZhbHVlOiBUW0tdKSA9PiBib29sZWFuO1xuLy8gfTtcblxuLy8gZXhwb3J0IHR5cGUgQ29sdW1uRGVmaW5pdGlvbldpdGhGbjxULCBSID0gYW55PiA9IENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ICYge1xuLy8gICBhY2Nlc3NvcktleT86IG5ldmVyO1xuLy8gICBhY2Nlc3NvckZuOiAocm93OiBUKSA9PiBSO1xuLy8gICB2YWxpZGF0b3JGbj86ICh2YWx1ZTogUikgPT4gYm9vbGVhbjtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb25XaXRoTmVpdGhlcjxUPiA9IENvbHVtbkRlZmluaXRpb25CYXNlPFQ+ICYge1xuLy8gICBhY2Nlc3NvcktleT86IG5ldmVyO1xuLy8gICBhY2Nlc3NvckZuPzogbmV2ZXI7XG4vLyAgIHZhbGlkYXRvckZuPzogbmV2ZXI7XG4vLyB9O1xuXG4vLyAvLyBVbmlvbiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbGwgcG9zc2libGUgY29sdW1uIGRlZmluaXRpb24gdmFyaWFudHNcbi8vIGV4cG9ydCB0eXBlIENvbHVtbkRlZmluaXRpb248VD4gPVxuLy8gICB8IHsgW0sgaW4ga2V5b2YgVF06IENvbHVtbkRlZmluaXRpb25XaXRoS2V5PFQsIEs+IH1ba2V5b2YgVF1cbi8vICAgfCBDb2x1bW5EZWZpbml0aW9uV2l0aEZuPFQ+XG4vLyAgIHwgQ29sdW1uRGVmaW5pdGlvbldpdGhOZWl0aGVyPFQ+O1xuIl19