ontimize-web-ngx 15.1.3 → 15.2.1
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.
- package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +3 -3
- package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +3 -3
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +3 -3
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +2 -2
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +18 -8
- package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +3 -3
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +3 -3
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +3 -3
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +35 -8
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +97 -40
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +5 -3
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +30 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +13 -5
- package/esm2020/lib/components/table/o-table.component.mjs +7 -9
- package/esm2020/lib/config/o-providers.mjs +3 -2
- package/esm2020/lib/i18n/i18n.mjs +12 -3
- package/esm2020/lib/interfaces/index.mjs +2 -1
- package/esm2020/lib/interfaces/local-service.interface.mjs +2 -0
- package/esm2020/lib/services/factories.mjs +9 -1
- package/esm2020/lib/services/local-storage.service.mjs +6 -6
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +42 -16
- package/esm2020/lib/types/o-inputs-options.type.mjs +1 -1
- package/fesm2015/ontimize-web-ngx.mjs +268 -103
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +266 -103
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/input/date-input/o-date-input.component.d.ts +2 -2
- package/lib/components/input/integer-input/o-integer-input.component.d.ts +2 -2
- package/lib/components/input/listpicker/o-list-picker.component.d.ts +2 -2
- package/lib/components/input/o-form-service-component.class.d.ts +1 -1
- package/lib/components/input/text-input/o-text-input.component.d.ts +12 -5
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +18 -4
- package/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.d.ts +5 -1
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +4 -1
- package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +6 -3
- package/lib/components/table/o-table.component.d.ts +8 -7
- package/lib/i18n/i18n.d.ts +9 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/interfaces/local-service.interface.d.ts +15 -0
- package/lib/services/factories.d.ts +9 -0
- package/lib/services/local-storage.service.d.ts +3 -1
- package/lib/services/ontimize-export-data-base-provider.service.d.ts +3 -0
- package/lib/types/o-inputs-options.type.d.ts +1 -0
- package/package.json +1 -1
- package/theming/styles/ontimize-v8/containers.scss +0 -5
|
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Inject, V
|
|
|
2
2
|
import { UntypedFormControl } from '@angular/forms';
|
|
3
3
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
4
4
|
import { MatSelectionList } from '@angular/material/list';
|
|
5
|
-
import { BehaviorSubject, fromEvent } from 'rxjs';
|
|
5
|
+
import { BehaviorSubject, fromEvent, of } from 'rxjs';
|
|
6
6
|
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
7
7
|
import { ColumnValueFilterOperator } from '../../../../../types/table/o-column-value-filter.type';
|
|
8
8
|
import { TableFilterByColumnDialogResult } from '../../../../../types/table/o-table-filter-by-column-data.type';
|
|
@@ -20,8 +20,12 @@ import * as i8 from "@angular/material/icon";
|
|
|
20
20
|
import * as i9 from "@angular/material/input";
|
|
21
21
|
import * as i10 from "@angular/material/form-field";
|
|
22
22
|
import * as i11 from "@angular/material/list";
|
|
23
|
-
import * as i12 from "@angular/material/
|
|
24
|
-
import * as i13 from "
|
|
23
|
+
import * as i12 from "@angular/material/divider";
|
|
24
|
+
import * as i13 from "@angular/material/menu";
|
|
25
|
+
import * as i14 from "@angular/material/radio";
|
|
26
|
+
import * as i15 from "@angular/material/slide-toggle";
|
|
27
|
+
import * as i16 from "@angular/cdk/scrolling";
|
|
28
|
+
import * as i17 from "../../../../../pipes/o-translate.pipe";
|
|
25
29
|
const CUSTOM_FILTERS_OPERATORS = [ColumnValueFilterOperator.LESS_EQUAL, ColumnValueFilterOperator.MORE_EQUAL, ColumnValueFilterOperator.BETWEEN, ColumnValueFilterOperator.EQUAL];
|
|
26
30
|
export class OTableFilterByColumnDataDialogComponent {
|
|
27
31
|
constructor(dialogRef, data) {
|
|
@@ -30,7 +34,6 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
30
34
|
this.cancelAction = TableFilterByColumnDialogResult.CANCEL;
|
|
31
35
|
this.clearAction = TableFilterByColumnDialogResult.CLEAR;
|
|
32
36
|
this.preloadValues = true;
|
|
33
|
-
this.startView = 'month';
|
|
34
37
|
this.onSortFilterValuesChange = new EventEmitter();
|
|
35
38
|
this.isCustomFilterSubject = new BehaviorSubject(false);
|
|
36
39
|
this.isCustomFilter = this.isCustomFilterSubject.asObservable();
|
|
@@ -43,40 +46,45 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
43
46
|
this.tableData = [];
|
|
44
47
|
this.listDataSubject = new BehaviorSubject([]);
|
|
45
48
|
this._listData = this.listDataSubject.asObservable();
|
|
46
|
-
this.activeSortDirection = '';
|
|
47
49
|
if (data.column) {
|
|
48
50
|
this.column = data.column;
|
|
49
51
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
this.table = data.table;
|
|
53
|
+
this.initialize();
|
|
54
|
+
}
|
|
55
|
+
initialize() {
|
|
56
|
+
this.showFilterValuesOption = this.table.paginationControls;
|
|
57
|
+
this.sourceData =
|
|
58
|
+
this.table.oTableColumnsFilterComponent?.getFilterValuesInData(this.column.attr) ||
|
|
59
|
+
this.table.oTableColumnsFilterComponent?.filterValuesInData || 'current-page';
|
|
60
|
+
this.mode = this.table.oTableColumnsFilterComponent ? this.table.oTableColumnsFilterComponent.mode : 'default';
|
|
61
|
+
this.isDefaultFilterSubject.next(this.mode === 'default');
|
|
62
|
+
this.isCustomFilterSubject.next(this.mode === 'custom');
|
|
63
|
+
let previousFilter = this.table.dataSource.getColumnValueFilterByAttr(this.column.attr) || {
|
|
56
64
|
attr: undefined,
|
|
57
65
|
operator: undefined,
|
|
58
|
-
rowValue: undefined,
|
|
59
66
|
values: undefined,
|
|
60
67
|
availableValues: undefined
|
|
61
68
|
};
|
|
62
69
|
if (Util.isDefined(previousFilter.operator)) {
|
|
63
70
|
this.isCustomFilterSubject.next(CUSTOM_FILTERS_OPERATORS.indexOf(previousFilter.operator) !== -1);
|
|
64
71
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
this.preloadValues = this.table.oTableColumnsFilterComponent ? this.table.oTableColumnsFilterComponent.preloadValues : true;
|
|
73
|
+
this.activeSortDirection = this.table.getSortFilterColumn(this.column) || '';
|
|
74
|
+
this.startView = this.table.getStartViewFilterColumn(this.column) || 'month';
|
|
75
|
+
const queryMethod = this.table.oTableColumnsFilterComponent?.getQueryMethodOfFilterColumn(this.column.attr);
|
|
76
|
+
if (Util.isDefined(queryMethod)) {
|
|
77
|
+
this.queryMethodName = queryMethod;
|
|
78
|
+
this.sourceData = 'all-data';
|
|
70
79
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.getDistinctValues(previousFilter);
|
|
80
|
+
this.getData(this.sourceData);
|
|
81
|
+
}
|
|
82
|
+
parseDataAndInitializeDataList(previousFilter) {
|
|
83
|
+
this.parseListData(previousFilter);
|
|
84
|
+
if (Util.isDefined(previousFilter)) {
|
|
77
85
|
this.initializeCustomFilterValues(previousFilter);
|
|
78
|
-
this.initializeDataList(previousFilter);
|
|
79
86
|
}
|
|
87
|
+
this.initializeDataList(previousFilter);
|
|
80
88
|
}
|
|
81
89
|
ngAfterViewInit() {
|
|
82
90
|
this.initializeFilterEvent();
|
|
@@ -156,26 +164,37 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
156
164
|
this.filterValueList.deselectAll();
|
|
157
165
|
}
|
|
158
166
|
}
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
parseListData(filter) {
|
|
168
|
+
this.columnData = [];
|
|
169
|
+
if (Util.isDefined(filter?.availableValues)) {
|
|
161
170
|
this.columnData = filter.availableValues;
|
|
162
171
|
}
|
|
163
172
|
else {
|
|
164
173
|
const colRenderedValues = this.getColumnDataUsingRenderer();
|
|
165
174
|
const colValues = this.tableData.map(elem => elem[this.column.attr]);
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this.columnData.
|
|
169
|
-
renderedValue
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
if (this.sourceData === 'current-page') {
|
|
176
|
+
colRenderedValues.forEach((renderedValue, i) => {
|
|
177
|
+
if (!this.columnData.find(item => item.renderedValue === renderedValue)) {
|
|
178
|
+
this.addIntoColumnData(renderedValue, colValues, i, filter);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
colRenderedValues.forEach((renderedValue, i) => {
|
|
184
|
+
this.addIntoColumnData(renderedValue, colValues, i, filter);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
177
187
|
}
|
|
178
188
|
}
|
|
189
|
+
addIntoColumnData(renderedValue, colValues, i, filter) {
|
|
190
|
+
this.columnData.push({
|
|
191
|
+
renderedValue: renderedValue,
|
|
192
|
+
value: colValues[i],
|
|
193
|
+
rowValue: this.tableData[i],
|
|
194
|
+
selected: filter?.operator === ColumnValueFilterOperator.IN && (filter?.values || []).indexOf(colValues[i]) !== -1,
|
|
195
|
+
tableIndex: i
|
|
196
|
+
});
|
|
197
|
+
}
|
|
179
198
|
getColumnValuesFilter() {
|
|
180
199
|
const filter = {
|
|
181
200
|
attr: this.column.attr,
|
|
@@ -302,18 +321,56 @@ export class OTableFilterByColumnDataDialogComponent {
|
|
|
302
321
|
}
|
|
303
322
|
return value;
|
|
304
323
|
}
|
|
324
|
+
onChangeDataSource(event) {
|
|
325
|
+
this.getData(event.value);
|
|
326
|
+
}
|
|
327
|
+
getData(sourceData) {
|
|
328
|
+
if (sourceData === 'current-page') {
|
|
329
|
+
this.tableData = this.table.dataSource.getCurrentData();
|
|
330
|
+
this.parseDataAndInitializeDataList(null);
|
|
331
|
+
}
|
|
332
|
+
else if (this.table.pageable) {
|
|
333
|
+
this.queryByFilterColumnSubscription = this.queryByFilterColumn(this.column.attr).subscribe((res) => {
|
|
334
|
+
let data = [];
|
|
335
|
+
if (res.isSuccessful()) {
|
|
336
|
+
data = res.data;
|
|
337
|
+
}
|
|
338
|
+
this.tableData = data;
|
|
339
|
+
this.parseDataAndInitializeDataList(null);
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
this.tableData = this.table.getAllValues();
|
|
344
|
+
this.parseDataAndInitializeDataList(null);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
queryByFilterColumn(attr) {
|
|
348
|
+
const kv = this.table.getComponentFilter();
|
|
349
|
+
const av = [attr];
|
|
350
|
+
let sqlTypes = {};
|
|
351
|
+
if (Util.isDefined(kv) && !Util.isObjectEmpty(kv)) {
|
|
352
|
+
sqlTypes = this.table.getSqlTypes();
|
|
353
|
+
}
|
|
354
|
+
const columnQueryArgs = [kv, av, this.table.entity, sqlTypes, undefined, undefined, undefined];
|
|
355
|
+
const queryMethodName = this.queryMethodName || Codes.QUERY_METHOD;
|
|
356
|
+
const service = this.table.getService();
|
|
357
|
+
if (service && (queryMethodName in service) && this.table.entity) {
|
|
358
|
+
return service[queryMethodName](...columnQueryArgs);
|
|
359
|
+
}
|
|
360
|
+
return of({});
|
|
361
|
+
}
|
|
305
362
|
getColumnDataUsingRenderer() {
|
|
306
363
|
const useRenderer = this.column.renderer && this.column.renderer.getCellData;
|
|
307
364
|
return this.tableData.map((row) => useRenderer ? this.column.renderer.getCellData(row[this.column.attr], row) : row[this.column.attr]);
|
|
308
365
|
}
|
|
309
366
|
}
|
|
310
367
|
OTableFilterByColumnDataDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableFilterByColumnDataDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
311
|
-
OTableFilterByColumnDataDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableFilterByColumnDataDialogComponent, selector: "o-table-filter-by-column-data-dialog", host: { properties: { "class.o-filter-by-column-dialog": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "filterValueList", first: true, predicate: ["filterValueList"], descendants: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFill *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n <mat-list-option *ngFor=\"let record of (listData | async); let i = index\" checkboxPosition=\"before\" [selected]=\"record.selected\"\n [value]=\"record\">\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value || ('TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate) }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </mat-list-option>\n </mat-selection-list>\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding:24px 0 12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i7.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
368
|
+
OTableFilterByColumnDataDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableFilterByColumnDataDialogComponent, selector: "o-table-filter-by-column-data-dialog", host: { properties: { "class.o-filter-by-column-dialog": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "filterValueList", first: true, predicate: ["filterValueList"], descendants: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n\n <cdk-virtual-scroll-viewport itemSize=\"25\" fxFlex>\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n\n <ng-container *cdkVirtualFor=\"let record of (listData | async); let i = index\">\n <mat-list-option checkboxPosition=\"before\" [selected]=\"record.selected\" [value]=\"record\">\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value || ('TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate) }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n </cdk-virtual-scroll-viewport>\n\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".filtervalues-container{padding:12px}.filtervalues-container .mat-divider{margin:8px}.filtervalues-container .mdc-list-group__subheader{font-weight:400;margin-top:0;margin-bottom:0}.filtervalues-container mat-radio-group.mat-mdc-radio-group{margin:12px 12px 0}.o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding-top:12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i7.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i11.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i13.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i13.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i14.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i14.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i16.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i16.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i16.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
312
369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableFilterByColumnDataDialogComponent, decorators: [{
|
|
313
370
|
type: Component,
|
|
314
371
|
args: [{ selector: 'o-table-filter-by-column-data-dialog', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
315
372
|
'[class.o-filter-by-column-dialog]': 'true'
|
|
316
|
-
}, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div
|
|
373
|
+
}, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.FILTER_BY_COLUMN' | oTranslate }}: {{ column.title | oTranslate }}</span>\n<div mat-dialog-content class=\"dialog-list-container\">\n <div fxLayout=\"column\" class=\"content-wrapper\" [class.content-wrapper-fixed-dimension]=\"getFixedDimensionClass()\">\n <mat-slide-toggle #customFilterSlide (change)=\"onSlideChange($event)\" [checked]=\"(isCustomFilter | async)\" *ngIf=\"isDefaultFilter | async\">\n {{ 'TABLE.FILTER_BY_COLUMN.CUSTOM_FILTER' | oTranslate }}\n </mat-slide-toggle>\n <div fxFlex=\"1 1 100%\" *ngIf=\"!(isCustomFilter | async);else customFilterTemplate\" fxLayout=\"column\">\n <mat-form-field class=\"hinted\">\n <mat-icon matPrefix svgIcon=\"ontimize:search\"></mat-icon>\n <input matInput #filter placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n </mat-form-field>\n <div *ngIf=\"(listData | async).length > 0; else emptyListData\" fxLayout=\"row\" fxLayoutAlign=\"space-between start\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <mat-checkbox (change)=\"onSelectAllChange($event)\" [checked]=\"areAllSelected()\" [indeterminate]=\"isIndeterminate()\" [disabled]=\"!listData\"\n class=\"select-all-checkbox\">\n {{ 'TABLE.FILTER_BY_COLUMN.CHECK_ALL' | oTranslate }}\n </mat-checkbox>\n <span *ngIf=\"!listData\" class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY_FILTER' | oTranslate }}\n </span>\n </div>\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\">\n <button type=\"button\" mat-icon-button (click)=\"onClickSortValues()\">\n <mat-icon [svgIcon]=\"getSortByAlphaIcon()\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" *ngIf=\"showFilterValuesOption\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <div fxLayout=\"column\" class=\"filtervalues-container\">\n <div mat-subheader>\n {{'TABLE.FILTER_BY_COLUMN.LABEL_DATA' | oTranslate}}\n </div>\n <mat-divider></mat-divider>\n <mat-radio-group aria-label=\"Data\" fxLayout=\"column\" fxLayoutGap=\"12px\" [(ngModel)]=\"sourceData\" (change)=\"onChangeDataSource($event)\">\n <mat-radio-button value=\"current-page\">{{'TABLE.FILTER_BY_COLUMN.CURRENT_PAGE' | oTranslate}}</mat-radio-button>\n <mat-radio-button value=\"all-data\">{{'TABLE.FILTER_BY_COLUMN.ALL_PAGE' | oTranslate}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </div>\n </div>\n\n <ng-template #emptyListData>\n <span class=\"column-filter-empty-list\">\n {{ 'TABLE.FILTER_BY_COLUMN.LIST_EMPTY' | oTranslate }}\n </span>\n </ng-template>\n\n <cdk-virtual-scroll-viewport itemSize=\"25\" fxFlex>\n <mat-selection-list *ngIf=\"preloadValues || listData\" #filterValueList class=\"select-values-list\" (selectionChange)=\"onSelect($event)\">\n\n <ng-container *cdkVirtualFor=\"let record of (listData | async); let i = index\">\n <mat-list-option checkboxPosition=\"before\" [selected]=\"record.selected\" [value]=\"record\">\n <ng-container *ngIf=\"!column.renderer\">\n {{ record.value || ('TABLE.FILTER_BY_COLUMN.EMPTY_VALUE' | oTranslate) }}\n </ng-container>\n <ng-template *ngIf=\"column.renderer\" [ngTemplateOutlet]=\"column.renderer.templateref\"\n [ngTemplateOutletContext]=\"{ cellvalue: record.value, rowvalue: record.rowValue }\">\n </ng-template>\n </mat-list-option>\n </ng-container>\n </mat-selection-list>\n </cdk-virtual-scroll-viewport>\n\n </div>\n </div>\n</div>\n\n\n<mat-dialog-actions fxLayoutAlign=\"space-between center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"clearAction\" class=\"o-button-info\">\n {{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate }} </button>\n <span align=\"end\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"cancelAction\" class=\"o-button-default cancel\">\n {{ 'CANCEL' | oTranslate }} </button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"acceptAction\" class=\"o-button-primary\">\n {{ 'ACCEPT' | oTranslate }} </button>\n </span>\n</mat-dialog-actions>\n\n<!-- TEMPLATE CUSTOM FILTER-->\n<ng-template #customFilterTemplate>\n <div *ngIf=\"isTextType()\">\n <mat-form-field fxFlex class=\"hinted\">\n <input matInput #filterText [formControl]=\"fcText\" placeholder=\"{{ 'TABLE.FILTER' | oTranslate }}\">\n <mat-hint>{{ 'TABLE.FILTER_BY_COLUMN.HINT_STAR' | oTranslate }}</mat-hint>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div *ngIf=\"isNumericType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [formControl]=\"fcFrom\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n </mat-form-field>\n <mat-form-field>\n <input matInput [formControl]=\"fcTo\" placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n <div *ngIf=\"isDateType()\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"12px\">\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerFrom\" [max]=\"fcTo.value\" [formControl]=\"fcFrom\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.FROM' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerFrom\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerFrom [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <mat-form-field>\n <input matInput [matDatepicker]=\"datepickerTo\" [min]=\"fcFrom.value\" [formControl]=\"fcTo\"\n placeholder=\"{{ 'TABLE.FILTER_BY_COLUMN.TO' | oTranslate }}\">\n <mat-datepicker-toggle matSuffix [for]=\"datepickerTo\">\n <mat-icon matDatepickerToggleIcon>today</mat-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #datepickerTo [startView]=\"getStartedViewDatepicker()\"></mat-datepicker>\n </mat-form-field>\n <button type=\"button\" matSuffix mat-icon-button (click)=\"clearValues()\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n </div>\n\n</ng-template>\n", styles: [".filtervalues-container{padding:12px}.filtervalues-container .mat-divider{margin:8px}.filtervalues-container .mdc-list-group__subheader{font-weight:400;margin-top:0;margin-bottom:0}.filtervalues-container mat-radio-group.mat-mdc-radio-group{margin:12px 12px 0}.o-filter-by-column-dialog .mat-mdc-slide-toggle{padding-bottom:24px;padding-left:14px}.o-filter-by-column-dialog .content-wrapper{padding-top:12px;margin:0}.o-filter-by-column-dialog .content-wrapper.content-wrapper-fixed-dimension{max-height:430px;min-height:430px;min-width:250px;width:100%}.o-filter-by-column-dialog .content-wrapper .mat-mdc-form-field.hinted{margin-bottom:24px}.o-filter-by-column-dialog .content-wrapper .select-values-list{padding-top:0;overflow-y:auto;overflow-x:hidden;outline:none}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item{height:30px}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-filter-by-column-dialog .content-wrapper .select-values-list .mat-mdc-list-item .mat-mdc-list-item .mat-icon{font-size:24px}.o-filter-by-column-dialog .content-wrapper .column-filter-empty-list{text-align:center}\n"] }]
|
|
317
374
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
318
375
|
type: Inject,
|
|
319
376
|
args: [MAT_DIALOG_DATA]
|
|
@@ -324,4 +381,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
324
381
|
type: ViewChild,
|
|
325
382
|
args: ['filterValueList']
|
|
326
383
|
}] } });
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sd0JBQXdCLENBQUM7QUFFbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSx1REFBdUQsQ0FBQztBQUN0SCxPQUFPLEVBRUwsK0JBQStCLEVBQ2hDLE1BQU0sK0RBQStELENBQUM7QUFD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QU0sUUFDekM7d0JBQ0osbUNBQW1DLEVBQUUsTUFBTTtxQkFDNUM7OzBCQW1DRSxNQUFNOzJCQUFDLGVBQWU7NENBTkosTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNXLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNlbGVjdGlvbkxpc3QsIE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLCBPQ29sdW1uVmFsdWVGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi12YWx1ZS1maWx0ZXIudHlwZSc7XG5pbXBvcnQge1xuICBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YSxcbiAgVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuLi8uLi9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL2NvZGVzJztcblxuY29uc3QgQ1VTVE9NX0ZJTFRFUlNfT1BFUkFUT1JTID0gW0NvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTCwgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMLCBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU4sIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUxdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJ28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydvLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZmlsdGVyLWJ5LWNvbHVtbi1kaWFsb2ddJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHVibGljIGFjY2VwdEFjdGlvbiA9IFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQuQUNDRVBUO1xuICBwdWJsaWMgY2FuY2VsQWN0aW9uID0gVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5DQU5DRUw7XG4gIHB1YmxpYyBjbGVhckFjdGlvbiA9IFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHQuQ0xFQVI7XG5cbiAgY29sdW1uOiBPQ29sdW1uO1xuICBwcmVsb2FkVmFsdWVzOiBib29sZWFuID0gdHJ1ZTtcbiAgbW9kZTogc3RyaW5nO1xuICBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcicgfCAnJyA9ICdtb250aCc7XG4gIHB1YmxpYyBvblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxPRmlsdGVyQ29sdW1uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSBpc0N1c3RvbUZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNDdXN0b21GaWx0ZXI6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzRGVmYXVsdEZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNEZWZhdWx0RmlsdGVyOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc0RlZmF1bHRGaWx0ZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGZjVGV4dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmNGcm9tID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBmY1RvID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gIHByb3RlY3RlZCBjb2x1bW5EYXRhOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZURhdGE6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSBsaXN0RGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+KFtdKTtcbiAgcHJvdGVjdGVkIF9saXN0RGF0YTogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPiA9IHRoaXMubGlzdERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcicpIGZpbHRlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZmlsdGVyVmFsdWVMaXN0JykgZmlsdGVyVmFsdWVMaXN0OiBNYXRTZWxlY3Rpb25MaXN0O1xuICBwdWJsaWMgYWN0aXZlU29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBhbnlcbiAgKSB7XG4gICAgaWYgKGRhdGEuY29sdW1uKSB7XG4gICAgICB0aGlzLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIH1cblxuICAgIGlmIChkYXRhLm1vZGUpIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0RmlsdGVyU3ViamVjdC5uZXh0KGRhdGEubW9kZSA9PT0gJ2RlZmF1bHQnKTtcbiAgICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQoZGF0YS5tb2RlID09PSAnY3VzdG9tJyk7XG4gICAgICB0aGlzLm1vZGUgPSBkYXRhLm1vZGU7XG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzRmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIgPSBkYXRhLnByZXZpb3VzRmlsdGVyIHx8IHtcbiAgICAgIGF0dHI6IHVuZGVmaW5lZCxcbiAgICAgIG9wZXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICByb3dWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICBhdmFpbGFibGVWYWx1ZXM6IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcmV2aW91c0ZpbHRlci5vcGVyYXRvcikpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQoQ1VTVE9NX0ZJTFRFUlNfT1BFUkFUT1JTLmluZGV4T2YocHJldmlvdXNGaWx0ZXIub3BlcmF0b3IpICE9PSAtMSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ3ByZWxvYWRWYWx1ZXMnKSkge1xuICAgICAgdGhpcy5wcmVsb2FkVmFsdWVzID0gZGF0YS5wcmVsb2FkVmFsdWVzO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmFjdGl2ZVNvcnREaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9IGRhdGEuYWN0aXZlU29ydERpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5zdGFydFZpZXcpIHtcbiAgICAgIHRoaXMuc3RhcnRWaWV3ID0gZGF0YS5zdGFydFZpZXc7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudGFibGVEYXRhICYmIEFycmF5LmlzQXJyYXkoZGF0YS50YWJsZURhdGEpKSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGEudGFibGVEYXRhO1xuICAgICAgdGhpcy5nZXREaXN0aW5jdFZhbHVlcyhwcmV2aW91c0ZpbHRlcik7XG4gICAgICB0aGlzLmluaXRpYWxpemVDdXN0b21GaWx0ZXJWYWx1ZXMocHJldmlvdXNGaWx0ZXIpO1xuICAgICAgdGhpcy5pbml0aWFsaXplRGF0YUxpc3QocHJldmlvdXNGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJFdmVudCgpO1xuICB9XG5cbiAgZ2V0IGxpc3REYXRhKCk6IE9ic2VydmFibGU8VGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFbXT4ge1xuICAgIHJldHVybiB0aGlzLl9saXN0RGF0YTtcbiAgfVxuXG4gIHNldCBsaXN0RGF0YShhcmc6IE9ic2VydmFibGU8VGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFbXT4pIHtcbiAgICB0aGlzLl9saXN0RGF0YSA9IGFyZztcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplRGF0YUxpc3QoZmlsdGVyPzogT0NvbHVtblZhbHVlRmlsdGVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJlbG9hZFZhbHVlcyB8fCAoZmlsdGVyICYmIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTikpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUIHx8IHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gQ29kZXMuREVTQ19TT1JUKSB7XG4gICAgICAgIHRoaXMuc29ydERhdGEoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQodGhpcy5jb2x1bW5EYXRhLnNsaWNlKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplRmlsdGVyRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICBmcm9tRXZlbnQodGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudCwgJ2tleXVwJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gdGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFV0aWwubm9ybWFsaXplU3RyaW5nKGZpbHRlclZhbHVlKTtcbiAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dCh0aGlzLmNvbHVtbkRhdGEuZmlsdGVyKGl0ZW0gPT4gbmV3IFJlZ0V4cCgnXicgKyBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmaWx0ZXJWYWx1ZSkuc3BsaXQoJyonKS5qb2luKCcuKicpICsgJyQnKS50ZXN0KFV0aWwubm9ybWFsaXplU3RyaW5nKGl0ZW0ucmVuZGVyZWRWYWx1ZSkpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQodGhpcy5jb2x1bW5EYXRhLmZpbHRlcihpdGVtID0+IChVdGlsLm5vcm1hbGl6ZVN0cmluZyhpdGVtLnJlbmRlcmVkVmFsdWUpLmluZGV4T2YoZmlsdGVyVmFsdWUpICE9PSAtMSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplQ3VzdG9tRmlsdGVyVmFsdWVzKGZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKTogdm9pZCB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0VHlwZSgpKSB7XG4gICAgICAgICAgdGhpcy5mY1RleHQuc2V0VmFsdWUoZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICB0aGlzLmZjRnJvbS5zZXRWYWx1ZSh0aGlzLmlzRGF0ZVR5cGUoKSA/IG5ldyBEYXRlKGZpbHRlci52YWx1ZXNbMF0pIDogZmlsdGVyLnZhbHVlc1swXSk7XG4gICAgICAgIHRoaXMuZmNUby5zZXRWYWx1ZSh0aGlzLmlzRGF0ZVR5cGUoKSA/IG5ldyBEYXRlKGZpbHRlci52YWx1ZXNbMV0pIDogZmlsdGVyLnZhbHVlc1sxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgdGhpcy5mY0Zyb20uc2V0VmFsdWUodGhpcy5pc0RhdGVUeXBlKCkgPyBuZXcgRGF0ZShmaWx0ZXIudmFsdWVzKSA6IGZpbHRlci52YWx1ZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgIHRoaXMuZmNUby5zZXRWYWx1ZSh0aGlzLmlzRGF0ZVR5cGUoKSA/IG5ldyBEYXRlKGZpbHRlci52YWx1ZXMpIDogZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVmFsdWVzKCk6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclZhbHVlTGlzdCA/IHRoaXMuZmlsdGVyVmFsdWVMaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5tYXAoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudmFsdWUpIDogW107XG4gIH1cblxuICBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IHRoaXMuY29sdW1uRGF0YS5sZW5ndGg7XG4gIH1cblxuICBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIHJldHVybiBzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkVmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5jb2x1bW5EYXRhLmxlbmd0aDtcbiAgfVxuXG4gIG9uU2VsZWN0KGV2ZW50OiBNYXRTZWxlY3Rpb25MaXN0Q2hhbmdlKSB7XG4gICAgZXZlbnQub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBvcHRpb24udmFsdWUuc2VsZWN0ZWQgPSBvcHRpb24uc2VsZWN0ZWQpO1xuICB9XG5cbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKSB7XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWVMaXN0LnNlbGVjdEFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlTGlzdC5kZXNlbGVjdEFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXN0aW5jdFZhbHVlcyhmaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcik6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChmaWx0ZXIuYXZhaWxhYmxlVmFsdWVzKSkge1xuICAgICAgdGhpcy5jb2x1bW5EYXRhID0gZmlsdGVyLmF2YWlsYWJsZVZhbHVlcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sUmVuZGVyZWRWYWx1ZXMgPSB0aGlzLmdldENvbHVtbkRhdGFVc2luZ1JlbmRlcmVyKCk7XG4gICAgICBjb25zdCBjb2xWYWx1ZXM6IGFueVtdID0gdGhpcy50YWJsZURhdGEubWFwKGVsZW0gPT4gZWxlbVt0aGlzLmNvbHVtbi5hdHRyXSk7XG5cbiAgICAgIGNvbFJlbmRlcmVkVmFsdWVzLmZvckVhY2goKHJlbmRlcmVkVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbkRhdGEuZmluZChpdGVtID0+IGl0ZW0ucmVuZGVyZWRWYWx1ZSA9PT0gcmVuZGVyZWRWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbkRhdGEucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJlZFZhbHVlOiByZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgdmFsdWU6IGNvbFZhbHVlc1tpXSxcbiAgICAgICAgICAgIHJvd1ZhbHVlOiB0aGlzLnRhYmxlRGF0YVtpXSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU4gJiYgKGZpbHRlci52YWx1ZXMgfHwgW10pLmluZGV4T2YoY29sVmFsdWVzW2ldKSAhPT0gLTEsXG4gICAgICAgICAgICAvLyBzdG9yaW5nIHRoZSBmaXJzdCBpbmRleCB3aGVyZSB0aGlzIHJlbmRlcmVkVmFsdWUgaXMgb2J0YWluZWQuIEluIHRoZSB0ZW1wbGF0ZSBvZiB0aGlzIGNvbXBvbmVudCB0aGUgY29sdW1uIHJlbmRlcmVyIHdpbGwgb2J0YWluIHRoZVxuICAgICAgICAgICAgLy8gcm93IHZhbHVlIG9mIHRoaXMgaW5kZXhcbiAgICAgICAgICAgIHRhYmxlSW5kZXg6IGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVzRmlsdGVyKCk6IE9Db2x1bW5WYWx1ZUZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIgPSB7XG4gICAgICBhdHRyOiB0aGlzLmNvbHVtbi5hdHRyLFxuICAgICAgb3BlcmF0b3I6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlczogdW5kZWZpbmVkLFxuICAgICAgYXZhaWxhYmxlVmFsdWVzOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5nZXRWYWx1ZSgpKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU47XG4gICAgICAgIGZpbHRlci52YWx1ZXMgPSBzZWxlY3RlZFZhbHVlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICAgICAgICBmaWx0ZXIuYXZhaWxhYmxlVmFsdWVzID0gdGhpcy5jb2x1bW5EYXRhO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mY1RleHQudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDtcbiAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mY0Zyb20udmFsdWUgJiYgdGhpcy5mY1RvLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjtcbiAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNGcm9tKTtcbiAgICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICBmaWx0ZXIudmFsdWVzID0gZnJvbVZhbHVlIDw9IHRvVmFsdWUgPyBbZnJvbVZhbHVlLCB0b1ZhbHVlXSA6IFt0b1ZhbHVlLCBmcm9tVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZmNGcm9tLnZhbHVlKSB7XG4gICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMO1xuICAgICAgICAgIGZpbHRlci52YWx1ZXMgPSB0aGlzLmdldFR5cGVkVmFsdWUodGhpcy5mY0Zyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZjVG8udmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw7XG4gICAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjbGVhclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc1RleHRUeXBlKCkpIHtcbiAgICAgIHRoaXMuZmNUZXh0LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZVR5cGUoKSB8fCB0aGlzLmlzTnVtZXJpY1R5cGUoKSkge1xuICAgICAgdGhpcy5mY0Zyb20uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZmNUby5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tTb3J0VmFsdWVzKCkge1xuICAgIHN3aXRjaCAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdhc2MnOlxuICAgICAgICB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVzYyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5vblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLmdldEZpbHRlckNvbHVtbigpKTtcbiAgICB0aGlzLnNvcnREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoKSB7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuY29sdW1uRGF0YSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQoc29ydGVkRGF0YS5zb3J0KHRoaXMuc29ydEZ1bmN0aW9uLmJpbmQodGhpcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dChzb3J0ZWREYXRhKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIGxldCBwcm9wZXJ0eUE6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIGxldCBwcm9wZXJ0eUI6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIFtwcm9wZXJ0eUEsIHByb3BlcnR5Ql0gPSBbYVsndmFsdWUnXSwgYlsndmFsdWUnXV07XG5cbiAgICByZXR1cm4gVXRpbC5zb3J0RnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIsIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbik7XG4gIH1cblxuICBvblNsaWRlQ2hhbmdlKGU6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5pc0N1c3RvbUZpbHRlclN1YmplY3QubmV4dChlLmNoZWNrZWQpO1xuXG4gICAgaWYgKCFlLmNoZWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdGlvbiBtb2RlXG4gICAgICB0aGlzLmluaXRpYWxpemVEYXRhTGlzdCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBpc1RleHRUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc051bWVyaWNUeXBlKCkgJiYgIXRoaXMuaXNEYXRlVHlwZSgpO1xuICB9XG5cbiAgaXNOdW1lcmljVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gWydpbnRlZ2VyJywgJ3JlYWwnLCAnY3VycmVuY3knXS5pbmRleE9mKHRoaXMuY29sdW1uLnR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIGlzRGF0ZVR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdkYXRlJyA9PT0gdGhpcy5jb2x1bW4udHlwZTtcbiAgfVxuXG4gIGdldEZpeGVkRGltZW5zaW9uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3NlbGVjdGlvbicgfHwgdGhpcy5tb2RlID09PSAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRTb3J0QnlBbHBoYUljb24oKSB7XG4gICAgbGV0IGljb24gPSAnb250aW1pemU6c29ydF9ieV9hbHBoYSc7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIGljb24gKz0gJ18nICsgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJDb2x1bW4oKTogT0ZpbHRlckNvbHVtbiB7XG4gICAgbGV0IG9iajogT0ZpbHRlckNvbHVtbiA9IHsgYXR0cjogJycsIHNvcnQ6ICcnLCBzdGFydFZpZXc6ICcnIH07XG4gICAgb2JqLmF0dHIgPSB0aGlzLmNvbHVtbi5hdHRyO1xuICAgIG9iai5zb3J0ID0gdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIG9iai5zdGFydFZpZXcgPSB0aGlzLnN0YXJ0VmlldztcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHVibGljIGdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VmlldztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUeXBlZFZhbHVlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKCkpIHtcbiAgICAgIHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEYXRlVHlwZSgpKSB7XG4gICAgICB2YWx1ZSA9IGNvbnRyb2wudmFsdWUudmFsdWVPZigpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uRGF0YVVzaW5nUmVuZGVyZXIoKSB7XG4gICAgY29uc3QgdXNlUmVuZGVyZXIgPSB0aGlzLmNvbHVtbi5yZW5kZXJlciAmJiB0aGlzLmNvbHVtbi5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGEubWFwKChyb3cpID0+IHVzZVJlbmRlcmVyID8gdGhpcy5jb2x1bW4ucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W3RoaXMuY29sdW1uLmF0dHJdLCByb3cpIDogcm93W3RoaXMuY29sdW1uLmF0dHJdKTtcbiAgfVxufVxuIiwiPHNwYW4gbWF0LWRpYWxvZy10aXRsZT57eyAnVEFCTEUuQlVUVE9OUy5GSUxURVJfQllfQ09MVU1OJyB8IG9UcmFuc2xhdGUgfX06IHt7IGNvbHVtbi50aXRsZSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy1saXN0LWNvbnRhaW5lclwiPlxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIiBbY2xhc3MuY29udGVudC13cmFwcGVyLWZpeGVkLWRpbWVuc2lvbl09XCJnZXRGaXhlZERpbWVuc2lvbkNsYXNzKClcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjY3VzdG9tRmlsdGVyU2xpZGUgKGNoYW5nZSk9XCJvblNsaWRlQ2hhbmdlKCRldmVudClcIiBbY2hlY2tlZF09XCIoaXNDdXN0b21GaWx0ZXIgfCBhc3luYylcIiAqbmdJZj1cImlzRGVmYXVsdEZpbHRlciB8IGFzeW5jXCI+XG4gICAgICB7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5DVVNUT01fRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGRpdiBmeEZpbGwgKm5nSWY9XCIhKGlzQ3VzdG9tRmlsdGVyIHwgYXN5bmMpO2Vsc2UgY3VzdG9tRmlsdGVyVGVtcGxhdGVcIiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaGludGVkXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXggc3ZnSWNvbj1cIm9udGltaXplOnNlYXJjaFwiPjwvbWF0LWljb24+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCAjZmlsdGVyIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUicgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICAgIDxtYXQtaGludD57eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5ISU5UX1NUQVInIHwgb1RyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGRpdiAqbmdJZj1cIihsaXN0RGF0YSB8IGFzeW5jKS5sZW5ndGggPiAwOyBlbHNlIGVtcHR5TGlzdERhdGFcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIHN0YXJ0XCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RhcnRcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiIFtjaGVja2VkXT1cImFyZUFsbFNlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGUoKVwiIFtkaXNhYmxlZF09XCIhbGlzdERhdGFcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94XCI+XG4gICAgICAgICAgICB7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5DSEVDS19BTEwnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxpc3REYXRhXCIgY2xhc3M9XCJjb2x1bW4tZmlsdGVyLWVtcHR5LWxpc3RcIj5cbiAgICAgICAgICAgIHt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkxJU1RfRU1QVFlfRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tTb3J0VmFsdWVzKClcIj5cbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiZ2V0U29ydEJ5QWxwaGFJY29uKClcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGlzdERhdGE+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWZpbHRlci1lbXB0eS1saXN0XCI+XG4gICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTElTVF9FTVBUWScgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgKm5nSWY9XCJwcmVsb2FkVmFsdWVzIHx8IGxpc3REYXRhXCIgI2ZpbHRlclZhbHVlTGlzdCBjbGFzcz1cInNlbGVjdC12YWx1ZXMtbGlzdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWxpc3Qtb3B0aW9uICpuZ0Zvcj1cImxldCByZWNvcmQgb2YgKGxpc3REYXRhIHwgYXN5bmMpOyBsZXQgaSA9IGluZGV4XCIgY2hlY2tib3hQb3NpdGlvbj1cImJlZm9yZVwiIFtzZWxlY3RlZF09XCJyZWNvcmQuc2VsZWN0ZWRcIlxuICAgICAgICAgIFt2YWx1ZV09XCJyZWNvcmRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5yZW5kZXJlclwiPlxuICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlIHx8ICgnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5FTVBUWV9WQUxVRScgfCBvVHJhbnNsYXRlKSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlclwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5yZW5kZXJlci50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjZWxsdmFsdWU6IHJlY29yZC52YWx1ZSwgcm93dmFsdWU6IHJlY29yZC5yb3dWYWx1ZSB9XCI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG48bWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiY2xlYXJBY3Rpb25cIiBjbGFzcz1cIm8tYnV0dG9uLWluZm9cIj5cbiAgICB7eyAnVEFCTEUuQlVUVE9OUy5GSUxURVJfQ0xFQVInIHwgb1RyYW5zbGF0ZSB9fSA8L2J1dHRvbj5cbiAgPHNwYW4gYWxpZ249XCJlbmRcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiY2FuY2VsQWN0aW9uXCIgY2xhc3M9XCJvLWJ1dHRvbi1kZWZhdWx0IGNhbmNlbFwiPlxuICAgICAge3sgJ0NBTkNFTCcgfCBvVHJhbnNsYXRlIH19IDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJhY2NlcHRBY3Rpb25cIiBjbGFzcz1cIm8tYnV0dG9uLXByaW1hcnlcIj5cbiAgICAgIHt7ICdBQ0NFUFQnIHwgb1RyYW5zbGF0ZSB9fSA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG5cbjwhLS0gVEVNUExBVEUgQ1VTVE9NIEZJTFRFUi0tPlxuPG5nLXRlbXBsYXRlICNjdXN0b21GaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAqbmdJZj1cImlzVGV4dFR5cGUoKVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggY2xhc3M9XCJoaW50ZWRcIj5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCAjZmlsdGVyVGV4dCBbZm9ybUNvbnRyb2xdPVwiZmNUZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgIDxtYXQtaGludD57eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5ISU5UX1NUQVInIHwgb1RyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhclZhbHVlcygpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpc051bWVyaWNUeXBlKClcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTJweFwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiZmNGcm9tXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5GUk9NJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiZmNUb1wiIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uVE8nIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhclZhbHVlcygpXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpc0RhdGVUeXBlKClcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTJweFwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlcGlja2VyRnJvbVwiIFttYXhdPVwiZmNUby52YWx1ZVwiIFtmb3JtQ29udHJvbF09XCJmY0Zyb21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkZST00nIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJkYXRlcGlja2VyRnJvbVwiPlxuICAgICAgICA8bWF0LWljb24gbWF0RGF0ZXBpY2tlclRvZ2dsZUljb24+dG9kYXk8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVwaWNrZXJGcm9tIFtzdGFydFZpZXddPVwiZ2V0U3RhcnRlZFZpZXdEYXRlcGlja2VyKClcIj48L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cImRhdGVwaWNrZXJUb1wiIFttaW5dPVwiZmNGcm9tLnZhbHVlXCIgW2Zvcm1Db250cm9sXT1cImZjVG9cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLlRPJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXBpY2tlclRvXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj50b2RheTwvbWF0LWljb24+XG4gICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZXBpY2tlclRvIFtzdGFydFZpZXddPVwiZ2V0U3RhcnRlZFZpZXdEYXRlcGlja2VyKClcIj48L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJWYWx1ZXMoKVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG48L25nLXRlbXBsYXRlPlxuIl19
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2ZpbHRlci1ieS1jb2x1bW4vby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sd0JBQXdCLENBQUM7QUFFbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUseUJBQXlCLEVBQXNCLE1BQU0sdURBQXVELENBQUM7QUFDdEgsT0FBTyxFQUVMLCtCQUErQixFQUNoQyxNQUFNLCtEQUEr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QUUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoRSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFBO1NBQ3BEO1FBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVTLDBCQUEwQjtRQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekksQ0FBQzs7cUlBblpVLHVDQUF1Qyw4Q0F1Q3hDLGVBQWU7eUhBdkNkLHVDQUF1Qyx3VkMzQ3BELGcyTkErSEE7NEZEcEZhLHVDQUF1QztrQkFWbkQsU0FBUzsrQkFDRSxzQ0FBc0MsaUJBR2pDLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osbUNBQW1DLEVBQUUsTUFBTTtxQkFDNUM7OzBCQXlDRSxNQUFNOzJCQUFDLGVBQWU7NENBWEosTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNXLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNlbGVjdGlvbkxpc3QsIE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHtcbiAgVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGEsXG4gIFRhYmxlRmlsdGVyQnlDb2x1bW5EaWFsb2dSZXN1bHRcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEudHlwZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPRmlsdGVyQ29sdW1uIH0gZnJvbSAnLi4vLi4vaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBNYXRSYWRpb0NoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vby10YWJsZS5jb21wb25lbnQnO1xuXG5jb25zdCBDVVNUT01fRklMVEVSU19PUEVSQVRPUlMgPSBbQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMLCBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUwsIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTiwgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1maWx0ZXItYnktY29sdW1uLWRpYWxvZ10nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgYWNjZXB0QWN0aW9uID0gVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5BQ0NFUFQ7XG4gIHB1YmxpYyBjYW5jZWxBY3Rpb24gPSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNBTkNFTDtcbiAgcHVibGljIGNsZWFyQWN0aW9uID0gVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5DTEVBUjtcblxuICBjb2x1bW46IE9Db2x1bW47XG4gIHByZWxvYWRWYWx1ZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBtb2RlOiBzdHJpbmc7XG4gIHN0YXJ0VmlldzogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFyJyB8ICcnO1xuXG4gIHB1YmxpYyBvblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxPRmlsdGVyQ29sdW1uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0N1c3RvbUZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNDdXN0b21GaWx0ZXI6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzRGVmYXVsdEZpbHRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNEZWZhdWx0RmlsdGVyOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc0RlZmF1bHRGaWx0ZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGZjVGV4dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmNGcm9tID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBmY1RvID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gIHByb3RlY3RlZCBjb2x1bW5EYXRhOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdID0gW107XG4gIHByb3RlY3RlZCB0YWJsZURhdGE6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0RGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10+KFtdKTtcbiAgcHJvdGVjdGVkIF9saXN0RGF0YTogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPiA9IHRoaXMubGlzdERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcicpIGZpbHRlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZmlsdGVyVmFsdWVMaXN0JykgZmlsdGVyVmFsdWVMaXN0OiBNYXRTZWxlY3Rpb25MaXN0O1xuICBwdWJsaWMgYWN0aXZlU29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJztcbiAgc291cmNlRGF0YTtcbiAgcXVlcnlCeUZpbHRlckNvbHVtblN1YnNjcmlwdGlvbjogYW55O1xuICB0YWJsZTogT1RhYmxlQ29tcG9uZW50O1xuICBzaG93RmlsdGVyVmFsdWVzT3B0aW9uOiBib29sZWFuO1xuICBxdWVyeU1ldGhvZE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YTogYW55XG4gICkge1xuXG4gICAgaWYgKGRhdGEuY29sdW1uKSB7XG4gICAgICB0aGlzLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlID0gZGF0YS50YWJsZTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCkge1xuICAgIHRoaXMuc2hvd0ZpbHRlclZhbHVlc09wdGlvbiA9IHRoaXMudGFibGUucGFnaW5hdGlvbkNvbnRyb2xzO1xuICAgIHRoaXMuc291cmNlRGF0YSA9XG4gICAgICB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ/LmdldEZpbHRlclZhbHVlc0luRGF0YSh0aGlzLmNvbHVtbi5hdHRyKSB8fFxuICAgICAgdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50Py5maWx0ZXJWYWx1ZXNJbkRhdGEgfHwgJ2N1cnJlbnQtcGFnZSc7XG5cbiAgICB0aGlzLm1vZGUgPSB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPyB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQubW9kZSA6ICdkZWZhdWx0JztcbiAgICB0aGlzLmlzRGVmYXVsdEZpbHRlclN1YmplY3QubmV4dCh0aGlzLm1vZGUgPT09ICdkZWZhdWx0Jyk7XG4gICAgdGhpcy5pc0N1c3RvbUZpbHRlclN1YmplY3QubmV4dCh0aGlzLm1vZGUgPT09ICdjdXN0b20nKTtcblxuICAgIGxldCBwcmV2aW91c0ZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyID0gdGhpcy50YWJsZS5kYXRhU291cmNlLmdldENvbHVtblZhbHVlRmlsdGVyQnlBdHRyKHRoaXMuY29sdW1uLmF0dHIpIHx8IHtcbiAgICAgIGF0dHI6IHVuZGVmaW5lZCxcbiAgICAgIG9wZXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICB2YWx1ZXM6IHVuZGVmaW5lZCxcbiAgICAgIGF2YWlsYWJsZVZhbHVlczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcmV2aW91c0ZpbHRlci5vcGVyYXRvcikpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21GaWx0ZXJTdWJqZWN0Lm5leHQoQ1VTVE9NX0ZJTFRFUlNfT1BFUkFUT1JTLmluZGV4T2YocHJldmlvdXNGaWx0ZXIub3BlcmF0b3IpICE9PSAtMSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmVsb2FkVmFsdWVzID0gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID8gdGhpcy50YWJsZS5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LnByZWxvYWRWYWx1ZXMgOiB0cnVlO1xuICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9IHRoaXMudGFibGUuZ2V0U29ydEZpbHRlckNvbHVtbih0aGlzLmNvbHVtbikgfHwgJyc7XG4gICAgdGhpcy5zdGFydFZpZXcgPSB0aGlzLnRhYmxlLmdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbih0aGlzLmNvbHVtbikgfHwgJ21vbnRoJ1xuXG4gICAgY29uc3QgcXVlcnlNZXRob2QgPSB0aGlzLnRhYmxlLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ/LmdldFF1ZXJ5TWV0aG9kT2ZGaWx0ZXJDb2x1bW4odGhpcy5jb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHF1ZXJ5TWV0aG9kKSkge1xuICAgICAgdGhpcy5xdWVyeU1ldGhvZE5hbWUgPSBxdWVyeU1ldGhvZDtcbiAgICAgIHRoaXMuc291cmNlRGF0YSA9ICdhbGwtZGF0YSc7XG4gICAgfVxuICAgIHRoaXMuZ2V0RGF0YSh0aGlzLnNvdXJjZURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGFBbmRJbml0aWFsaXplRGF0YUxpc3QocHJldmlvdXNGaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcikge1xuXG4gICAgdGhpcy5wYXJzZUxpc3REYXRhKHByZXZpb3VzRmlsdGVyKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcmV2aW91c0ZpbHRlcikpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUN1c3RvbUZpbHRlclZhbHVlcyhwcmV2aW91c0ZpbHRlcik7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFMaXN0KHByZXZpb3VzRmlsdGVyKTtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCk7XG4gIH1cblxuICBnZXQgbGlzdERhdGEoKTogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3REYXRhO1xuICB9XG5cbiAgc2V0IGxpc3REYXRhKGFyZzogT2JzZXJ2YWJsZTxUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdPikge1xuICAgIHRoaXMuX2xpc3REYXRhID0gYXJnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVEYXRhTGlzdChmaWx0ZXI/OiBPQ29sdW1uVmFsdWVGaWx0ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmVsb2FkVmFsdWVzIHx8IChmaWx0ZXIgJiYgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOKSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gQ29kZXMuQVNDX1NPUlQgfHwgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uID09PSBDb2Rlcy5ERVNDX1NPUlQpIHtcbiAgICAgICAgdGhpcy5zb3J0RGF0YSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dCh0aGlzLmNvbHVtbkRhdGEuc2xpY2UoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVGaWx0ZXJFdmVudCgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLmZpbHRlci5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTUwKSlcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgbGV0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSB0aGlzLmZpbHRlci5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGZpbHRlclZhbHVlID0gVXRpbC5ub3JtYWxpemVTdHJpbmcoZmlsdGVyVmFsdWUpO1xuICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCcqJykgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhU3ViamVjdC5uZXh0KHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoaXRlbSA9PiBuZXcgUmVnRXhwKCdeJyArIFV0aWwubm9ybWFsaXplU3RyaW5nKGZpbHRlclZhbHVlKS5zcGxpdCgnKicpLmpvaW4oJy4qJykgKyAnJCcpLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbS5yZW5kZXJlZFZhbHVlKSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dCh0aGlzLmNvbHVtbkRhdGEuZmlsdGVyKGl0ZW0gPT4gKFV0aWwubm9ybWFsaXplU3RyaW5nKGl0ZW0ucmVuZGVyZWRWYWx1ZSkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgIT09IC0xKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVDdXN0b21GaWx0ZXJWYWx1ZXMoZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICBpZiAodGhpcy5pc1RleHRUeXBlKCkpIHtcbiAgICAgICAgICB0aGlzLmZjVGV4dC5zZXRWYWx1ZShmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZmlsdGVyLm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgIHRoaXMuZmNGcm9tLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlc1swXSkgOiBmaWx0ZXIudmFsdWVzWzBdKTtcbiAgICAgICAgdGhpcy5mY1RvLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlc1sxXSkgOiBmaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGZpbHRlci5vcGVyYXRvciA9PT0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICB0aGlzLmZjRnJvbS5zZXRWYWx1ZSh0aGlzLmlzRGF0ZVR5cGUoKSA/IG5ldyBEYXRlKGZpbHRlci52YWx1ZXMpIDogZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBmaWx0ZXIub3BlcmF0b3IgPT09IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTEVTU19FUVVBTDpcbiAgICAgICAgdGhpcy5mY1RvLnNldFZhbHVlKHRoaXMuaXNEYXRlVHlwZSgpID8gbmV3IERhdGUoZmlsdGVyLnZhbHVlcykgOiBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmFsdWVMaXN0ID8gdGhpcy5maWx0ZXJWYWx1ZUxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLm1hcChzZWxlY3RlZCA9PiBzZWxlY3RlZC52YWx1ZSkgOiBbXTtcbiAgfVxuXG4gIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gdGhpcy5jb2x1bW5EYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGlzSW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoICE9PSB0aGlzLmNvbHVtbkRhdGEubGVuZ3RoO1xuICB9XG5cbiAgb25TZWxlY3QoZXZlbnQ6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpIHtcbiAgICBldmVudC5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi52YWx1ZS5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBvblNlbGVjdEFsbENoYW5nZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZUxpc3Quc2VsZWN0QWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWVMaXN0LmRlc2VsZWN0QWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdERhdGEoZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbkRhdGEgPSBbXTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZmlsdGVyPy5hdmFpbGFibGVWYWx1ZXMpKSB7XG4gICAgICB0aGlzLmNvbHVtbkRhdGEgPSBmaWx0ZXIuYXZhaWxhYmxlVmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2xSZW5kZXJlZFZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uRGF0YVVzaW5nUmVuZGVyZXIoKTtcbiAgICAgIGNvbnN0IGNvbFZhbHVlczogYW55W10gPSB0aGlzLnRhYmxlRGF0YS5tYXAoZWxlbSA9PiBlbGVtW3RoaXMuY29sdW1uLmF0dHJdKTtcblxuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSA9PT0gJ2N1cnJlbnQtcGFnZScpIHtcbiAgICAgICAgY29sUmVuZGVyZWRWYWx1ZXMuZm9yRWFjaCgocmVuZGVyZWRWYWx1ZSwgaSkgPT4ge1xuICAgICAgICAgIC8qU2VsZWN0aW9uIGRpc3RpbnQgdmFsdWVzICovXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbHVtbkRhdGEuZmluZChpdGVtID0+IGl0ZW0ucmVuZGVyZWRWYWx1ZSA9PT0gcmVuZGVyZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSW50b0NvbHVtbkRhdGEocmVuZGVyZWRWYWx1ZSwgY29sVmFsdWVzLCBpLCBmaWx0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xSZW5kZXJlZFZhbHVlcy5mb3JFYWNoKChyZW5kZXJlZFZhbHVlLCBpKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRJbnRvQ29sdW1uRGF0YShyZW5kZXJlZFZhbHVlLCBjb2xWYWx1ZXMsIGksIGZpbHRlcik7XG5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnRvQ29sdW1uRGF0YShyZW5kZXJlZFZhbHVlOiBhbnksIGNvbFZhbHVlczogYW55W10sIGk6IG51bWJlciwgZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpIHtcbiAgICB0aGlzLmNvbHVtbkRhdGEucHVzaCh7XG4gICAgICByZW5kZXJlZFZhbHVlOiByZW5kZXJlZFZhbHVlLFxuICAgICAgdmFsdWU6IGNvbFZhbHVlc1tpXSxcbiAgICAgIHJvd1ZhbHVlOiB0aGlzLnRhYmxlRGF0YVtpXSxcbiAgICAgIHNlbGVjdGVkOiBmaWx0ZXI/Lm9wZXJhdG9yID09PSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOICYmIChmaWx0ZXI/LnZhbHVlcyB8fCBbXSkuaW5kZXhPZihjb2xWYWx1ZXNbaV0pICE9PSAtMSxcbiAgICAgIC8vIHN0b3JpbmcgdGhlIGZpcnN0IGluZGV4IHdoZXJlIHRoaXMgcmVuZGVyZWRWYWx1ZSBpcyBvYnRhaW5lZC4gSW4gdGhlIHRlbXBsYXRlIG9mIHRoaXMgY29tcG9uZW50IHRoZSBjb2x1bW4gcmVuZGVyZXIgd2lsbCBvYnRhaW4gdGhlXG4gICAgICAvLyByb3cgdmFsdWUgb2YgdGhpcyBpbmRleFxuICAgICAgdGFibGVJbmRleDogaVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVzRmlsdGVyKCk6IE9Db2x1bW5WYWx1ZUZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIgPSB7XG4gICAgICBhdHRyOiB0aGlzLmNvbHVtbi5hdHRyLFxuICAgICAgb3BlcmF0b3I6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlczogdW5kZWZpbmVkLFxuICAgICAgYXZhaWxhYmxlVmFsdWVzOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tRmlsdGVyU3ViamVjdC5nZXRWYWx1ZSgpKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU47XG4gICAgICAgIGZpbHRlci52YWx1ZXMgPSBzZWxlY3RlZFZhbHVlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICAgICAgICBmaWx0ZXIuYXZhaWxhYmxlVmFsdWVzID0gdGhpcy5jb2x1bW5EYXRhO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mY1RleHQudmFsdWUpIHtcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5FUVVBTDtcbiAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVGV4dCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mY0Zyb20udmFsdWUgJiYgdGhpcy5mY1RvLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci5vcGVyYXRvciA9IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjtcbiAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5nZXRUeXBlZFZhbHVlKHRoaXMuZmNGcm9tKTtcbiAgICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICBmaWx0ZXIudmFsdWVzID0gZnJvbVZhbHVlIDw9IHRvVmFsdWUgPyBbZnJvbVZhbHVlLCB0b1ZhbHVlXSA6IFt0b1ZhbHVlLCBmcm9tVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZmNGcm9tLnZhbHVlKSB7XG4gICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMO1xuICAgICAgICAgIGZpbHRlci52YWx1ZXMgPSB0aGlzLmdldFR5cGVkVmFsdWUodGhpcy5mY0Zyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZjVG8udmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw7XG4gICAgICAgICAgZmlsdGVyLnZhbHVlcyA9IHRoaXMuZ2V0VHlwZWRWYWx1ZSh0aGlzLmZjVG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjbGVhclZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc1RleHRUeXBlKCkpIHtcbiAgICAgIHRoaXMuZmNUZXh0LnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZVR5cGUoKSB8fCB0aGlzLmlzTnVtZXJpY1R5cGUoKSkge1xuICAgICAgdGhpcy5mY0Zyb20uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZmNUby5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tTb3J0VmFsdWVzKCkge1xuICAgIHN3aXRjaCAodGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdhc2MnOlxuICAgICAgICB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVzYyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5vblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLmdldEZpbHRlckNvbHVtbigpKTtcbiAgICB0aGlzLnNvcnREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoKSB7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuY29sdW1uRGF0YSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIHRoaXMubGlzdERhdGFTdWJqZWN0Lm5leHQoc29ydGVkRGF0YS5zb3J0KHRoaXMuc29ydEZ1bmN0aW9uLmJpbmQodGhpcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0RGF0YVN1YmplY3QubmV4dChzb3J0ZWREYXRhKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RnVuY3Rpb24oYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuICAgIGxldCBwcm9wZXJ0eUE6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIGxldCBwcm9wZXJ0eUI6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuICAgIFtwcm9wZXJ0eUEsIHByb3BlcnR5Ql0gPSBbYVsndmFsdWUnXSwgYlsndmFsdWUnXV07XG5cbiAgICByZXR1cm4gVXRpbC5zb3J0RnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIsIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbik7XG4gIH1cblxuICBvblNsaWRlQ2hhbmdlKGU6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5pc0N1c3RvbUZpbHRlclN1YmplY3QubmV4dChlLmNoZWNrZWQpO1xuXG4gICAgaWYgKCFlLmNoZWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdGlvbiBtb2RlXG4gICAgICB0aGlzLmluaXRpYWxpemVEYXRhTGlzdCgpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlckV2ZW50KCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBpc1RleHRUeXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc051bWVyaWNUeXBlKCkgJiYgIXRoaXMuaXNEYXRlVHlwZSgpO1xuICB9XG5cbiAgaXNOdW1lcmljVHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gWydpbnRlZ2VyJywgJ3JlYWwnLCAnY3VycmVuY3knXS5pbmRleE9mKHRoaXMuY29sdW1uLnR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIGlzRGF0ZVR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdkYXRlJyA9PT0gdGhpcy5jb2x1bW4udHlwZTtcbiAgfVxuXG4gIGdldEZpeGVkRGltZW5zaW9uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3NlbGVjdGlvbicgfHwgdGhpcy5tb2RlID09PSAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRTb3J0QnlBbHBoYUljb24oKSB7XG4gICAgbGV0IGljb24gPSAnb250aW1pemU6c29ydF9ieV9hbHBoYSc7XG4gICAgaWYgKHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbiAhPT0gJycpIHtcbiAgICAgIGljb24gKz0gJ18nICsgdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRGaWx0ZXJDb2x1bW4oKTogT0ZpbHRlckNvbHVtbiB7XG4gICAgbGV0IG9iajogT0ZpbHRlckNvbHVtbiA9IHsgYXR0cjogJycsIHNvcnQ6ICcnLCBzdGFydFZpZXc6ICcnIH07XG4gICAgb2JqLmF0dHIgPSB0aGlzLmNvbHVtbi5hdHRyO1xuICAgIG9iai5zb3J0ID0gdGhpcy5hY3RpdmVTb3J0RGlyZWN0aW9uO1xuICAgIG9iai5zdGFydFZpZXcgPSB0aGlzLnN0YXJ0VmlldztcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHVibGljIGdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VmlldztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUeXBlZFZhbHVlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKCkpIHtcbiAgICAgIHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEYXRlVHlwZSgpKSB7XG4gICAgICB2YWx1ZSA9IGNvbnRyb2wudmFsdWUudmFsdWVPZigpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgb25DaGFuZ2VEYXRhU291cmNlKGV2ZW50OiBNYXRSYWRpb0NoYW5nZSkge1xuICAgIHRoaXMuZ2V0RGF0YShldmVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGEoc291cmNlRGF0YTogc3RyaW5nKSB7XG4gICAgaWYgKHNvdXJjZURhdGEgPT09ICdjdXJyZW50LXBhZ2UnKSB7XG4gICAgICAvKkdldCBmaWx0ZXIgdmFsdWVzIG9uIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KG51bGwpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAvKkdldCBmaWx0ZXIgdmFsdWVzIG9uIHRoZSBhbGwgcGFnZXMqL1xuICAgICAgdGhpcy5xdWVyeUJ5RmlsdGVyQ29sdW1uU3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUJ5RmlsdGVyQ29sdW1uKHRoaXMuY29sdW1uLmF0dHIpLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcbiAgICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KG51bGwpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZS5nZXRBbGxWYWx1ZXMoKTtcbiAgICAgIHRoaXMucGFyc2VEYXRhQW5kSW5pdGlhbGl6ZURhdGFMaXN0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXJ5QnlGaWx0ZXJDb2x1bW4oYXR0cjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+IHwgT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGNvbnN0IGt2ID0gdGhpcy50YWJsZS5nZXRDb21wb25lbnRGaWx0ZXIoKTtcbiAgICBjb25zdCBhdiA9IFthdHRyXTtcbiAgICBsZXQgc3FsVHlwZXMgPSB7fTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoa3YpICYmICFVdGlsLmlzT2JqZWN0RW1wdHkoa3YpKSB7XG4gICAgICBzcWxUeXBlcyA9IHRoaXMudGFibGUuZ2V0U3FsVHlwZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5RdWVyeUFyZ3MgPSBba3YsIGF2LCB0aGlzLnRhYmxlLmVudGl0eSwgc3FsVHlwZXMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kTmFtZSA9IHRoaXMucXVlcnlNZXRob2ROYW1lIHx8IENvZGVzLlFVRVJZX01FVEhPRDtcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy50YWJsZS5nZXRTZXJ2aWNlKCk7XG4gICAgaWYgKHNlcnZpY2UgJiYgKHF1ZXJ5TWV0aG9kTmFtZSBpbiBzZXJ2aWNlKSAmJiB0aGlzLnRhYmxlLmVudGl0eSkge1xuICAgICAgcmV0dXJuIHNlcnZpY2VbcXVlcnlNZXRob2ROYW1lXSguLi5jb2x1bW5RdWVyeUFyZ3MpXG4gICAgfVxuICAgIHJldHVybiBvZih7fSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uRGF0YVVzaW5nUmVuZGVyZXIoKSB7XG4gICAgY29uc3QgdXNlUmVuZGVyZXIgPSB0aGlzLmNvbHVtbi5yZW5kZXJlciAmJiB0aGlzLmNvbHVtbi5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGEubWFwKChyb3cpID0+IHVzZVJlbmRlcmVyID8gdGhpcy5jb2x1bW4ucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W3RoaXMuY29sdW1uLmF0dHJdLCByb3cpIDogcm93W3RoaXMuY29sdW1uLmF0dHJdKTtcbiAgfVxufVxuIiwiPHNwYW4gbWF0LWRpYWxvZy10aXRsZT57eyAnVEFCTEUuQlVUVE9OUy5GSUxURVJfQllfQ09MVU1OJyB8IG9UcmFuc2xhdGUgfX06IHt7IGNvbHVtbi50aXRsZSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy1saXN0LWNvbnRhaW5lclwiPlxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIiBbY2xhc3MuY29udGVudC13cmFwcGVyLWZpeGVkLWRpbWVuc2lvbl09XCJnZXRGaXhlZERpbWVuc2lvbkNsYXNzKClcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjY3VzdG9tRmlsdGVyU2xpZGUgKGNoYW5nZSk9XCJvblNsaWRlQ2hhbmdlKCRldmVudClcIiBbY2hlY2tlZF09XCIoaXNDdXN0b21GaWx0ZXIgfCBhc3luYylcIiAqbmdJZj1cImlzRGVmYXVsdEZpbHRlciB8IGFzeW5jXCI+XG4gICAgICB7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5DVVNUT01fRklMVEVSJyB8IG9UcmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGRpdiBmeEZsZXg9XCIxIDEgMTAwJVwiICpuZ0lmPVwiIShpc0N1c3RvbUZpbHRlciB8IGFzeW5jKTtlbHNlIGN1c3RvbUZpbHRlclRlbXBsYXRlXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhpbnRlZFwiPlxuICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4IHN2Z0ljb249XCJvbnRpbWl6ZTpzZWFyY2hcIj48L21hdC1pY29uPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgI2ZpbHRlciBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVInIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgICA8bWF0LWhpbnQ+e3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uSElOVF9TVEFSJyB8IG9UcmFuc2xhdGUgfX08L21hdC1oaW50PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgKm5nSWY9XCIobGlzdERhdGEgfCBhc3luYykubGVuZ3RoID4gMDsgZWxzZSBlbXB0eUxpc3REYXRhXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBzdGFydFwiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0YXJ0XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIiBbY2hlY2tlZF09XCJhcmVBbGxTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlKClcIiBbZGlzYWJsZWRdPVwiIWxpc3REYXRhXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveFwiPlxuICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uQ0hFQ0tfQUxMJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsaXN0RGF0YVwiIGNsYXNzPVwiY29sdW1uLWZpbHRlci1lbXB0eS1saXN0XCI+XG4gICAgICAgICAgICB7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5MSVNUX0VNUFRZX0ZJTFRFUicgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdGFydFwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25DbGlja1NvcnRWYWx1ZXMoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImdldFNvcnRCeUFscGhhSWNvbigpXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAqbmdJZj1cInNob3dGaWx0ZXJWYWx1ZXNPcHRpb25cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImZpbHRlcnZhbHVlcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBtYXQtc3ViaGVhZGVyPlxuICAgICAgICAgICAgICAgIHt7J1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uTEFCRUxfREFUQScgfCBvVHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJEYXRhXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEdhcD1cIjEycHhcIiBbKG5nTW9kZWwpXT1cInNvdXJjZURhdGFcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRGF0YVNvdXJjZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJjdXJyZW50LXBhZ2VcIj57eydUQUJMRS5GSUxURVJfQllfQ09MVU1OLkNVUlJFTlRfUEFHRScgfCBvVHJhbnNsYXRlfX08L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJhbGwtZGF0YVwiPnt7J1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uQUxMX1BBR0UnIHwgb1RyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlMaXN0RGF0YT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tZmlsdGVyLWVtcHR5LWxpc3RcIj5cbiAgICAgICAgICB7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5MSVNUX0VNUFRZJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjI1XCIgZnhGbGV4PlxuICAgICAgICA8bWF0LXNlbGVjdGlvbi1saXN0ICpuZ0lmPVwicHJlbG9hZFZhbHVlcyB8fCBsaXN0RGF0YVwiICNmaWx0ZXJWYWx1ZUxpc3QgY2xhc3M9XCJzZWxlY3QtdmFsdWVzLWxpc3RcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0KCRldmVudClcIj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcmVjb3JkIG9mIChsaXN0RGF0YSB8IGFzeW5jKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgW3NlbGVjdGVkXT1cInJlY29yZC5zZWxlY3RlZFwiIFt2YWx1ZV09XCJyZWNvcmRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ucmVuZGVyZXJcIj5cbiAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWUgfHwgKCdUQUJMRS5GSUxURVJfQllfQ09MVU1OLkVNUFRZX1ZBTFVFJyB8IG9UcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2x1bW4ucmVuZGVyZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4ucmVuZGVyZXIudGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNlbGx2YWx1ZTogcmVjb3JkLnZhbHVlLCByb3d2YWx1ZTogcmVjb3JkLnJvd1ZhbHVlIH1cIj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImNsZWFyQWN0aW9uXCIgY2xhc3M9XCJvLWJ1dHRvbi1pbmZvXCI+XG4gICAge3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX0NMRUFSJyB8IG9UcmFuc2xhdGUgfX0gPC9idXR0b24+XG4gIDxzcGFuIGFsaWduPVwiZW5kXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImNhbmNlbEFjdGlvblwiIGNsYXNzPVwiby1idXR0b24tZGVmYXVsdCBjYW5jZWxcIj5cbiAgICAgIHt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fSA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiYWNjZXB0QWN0aW9uXCIgY2xhc3M9XCJvLWJ1dHRvbi1wcmltYXJ5XCI+XG4gICAgICB7eyAnQUNDRVBUJyB8IG9UcmFuc2xhdGUgfX0gPC9idXR0b24+XG4gIDwvc3Bhbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48IS0tIFRFTVBMQVRFIENVU1RPTSBGSUxURVItLT5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tRmlsdGVyVGVtcGxhdGU+XG4gIDxkaXYgKm5nSWY9XCJpc1RleHRUeXBlKClcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGNsYXNzPVwiaGludGVkXCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgI2ZpbHRlclRleHQgW2Zvcm1Db250cm9sXT1cImZjVGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUicgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICA8bWF0LWhpbnQ+e3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uSElOVF9TVEFSJyB8IG9UcmFuc2xhdGUgfX08L21hdC1oaW50PlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJWYWx1ZXMoKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXNOdW1lcmljVHlwZSgpXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEycHhcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImZjRnJvbVwiIHBsYWNlaG9sZGVyPVwie3sgJ1RBQkxFLkZJTFRFUl9CWV9DT0xVTU4uRlJPTScgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImZjVG9cIiBwbGFjZWhvbGRlcj1cInt7ICdUQUJMRS5GSUxURVJfQllfQ09MVU1OLlRPJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJWYWx1ZXMoKVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXNEYXRlVHlwZSgpXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEycHhcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZGF0ZXBpY2tlckZyb21cIiBbbWF4XT1cImZjVG8udmFsdWVcIiBbZm9ybUNvbnRyb2xdPVwiZmNGcm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5GUk9NJyB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXBpY2tlckZyb21cIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uPnRvZGF5PC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlcGlja2VyRnJvbSBbc3RhcnRWaWV3XT1cImdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlcGlja2VyVG9cIiBbbWluXT1cImZjRnJvbS52YWx1ZVwiIFtmb3JtQ29udHJvbF09XCJmY1RvXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnVEFCTEUuRklMVEVSX0JZX0NPTFVNTi5UTycgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVwaWNrZXJUb1wiPlxuICAgICAgICA8bWF0LWljb24gbWF0RGF0ZXBpY2tlclRvZ2dsZUljb24+dG9kYXk8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVwaWNrZXJUbyBbc3RhcnRWaWV3XT1cImdldFN0YXJ0ZWRWaWV3RGF0ZXBpY2tlcigpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyVmFsdWVzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -3,7 +3,9 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export const DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER_COLUMN = [
|
|
4
4
|
'attr',
|
|
5
5
|
'sort',
|
|
6
|
-
'startView:start-view'
|
|
6
|
+
'startView:start-view',
|
|
7
|
+
'queryMethod:query-method',
|
|
8
|
+
'filterValuesInData: filter-values-in-data'
|
|
7
9
|
];
|
|
8
10
|
export class OTableColumnsFilterColumnComponent {
|
|
9
11
|
constructor() {
|
|
@@ -13,7 +15,7 @@ export class OTableColumnsFilterColumnComponent {
|
|
|
13
15
|
}
|
|
14
16
|
}
|
|
15
17
|
OTableColumnsFilterColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableColumnsFilterColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
OTableColumnsFilterColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableColumnsFilterColumnComponent, selector: "o-table-columns-filter-column", inputs: { attr: "attr", sort: "sort", startView: ["start-view", "startView"] }, ngImport: i0, template: ' ', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
18
|
+
OTableColumnsFilterColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableColumnsFilterColumnComponent, selector: "o-table-columns-filter-column", inputs: { attr: "attr", sort: "sort", startView: ["start-view", "startView"], queryMethod: ["query-method", "queryMethod"], filterValuesInData: ["filter-values-in-data", "filterValuesInData"] }, ngImport: i0, template: ' ', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17
19
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableColumnsFilterColumnComponent, decorators: [{
|
|
18
20
|
type: Component,
|
|
19
21
|
args: [{
|
|
@@ -23,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
23
25
|
inputs: DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER_COLUMN
|
|
24
26
|
}]
|
|
25
27
|
}] });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFXbkUsTUFBTSxDQUFDLE1BQU0sMkNBQTJDLEdBQUc7SUFFekQsTUFBTTtJQUVOLE1BQU07SUFFTixzQkFBc0I7SUFDdEIsMEJBQTBCO0lBRTFCLDJDQUEyQztDQUM1QyxDQUFDO0FBU0YsTUFBTSxPQUFPLGtDQUFrQztJQVAvQztRQVNTLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsU0FBSSxHQUF3QixFQUFFLENBQUM7UUFDL0IsY0FBUyxHQUF5QyxPQUFPLENBQUM7S0FJbEU7O2dJQVJZLGtDQUFrQztvSEFBbEMsa0NBQWtDLHdRQUxuQyxHQUFHOzRGQUtGLGtDQUFrQztrQkFQOUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUUsR0FBRztvQkFDYixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsTUFBTSxFQUFFLDJDQUEyQztpQkFDcEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuZXhwb3J0IHR5cGUgT0ZpbHRlckNvbHVtbiA9IHtcbiAgYXR0cjogc3RyaW5nO1xuICBzb3J0OiAnYXNjJyB8ICdkZXNjJyB8ICcnO1xuICBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcicgfCAnJztcbiAgcXVlcnlNZXRob2Q/OiBzdHJpbmc7XG4gIGZpbHRlclZhbHVlc0luRGF0YT86ICdjdXJyZW50LXBhZ2UnIHwgJ2FsbC1kYXRhJztcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NPTFVNTl9GSUxURVJfQ09MVU1OID0gW1xuICAvLyBhdHRyIFtzdHJpbmddOiBjb2x1bW4gbmFtZS5cbiAgJ2F0dHInLFxuICAvLyBzb3J0IFthc2N8ZGVzY106IGluaXRpYWwgc29ydGluZywgd2l0aCB0aGUgZm9ybWF0IGNvbHVtbjpbQVNDfERFU0NdLlxuICAnc29ydCcsXG4gIC8vIHN0YXJ0VmlldyBbbW9udGh8eWVhcnxtdWx0aS15ZWFyXTogRGF0ZXBpY2tlciBpbml0aWFsIHZpZXcgaW4gY2FzZSBvZiBkYXRlIGNvbHVtbi5cbiAgJ3N0YXJ0VmlldzpzdGFydC12aWV3JyxcbiAgJ3F1ZXJ5TWV0aG9kOnF1ZXJ5LW1ldGhvZCcsXG4gIC8vZmlsdGVyLXZhbHVlcy1pbi1kYXRhOiAgJ2N1cnJlbnQtcGFnZScgfCAnYWxsLWRhdGEnOiBzZXQgbW9kZSB0byBmaWx0ZXIgYnkuIERlZmF1bHQgJ2N1cnJlbnQtcGFnZSdcbiAgJ2ZpbHRlclZhbHVlc0luRGF0YTogZmlsdGVyLXZhbHVlcy1pbi1kYXRhJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4nLFxuICB0ZW1wbGF0ZTogJyAnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NPTFVNTl9GSUxURVJfQ09MVU1OXG59KVxuXG5leHBvcnQgY2xhc3MgT1RhYmxlQ29sdW1uc0ZpbHRlckNvbHVtbkNvbXBvbmVudCB7XG5cbiAgcHVibGljIGF0dHI6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgc29ydDogJ2FzYycgfCAnZGVzYycgfCAnJyA9ICcnO1xuICBwdWJsaWMgc3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInIHwgJycgPSAnbW9udGgnO1xuICBwdWJsaWMgcXVlcnlNZXRob2Q6IHN0cmluZztcbiAgcHVibGljIGZpbHRlclZhbHVlc0luRGF0YTogJ2N1cnJlbnQtcGFnZScgfCAnYWxsLWRhdGEnO1xuXG59XG4iXX0=
|