@porscheinformatik/clr-addons 18.2.8 → 18.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/clr-addons.module.d.ts +2 -1
- package/datagrid/column-reorder/column-reorder.directive.d.ts +27 -0
- package/datagrid/column-reorder/datagrid-column-reorder.module.d.ts +9 -0
- package/datagrid/column-reorder/dynamic-cell-content.component.d.ts +9 -0
- package/datagrid/column-reorder/dynamic-column.d.ts +10 -0
- package/datagrid/column-reorder/index.d.ts +4 -0
- package/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.d.ts +1 -0
- package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +7 -3
- package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +1 -0
- package/datagrid/index.d.ts +1 -0
- package/esm2022/clr-addons.module.mjs +8 -5
- package/esm2022/datagrid/column-reorder/column-reorder.directive.mjs +92 -0
- package/esm2022/datagrid/column-reorder/datagrid-column-reorder.module.mjs +19 -0
- package/esm2022/datagrid/column-reorder/dynamic-cell-content.component.mjs +46 -0
- package/esm2022/datagrid/column-reorder/dynamic-column.mjs +2 -0
- package/esm2022/datagrid/column-reorder/index.mjs +5 -0
- package/esm2022/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.mjs +1 -1
- package/esm2022/datagrid/datagrid-state-persistence/state-persistence-key.directive.mjs +40 -9
- package/esm2022/datagrid/datagrid-state-persistence/state-persistence-options.interface.mjs +1 -1
- package/esm2022/datagrid/index.mjs +2 -1
- package/fesm2022/clr-addons.mjs +192 -13
- package/fesm2022/clr-addons.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/clr-addons-phs.css +4 -0
- package/styles/clr-addons-phs.css.map +1 -1
- package/styles/clr-addons-phs.min.css +1 -1
- package/styles/clr-addons-phs.min.css.map +1 -1
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { ContentChild, ContentChildren, Directive, ElementRef, HostListener, Input, QueryList, } from '@angular/core';
|
|
1
|
+
import { ContentChild, ContentChildren, Directive, ElementRef, HostListener, inject, Input, isSignal, QueryList, } from '@angular/core';
|
|
2
2
|
import { ClrDatagrid, ClrDatagridColumn, ClrDatagridFilter, ClrDatagridPagination, ClrDatagridSortOrder, DatagridPropertyComparator, } from '@clr/angular';
|
|
3
3
|
import { delay, Subject } from 'rxjs';
|
|
4
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { filter, take, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { DatagridColumnReorderDirective } from '../column-reorder';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@clr/angular";
|
|
7
7
|
const DATE_TYPE = 'date';
|
|
8
8
|
export class StatePersistenceKeyDirective {
|
|
9
|
-
constructor(
|
|
10
|
-
this.datagrid = datagrid;
|
|
9
|
+
constructor() {
|
|
11
10
|
this.useLocalStoreOnly = false;
|
|
12
11
|
this.paginationDescription = '';
|
|
13
12
|
this.canShowPaginationDescription = false;
|
|
14
13
|
this.warnedAboutCustomDescription = false;
|
|
15
14
|
this.destroy$ = new Subject();
|
|
15
|
+
this.datagrid = inject(ClrDatagrid);
|
|
16
|
+
this.reorderDirective = inject(DatagridColumnReorderDirective, { optional: true });
|
|
16
17
|
}
|
|
17
18
|
ngAfterContentInit() {
|
|
18
19
|
if (this.options.serverDriven) {
|
|
@@ -34,6 +35,11 @@ export class StatePersistenceKeyDirective {
|
|
|
34
35
|
if (columnWidthPersistenceEnabled) {
|
|
35
36
|
this.initColumnWidths(localStorageState);
|
|
36
37
|
}
|
|
38
|
+
const columnOrderPersistenceEnabled = this.options.persistColumnOrder ?? false;
|
|
39
|
+
if (columnOrderPersistenceEnabled && !!this.reorderDirective) {
|
|
40
|
+
this.initColumnOrderPersister(localStorageState);
|
|
41
|
+
this.initColumnOrder(localStorageState);
|
|
42
|
+
}
|
|
37
43
|
const paginationPersistenceEnabled = this.options.persistPagination ?? true;
|
|
38
44
|
if (this.pagination?.page && paginationPersistenceEnabled) {
|
|
39
45
|
this.initPageSizePersister(localStorageState);
|
|
@@ -128,6 +134,19 @@ export class StatePersistenceKeyDirective {
|
|
|
128
134
|
});
|
|
129
135
|
this.datagrid.items.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.updatePaginationDescription());
|
|
130
136
|
}
|
|
137
|
+
initColumnOrderPersister(state) {
|
|
138
|
+
this.reorderDirective.columnOrderChanged
|
|
139
|
+
.pipe(takeUntil(this.destroy$),
|
|
140
|
+
// we skip the first value (init), because it's already coming from the local storage, so no need to save it again
|
|
141
|
+
filter(({ trigger }) => trigger !== 'init'))
|
|
142
|
+
.subscribe(({ columns }) => this.persistColumnOrder(state, columns));
|
|
143
|
+
}
|
|
144
|
+
initColumnOrder(savedState) {
|
|
145
|
+
if (savedState?.columns) {
|
|
146
|
+
const entries = Object.entries(savedState.columns).map(([key, value]) => [key, value.order]);
|
|
147
|
+
this.reorderDirective.initializeColumnOrder(Object.fromEntries(entries));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
131
150
|
persistFiltersAndCurrentPage(dgState) {
|
|
132
151
|
const filterPersistenceEnabled = this.options.persistFilters ?? true;
|
|
133
152
|
const paginationPersistenceEnabled = this.options.persistPagination ?? true;
|
|
@@ -176,6 +195,14 @@ export class StatePersistenceKeyDirective {
|
|
|
176
195
|
this.saveLocalStorageState(state);
|
|
177
196
|
}
|
|
178
197
|
}
|
|
198
|
+
persistColumnOrder(state, columns) {
|
|
199
|
+
state.columns = state.columns || {};
|
|
200
|
+
columns.forEach(({ name }, index) => {
|
|
201
|
+
state.columns[name] = state.columns[name] || {};
|
|
202
|
+
state.columns[name].order = index;
|
|
203
|
+
});
|
|
204
|
+
this.saveLocalStorageState(state);
|
|
205
|
+
}
|
|
179
206
|
/**
|
|
180
207
|
* Pagination description must be set by this directive,
|
|
181
208
|
* otherwise we can't update datagrid values from localStorage
|
|
@@ -251,7 +278,11 @@ export class StatePersistenceKeyDirective {
|
|
|
251
278
|
getFilterPropertyName(filter) {
|
|
252
279
|
// for NestedProperty we need to get the original property
|
|
253
280
|
const filterWithProp = filter;
|
|
254
|
-
return (filterWithProp.property?.prop ||
|
|
281
|
+
return (filterWithProp.property?.prop ||
|
|
282
|
+
this.resolveSignal(filterWithProp.property));
|
|
283
|
+
}
|
|
284
|
+
resolveSignal(value) {
|
|
285
|
+
return isSignal(value) ? value() : value;
|
|
255
286
|
}
|
|
256
287
|
getSortProperty(sortBy) {
|
|
257
288
|
if (sortBy) {
|
|
@@ -269,7 +300,7 @@ export class StatePersistenceKeyDirective {
|
|
|
269
300
|
this.destroy$.next();
|
|
270
301
|
this.destroy$.complete();
|
|
271
302
|
}
|
|
272
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: StatePersistenceKeyDirective, deps: [
|
|
303
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: StatePersistenceKeyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
273
304
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { options: ["clrStatePersistenceKey", "options"], useLocalStoreOnly: ["clrUseLocalStoreOnly", "useLocalStoreOnly"], paginationDescription: ["clrPaginationDescription", "paginationDescription"] }, host: { listeners: { "window:beforeunload": "persistColumnWidths()" } }, queries: [{ propertyName: "pagination", first: true, predicate: ClrDatagridPagination, descendants: true }, { propertyName: "paginationElem", first: true, predicate: ClrDatagridPagination, descendants: true, read: ElementRef }, { propertyName: "customFilters", predicate: ClrDatagridFilter, descendants: true }, { propertyName: "gridColumnRefs", predicate: ClrDatagridColumn, read: ElementRef }, { propertyName: "gridColumns", predicate: ClrDatagridColumn }], ngImport: i0 }); }
|
|
274
305
|
}
|
|
275
306
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: StatePersistenceKeyDirective, decorators: [{
|
|
@@ -277,7 +308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
|
|
|
277
308
|
args: [{
|
|
278
309
|
selector: '[clrStatePersistenceKey]',
|
|
279
310
|
}]
|
|
280
|
-
}],
|
|
311
|
+
}], propDecorators: { options: [{
|
|
281
312
|
type: Input,
|
|
282
313
|
args: ['clrStatePersistenceKey']
|
|
283
314
|
}], useLocalStoreOnly: [{
|
|
@@ -305,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
|
|
|
305
336
|
type: HostListener,
|
|
306
337
|
args: ['window:beforeunload']
|
|
307
338
|
}] } });
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGFncmlkL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGlCQUFpQixFQUVqQixpQkFBaUIsRUFFakIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUVwQiwwQkFBMEIsR0FDM0IsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBR2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztBQVV6QixNQUFNLE9BQU8sNEJBQTRCO0lBb0N2QyxZQUFvQixRQUFxQjtRQUFyQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBeEJ6QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFHMUIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBaUIzQixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7UUFDckMsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWEsQ0FBQztJQUU3QyxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFB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QUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEQsV0FBVztzQkFEVixlQUFlO3VCQUFDLGlCQUFpQjtnQkFpTDFCLG1CQUFtQjtzQkFEMUIsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDbHJEYXRhZ3JpZCxcbiAgQ2xyRGF0YWdyaWRDb2x1bW4sXG4gIENsckRhdGFncmlkQ29tcGFyYXRvckludGVyZmFjZSxcbiAgQ2xyRGF0YWdyaWRGaWx0ZXIsXG4gIENsckRhdGFncmlkRmlsdGVySW50ZXJmYWNlLFxuICBDbHJEYXRhZ3JpZFBhZ2luYXRpb24sXG4gIENsckRhdGFncmlkU29ydE9yZGVyLFxuICBDbHJEYXRhZ3JpZFN0YXRlSW50ZXJmYWNlLFxuICBEYXRhZ3JpZFByb3BlcnR5Q29tcGFyYXRvcixcbn0gZnJvbSAnQGNsci9hbmd1bGFyJztcbmltcG9ydCB7IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIH0gZnJvbSAnLi9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS1tb2RlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGVsYXksIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN0YXRlUGVyc2lzdGVuY2VPcHRpb25zIH0gZnJvbSAnLi9zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zLmludGVyZmFjZSc7XG5cbmNvbnN0IERBVEVfVFlQRSA9ICdkYXRlJztcblxuaW50ZXJmYWNlIEZpbHRlclZhbHVlV2l0aE1ldGFkYXRhIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsclN0YXRlUGVyc2lzdGVuY2VLZXldJyxcbn0pXG5leHBvcnQgY2xhc3MgU3RhdGVQZXJzaXN0ZW5jZUtleURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBwZXJzaXN0ZW5jZS5cbiAgICogJ0tleScgcmVwcmVzZW50cyB0aGUgbG9jYWwgc3RvcmFnZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHBlcnNpc3RlbmNlIHN0YXRlIGlzIHN0b3JlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZmllbGRzIHdpdGggdGhlICdwZXJzaXN0JyBwcmVmaXggdG9nZ2xlIHRoZSBwZXJzaXN0ZW5jZSBvZiB0aGUgcmVzcGVjdGl2ZSBkYXRhZ3JpZCBmdW5jdGlvbmFsaXR5LFxuICAgKiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHdheXMgJ3RydWUnLlxuICAgKi9cbiAgQElucHV0KCdjbHJTdGF0ZVBlcnNpc3RlbmNlS2V5JylcbiAgb3B0aW9uczogU3RhdGVQZXJzaXN0ZW5jZU9wdGlvbnM7XG5cbiAgQElucHV0KCdjbHJVc2VMb2NhbFN0b3JlT25seScpXG4gIHVzZUxvY2FsU3RvcmVPbmx5ID0gZmFsc2U7XG5cbiAgQElucHV0KCdjbHJQYWdpbmF0aW9uRGVzY3JpcHRpb24nKVxuICBwYWdpbmF0aW9uRGVzY3JpcHRpb24gPSAnJztcblxuICBAQ29udGVudENoaWxkKENsckRhdGFncmlkUGFnaW5hdGlvbilcbiAgcGFnaW5hdGlvbjogQ2xyRGF0YWdyaWRQYWdpbmF0aW9uO1xuXG4gIEBDb250ZW50Q2hpbGQoQ2xyRGF0YWdyaWRQYWdpbmF0aW9uLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcGFnaW5hdGlvbkVsZW06IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDbHJEYXRhZ3JpZEZpbHRlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBjdXN0b21GaWx0ZXJzOiBRdWVyeUxpc3Q8Q2xyRGF0YWdyaWRGaWx0ZXI+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyRGF0YWdyaWRDb2x1bW4sIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBncmlkQ29sdW1uUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyRGF0YWdyaWRDb2x1bW4pXG4gIGdyaWRDb2x1bW5zOiBRdWVyeUxpc3Q8Q2xyRGF0YWdyaWRDb2x1bW4+O1xuXG4gIGNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24gPSBmYWxzZTtcbiAgd2FybmVkQWJvdXRDdXN0b21EZXNjcmlwdGlvbiA9IGZhbHNlO1xuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhZ3JpZDogQ2xyRGF0YWdyaWQpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VydmVyRHJpdmVuKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGNvbnN0IHZvbGF0aWxlRGF0YVN0YXRlID0gdGhpcy5nZXRWb2xhdGlsZURhdGFTdGF0ZSgpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0YXRlID0gdGhpcy5nZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpO1xuXG4gICAgdGhpcy5pbml0RmlsdGVyKHZvbGF0aWxlRGF0YVN0YXRlKTtcbiAgICB0aGlzLmluaXRTb3J0aW5nKGxvY2FsU3RvcmFnZVN0YXRlKTtcbiAgICB0aGlzLmluaXREYXRhZ3JpZFBlcnNpc3RlcigpO1xuXG4gICAgY29uc3QgY29sdW1uV2lkdGhQZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdENvbHVtbldpZHRocyA/PyBmYWxzZTtcbiAgICBpZiAoY29sdW1uV2lkdGhQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocyhsb2NhbFN0b3JhZ2VTdGF0ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0UGFnaW5hdGlvbiA/PyB0cnVlO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24/LnBhZ2UgJiYgcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgdGhpcy5pbml0UGFnZVNpemVQZXJzaXN0ZXIobG9jYWxTdG9yYWdlU3RhdGUpO1xuICAgICAgdGhpcy5pbml0Q3VycmVudFBhZ2Uodm9sYXRpbGVEYXRhU3RhdGUpO1xuICAgIH1cbiAgICB0aGlzLmNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpdGggdGhpcyBtZXRob2QgZmlsdGVycyBjYW4gYmUgY2xlYXJlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGNsclN0YXRlUGVyc2lzdGVuY2VLZXlcbiAgICogQHBhcmFtIHVzZUxvY2FsU3RvcmVPbmx5IFRoZSBjbHJVc2VMb2NhbFN0b3JlT25seSBpbmRpY2F0b3JcbiAgICovXG4gIHN0YXRpYyBjbGVhckZpbHRlcnMoa2V5OiBzdHJpbmcsIHVzZUxvY2FsU3RvcmVPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoKHVzZUxvY2FsU3RvcmVPbmx5ID8gbG9jYWxTdG9yYWdlIDogc2Vzc2lvblN0b3JhZ2UpLmdldEl0ZW0oa2V5KSkgfHwge307XG4gICAgZGF0YS5jb2x1bW5zID0ge307XG4gICAgKHVzZUxvY2FsU3RvcmVPbmx5ID8gbG9jYWxTdG9yYWdlIDogc2Vzc2lvblN0b3JhZ2UpLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRQYWdlU2l6ZVBlcnNpc3RlcihzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCkge1xuICAgIC8qIHBlcnNpc3QgcGFnZSBzaXplIGNoYW5nZXMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlLnNpemVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShwYWdlU2l6ZSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcbiAgICAgIHN0YXRlLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICB0aGlzLnNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvKiBpbml0IHBhZ2Ugc2l6ZSBvZiBkYXRhZ3JpZCBpZiBhbHJlYWR5IHBlcnNpc3RlZCBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgaWYgKHNhdmVkU3RhdGUucGFnZVNpemUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5wYWdlLnNpemUgPSBzYXZlZFN0YXRlLnBhZ2VTaXplO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEN1cnJlbnRQYWdlKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKSB7XG4gICAgLyogaW5pdCBjdXJyZW50IHBhZ2Ugb2YgZGF0YWdyaWQgaWYgYWxyZWFkeSBwZXJzaXN0ZWQgKi9cbiAgICBpZiAoc2F2ZWRTdGF0ZT8uY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuZGF0YWdyaWQuaXRlbXMuY2hhbmdlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLnBhZ2luYXRpb24ucGFnZS5jdXJyZW50ID0gc2F2ZWRTdGF0ZS5jdXJyZW50UGFnZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbHRlcihzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0RmlsdGVycyA/PyB0cnVlO1xuICAgIGlmIChzYXZlZFN0YXRlLmNvbHVtbnMgJiYgZmlsdGVyUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyhzYXZlZFN0YXRlLmNvbHVtbnMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyKHByb3ApO1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgLyogaWYgdGhlIHNhdmVkIHZhbHVlIGlzIGVtcHR5IGZpbHRlciBzZW5kIG51bGwgKi9cbiAgICAgICAgICBjb25zdCBzYXZlZEZpbHRlclZhbHVlID0gc2F2ZWRTdGF0ZS5jb2x1bW5zW3Byb3BdLmZpbHRlclZhbHVlO1xuICAgICAgICAgIGlmIChzYXZlZEZpbHRlclZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIChmaWx0ZXIgYXMgYW55KVsndmFsdWUnXSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNhdmVkRmlsdGVyVmFsdWUpXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsdWVLZXkgPT4gdmFsdWVLZXkgIT09ICdwcm9wZXJ0eScpXG4gICAgICAgICAgICAgIC5mb3JFYWNoKHZhbHVlS2V5ID0+ICgoZmlsdGVyIGFzIGFueSlbdmFsdWVLZXldID0gdGhpcy5wYXJzZUZpbHRlclZhbHVlKHNhdmVkRmlsdGVyVmFsdWVbdmFsdWVLZXldKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0U29ydGluZyhzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnRQZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdFNvcnQgPz8gdHJ1ZTtcbiAgICBpZiAoc2F2ZWRTdGF0ZS5zb3J0QnkgJiYgc29ydFBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgdGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U29ydFByb3BlcnR5KGNvbHVtbi5zb3J0QnkpID09PSBzYXZlZFN0YXRlLnNvcnRCeSkge1xuICAgICAgICAgIGNvbHVtbi5zb3J0T3JkZXIgPSBzYXZlZFN0YXRlLnNvcnRSZXZlcnNlID8gQ2xyRGF0YWdyaWRTb3J0T3JkZXIuREVTQyA6IENsckRhdGFncmlkU29ydE9yZGVyLkFTQztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uc29ydE9yZGVyID0gQ2xyRGF0YWdyaWRTb3J0T3JkZXIuVU5TT1JURUQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbldpZHRocyhzYXZlZFN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoc0J5RmllbGQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQgPSBzYXZlZFN0YXRlPy5jb2x1bW5zXG4gICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzYXZlZFN0YXRlLmNvbHVtbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB2YWx1ZS53aWR0aF0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5ncmlkQ29sdW1ucyAmJiB0aGlzLmdyaWRDb2x1bW5SZWZzICYmIGNvbHVtbldpZHRoc0J5RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZENvbHVtbnMuZ2V0KGkpO1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZ3JpZENvbHVtblJlZnMuZ2V0KGkpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICgoY29sPy5maWVsZCAmJiBjb2x1bW5XaWR0aHNCeUZpZWxkW2NvbC5maWVsZF0pIHx8IGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBjb2x1bW5XaWR0aHNCeUZpZWxkW2NvbC5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhZ3JpZFBlcnNpc3RlcigpIHtcbiAgICAvLyBkZWxheSBpcyBuZWVkZWQsIGFzIG9uRGVzdHJveSB0aGUgZmlsdGVycyBlbWl0IGVtcHR5IHZhbHVlcy5cbiAgICAvLyBTbyBkZWxheSBpdCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGN5Y2xlLCBzbyB0aGUgZGlyZWN0aXZlIGlzIGFsc28gZGVzdHJveWVkIGJlZm9yZSBpdCBnZXRzIHRoZSBuZXh0IHZhbHVlc1xuICAgIHRoaXMuZGF0YWdyaWQucmVmcmVzaC5waXBlKGRlbGF5KDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShkZ1N0YXRlID0+IHtcbiAgICAgIHRoaXMucGVyc2lzdEZpbHRlcnNBbmRDdXJyZW50UGFnZShkZ1N0YXRlKTtcbiAgICAgIHRoaXMucGVyc2lzdFNvcnRpbmcoZGdTdGF0ZSk7XG5cbiAgICAgIGlmICh0aGlzLmNhblNob3dQYWdpbmF0aW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uRGVzY3JpcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YWdyaWQuaXRlbXMuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVQYWdpbmF0aW9uRGVzY3JpcHRpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RGaWx0ZXJzQW5kQ3VycmVudFBhZ2UoZGdTdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZUludGVyZmFjZTx1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0RmlsdGVycyA/PyB0cnVlO1xuICAgIGNvbnN0IHBhZ2luYXRpb25QZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMucGVyc2lzdFBhZ2luYXRpb24gPz8gdHJ1ZTtcbiAgICBpZiAoIWZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCAmJiAhcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRWb2xhdGlsZURhdGFTdGF0ZSgpO1xuICAgIHN0YXRlLmNvbHVtbnMgPSBzdGF0ZS5jb2x1bW5zIHx8IHt9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRQYWdlID0gZGdTdGF0ZS5wYWdlPy5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmNvbHVtbnMpLmZvckVhY2gocHJvcCA9PiAoc3RhdGUuY29sdW1uc1twcm9wXS5maWx0ZXJWYWx1ZSA9IHVuZGVmaW5lZCkpO1xuICAgICAgZGdTdGF0ZS5maWx0ZXJzPy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eU5hbWUoZmlsdGVyKTtcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgc3RhdGUuY29sdW1uc1twcm9wZXJ0eV0gPSBzdGF0ZS5jb2x1bW5zW3Byb3BlcnR5XSB8fCB7fTtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW3Byb3BlcnR5XS5maWx0ZXJWYWx1ZSA9IHRoaXMuZW5yaWNoRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlVm9sYXRpbGVEYXRhU3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U29ydGluZyhkZ1N0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlSW50ZXJmYWNlPHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3Qgc29ydFBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0U29ydCA/PyB0cnVlO1xuICAgIGlmIChzb3J0UGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcbiAgICAgIHN0YXRlLnNvcnRCeSA9IHRoaXMuZ2V0U29ydFByb3BlcnR5KGRnU3RhdGUuc29ydD8uYnkpO1xuICAgICAgc3RhdGUuc29ydFJldmVyc2UgPSBkZ1N0YXRlLnNvcnQ/LnJldmVyc2U7XG5cbiAgICAgIHRoaXMuc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJylcbiAgcHJpdmF0ZSBwZXJzaXN0Q29sdW1uV2lkdGhzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zPy5wZXJzaXN0Q29sdW1uV2lkdGhzID8/IGZhbHNlO1xuICAgIGlmIChjb2x1bW5XaWR0aFBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldExvY2FsU3RvcmFnZVN0YXRlKCk7XG4gICAgICBzdGF0ZS5jb2x1bW5zID0gc3RhdGUuY29sdW1ucyB8fCB7fTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZ3JpZENvbHVtbnMuZ2V0KGkpO1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZ3JpZENvbHVtblJlZnMuZ2V0KGkpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmIChlbD8uc3R5bGU/LndpZHRoICYmIGVsLnN0eWxlLndpZHRoICE9PSAnMHB4JyAmJiBjb2w/LmZpZWxkKSB7XG4gICAgICAgICAgc3RhdGUuY29sdW1uc1tjb2wuZmllbGRdIHx8PSB7fTtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW2NvbC5maWVsZF0ud2lkdGggPSBlbC5zdHlsZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhZ2luYXRpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBzZXQgYnkgdGhpcyBkaXJlY3RpdmUsXG4gICAqIG90aGVyd2lzZSB3ZSBjYW4ndCB1cGRhdGUgZGF0YWdyaWQgdmFsdWVzIGZyb20gbG9jYWxTdG9yYWdlXG4gICAqIHdpdGhvdXQgZ2V0dGluZyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25EZXNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uRWxlbSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25EZXNjRWxlbSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYWdpbmF0aW9uRWxlbS5uYXRpdmVFbGVtZW50KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAncGFnaW5hdGlvbi1kZXNjcmlwdGlvbidcbiAgICAgICk/LlswXTtcbiAgICAgIGlmIChwYWdpbmF0aW9uRGVzY0VsZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLndhcm5lZEFib3V0Q3VzdG9tRGVzY3JpcHRpb24gJiYgcGFnaW5hdGlvbkRlc2NFbGVtLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1doZW4gdXNpbmcgY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSBkaXJlY3RpdmUsIHlvdSBzaG91bGQgbm90IHVzZSBjdXN0b20gcGFnaW5hdGlvbiBkZXNjcmlwdGlvbicgK1xuICAgICAgICAgICAgICAnIGluc2lkZSBwYWdpbmF0aW9uIGNvbXBvbmVudCBjb250ZW50LCBidXQgdXNlIFtjbHJQYWdpbmF0aW9uRGVzY3JpcHRpb25dIG9uIGNsci1kYXRhZ3JpZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FybmVkQWJvdXRDdXN0b21EZXNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhZ2luYXRpb25EZXNjRWxlbS50ZXh0Q29udGVudCA9IHRoaXMucGFnaW5hdGlvbkRlc2NyaXB0aW9uXG4gICAgICAgICAgICAucmVwbGFjZSgne3tmaXJzdH19JywgKHRoaXMucGFnaW5hdGlvbi5maXJzdEl0ZW0gKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7bGFzdH19JywgKHRoaXMucGFnaW5hdGlvbi5sYXN0SXRlbSArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3t0b3RhbH19JywgdGhpcy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGUgb2Ygdm9sYXRpbGUgZGF0YS4gVGhpcyBjYW4gYmUgaW5mbHVlbmNlZCBieSBjbHJVc2VMb2NhbFN0b3JlT25seS5cbiAgICovXG4gIGdldFZvbGF0aWxlRGF0YVN0YXRlKCk6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmdldFN0b3JhZ2VCYXNlZE9uSW5wdXRGbGFnKCkuZ2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5KSkgfHwge307XG4gIH1cblxuICBnZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5vcHRpb25zLmtleSkpIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHN0YXRlIG9mIHZvbGF0aWxlIGRhdGEuIFRoaXMgY2FuIGJlIGluZmx1ZW5jZWQgYnkgY2xyVXNlTG9jYWxTdG9yZU9ubHkuXG4gICAqL1xuICBzYXZlVm9sYXRpbGVEYXRhU3RhdGUoc3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpLnNldEl0ZW0odGhpcy5vcHRpb25zLmtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgfVxuXG4gIHNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy51c2VMb2NhbFN0b3JlT25seSA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGEgZGF0ZSBpcyBzZXJpYWxpemVkIGFzIHN0cmluZywgYnV0IG5vdCBkZXNlcmlhbGl6ZWQgYXMgZGF0ZVxuICAgKiB3ZSBuZWVkIHRvIGFkZCBzb21lIG1ldGEgaW5mb3JtYXRpb24gdG8gZG8gdGhhdCBtYW51YWxseSBsYXRlclxuICAgKi9cbiAgcHJpdmF0ZSBlbnJpY2hGaWx0ZXJWYWx1ZShmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goXG4gICAgICBrZXkgPT5cbiAgICAgICAgKHJlc3VsdFtrZXldID1cbiAgICAgICAgICBmaWx0ZXJba2V5XSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEQVRFX1RZUEUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlcltrZXldLFxuICAgICAgICAgICAgICB9IGFzIEZpbHRlclZhbHVlV2l0aE1ldGFkYXRhKVxuICAgICAgICAgICAgOiBmaWx0ZXJba2V5XSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBmaWx0ZXIgdmFsdWVzIHdpdGggbWV0YSBpbmZvcm1hdGlvbiBsaWtlIGRhdGUsIHdoaWNoIG5lZWRzIG1hbnVhbCBkZXNlcmlhbGl6YXRpb24gdG8gYSBkYXRlIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZpbHRlclZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBGaWx0ZXJWYWx1ZVdpdGhNZXRhZGF0YSk/LnR5cGUgPT09IERBVEVfVFlQRVxuICAgICAgPyBuZXcgRGF0ZSgodmFsdWUgYXMgRmlsdGVyVmFsdWVXaXRoTWV0YWRhdGEpLnZhbHVlIGFzIHN0cmluZylcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcihwcm9wOiBzdHJpbmcpOiBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTx1bmtub3duLCB1bmtub3duPiB7XG4gICAgLy8gZ2V0IGRlZmF1bHQgZmlsdGVyIG9yIGN1c3RvbSBmaWx0ZXJcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gcHJvcCk/LmZpbHRlciB8fFxuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzLmZpbmQoZmlsdGVyID0+IHRoaXMuZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlci5maWx0ZXIpID09PSBwcm9wKT8uZmlsdGVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlcjogQ2xyRGF0YWdyaWRGaWx0ZXJJbnRlcmZhY2U8dW5rbm93biwgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGZvciBOZXN0ZWRQcm9wZXJ0eSB3ZSBuZWVkIHRvIGdldCB0aGUgb3JpZ2luYWwgcHJvcGVydHlcbiAgICBjb25zdCBmaWx0ZXJXaXRoUHJvcCA9IGZpbHRlciBhcyB1bmtub3duIGFzIHsgcHJvcGVydHk6IHVua25vd24gfTtcbiAgICByZXR1cm4gKChmaWx0ZXJXaXRoUHJvcC5wcm9wZXJ0eSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnByb3AgfHwgZmlsdGVyV2l0aFByb3AucHJvcGVydHkpIGFzIHN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFByb3BlcnR5KHNvcnRCeTogQ2xyRGF0YWdyaWRDb21wYXJhdG9ySW50ZXJmYWNlPHVua25vd24+IHwgc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc29ydEJ5KSB7XG4gICAgICBpZiAodHlwZW9mIHNvcnRCeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRCeTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3J0QnkgaW5zdGFuY2VvZiBEYXRhZ3JpZFByb3BlcnR5Q29tcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gc29ydEJ5LnByb3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnBlcnNpc3RDb2x1bW5XaWR0aHMoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGFncmlkL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBRVIsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsaUJBQWlCLEVBRWpCLGlCQUFpQixFQUVqQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBRXBCLDBCQUEwQixHQUMzQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbkUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBVXpCLE1BQU0sT0FBTyw0QkFBNEI7SUFIekM7UUFlRSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFHMUIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBaUIzQixpQ0FBNEIsR0FBRyxLQUFLLENBQUM7UUFDckMsaUNBQTRCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUs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QW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0E1WFUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsNlhBaUJ6QixxQkFBcUIsaUZBR3JCLHFCQUFxQiwyQkFBVSxVQUFVLGdEQUd0QyxpQkFBaUIsb0VBR2pCLGlCQUFpQixRQUFVLFVBQVUsOENBR3JDLGlCQUFpQjs7MkZBN0J2Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtpQkFDckM7OEJBVUMsT0FBTztzQkFETixLQUFLO3VCQUFDLHdCQUF3QjtnQkFJL0IsaUJBQWlCO3NCQURoQixLQUFLO3VCQUFDLHNCQUFzQjtnQkFJN0IscUJBQXFCO3NCQURwQixLQUFLO3VCQUFDLDBCQUEwQjtnQkFJakMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLHFCQUFxQjtnQkFJbkMsY0FBYztzQkFEYixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJekQsYUFBYTtzQkFEWixlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJekQsY0FBYztzQkFEYixlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEQsV0FBVztzQkFEVixlQUFlO3VCQUFDLGlCQUFpQjtnQkF5TTFCLG1CQUFtQjtzQkFEMUIsWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIGlzU2lnbmFsLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENsckRhdGFncmlkLFxuICBDbHJEYXRhZ3JpZENvbHVtbixcbiAgQ2xyRGF0YWdyaWRDb21wYXJhdG9ySW50ZXJmYWNlLFxuICBDbHJEYXRhZ3JpZEZpbHRlcixcbiAgQ2xyRGF0YWdyaWRGaWx0ZXJJbnRlcmZhY2UsXG4gIENsckRhdGFncmlkUGFnaW5hdGlvbixcbiAgQ2xyRGF0YWdyaWRTb3J0T3JkZXIsXG4gIENsckRhdGFncmlkU3RhdGVJbnRlcmZhY2UsXG4gIERhdGFncmlkUHJvcGVydHlDb21wYXJhdG9yLFxufSBmcm9tICdAY2xyL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwgfSBmcm9tICcuL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlLW1vZGVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBkZWxheSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdGF0ZVBlcnNpc3RlbmNlT3B0aW9ucyB9IGZyb20gJy4vc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YWdyaWRDb2x1bW5SZW9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29sdW1uLXJlb3JkZXInO1xuXG5jb25zdCBEQVRFX1RZUEUgPSAnZGF0ZSc7XG5cbmludGVyZmFjZSBGaWx0ZXJWYWx1ZVdpdGhNZXRhZGF0YSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJTdGF0ZVBlcnNpc3RlbmNlS2V5XScsXG59KVxuZXhwb3J0IGNsYXNzIFN0YXRlUGVyc2lzdGVuY2VLZXlEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgcGVyc2lzdGVuY2UuXG4gICAqICdLZXknIHJlcHJlc2VudHMgdGhlIGxvY2FsIHN0b3JhZ2Uga2V5IHVuZGVyIHdoaWNoIHRoZSBwZXJzaXN0ZW5jZSBzdGF0ZSBpcyBzdG9yZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZpZWxkcyB3aXRoIHRoZSAncGVyc2lzdCcgcHJlZml4IHRvZ2dsZSB0aGUgcGVyc2lzdGVuY2Ugb2YgdGhlIHJlc3BlY3RpdmUgZGF0YWdyaWQgZnVuY3Rpb25hbGl0eSxcbiAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgYWx3YXlzICd0cnVlJy5cbiAgICovXG4gIEBJbnB1dCgnY2xyU3RhdGVQZXJzaXN0ZW5jZUtleScpXG4gIG9wdGlvbnM6IFN0YXRlUGVyc2lzdGVuY2VPcHRpb25zO1xuXG4gIEBJbnB1dCgnY2xyVXNlTG9jYWxTdG9yZU9ubHknKVxuICB1c2VMb2NhbFN0b3JlT25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnY2xyUGFnaW5hdGlvbkRlc2NyaXB0aW9uJylcbiAgcGFnaW5hdGlvbkRlc2NyaXB0aW9uID0gJyc7XG5cbiAgQENvbnRlbnRDaGlsZChDbHJEYXRhZ3JpZFBhZ2luYXRpb24pXG4gIHBhZ2luYXRpb246IENsckRhdGFncmlkUGFnaW5hdGlvbjtcblxuICBAQ29udGVudENoaWxkKENsckRhdGFncmlkUGFnaW5hdGlvbiwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHBhZ2luYXRpb25FbGVtOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyRGF0YWdyaWRGaWx0ZXIsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgY3VzdG9tRmlsdGVyczogUXVlcnlMaXN0PENsckRhdGFncmlkRmlsdGVyPjtcblxuICBAQ29udGVudENoaWxkcmVuKENsckRhdGFncmlkQ29sdW1uLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgZ3JpZENvbHVtblJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBAQ29udGVudENoaWxkcmVuKENsckRhdGFncmlkQ29sdW1uKVxuICBncmlkQ29sdW1uczogUXVlcnlMaXN0PENsckRhdGFncmlkQ29sdW1uPjtcblxuICBjYW5TaG93UGFnaW5hdGlvbkRlc2NyaXB0aW9uID0gZmFsc2U7XG4gIHdhcm5lZEFib3V0Q3VzdG9tRGVzY3JpcHRpb24gPSBmYWxzZTtcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YWdyaWQgPSBpbmplY3QoQ2xyRGF0YWdyaWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlb3JkZXJEaXJlY3RpdmUgPSBpbmplY3QoRGF0YWdyaWRDb2x1bW5SZW9yZGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNlcnZlckRyaXZlbikge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICBjb25zdCB2b2xhdGlsZURhdGFTdGF0ZSA9IHRoaXMuZ2V0Vm9sYXRpbGVEYXRhU3RhdGUoKTtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VTdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcblxuICAgIHRoaXMuaW5pdEZpbHRlcih2b2xhdGlsZURhdGFTdGF0ZSk7XG4gICAgdGhpcy5pbml0U29ydGluZyhsb2NhbFN0b3JhZ2VTdGF0ZSk7XG4gICAgdGhpcy5pbml0RGF0YWdyaWRQZXJzaXN0ZXIoKTtcblxuICAgIGNvbnN0IGNvbHVtbldpZHRoUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RDb2x1bW5XaWR0aHMgPz8gZmFsc2U7XG4gICAgaWYgKGNvbHVtbldpZHRoUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICB0aGlzLmluaXRDb2x1bW5XaWR0aHMobG9jYWxTdG9yYWdlU3RhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbk9yZGVyUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RDb2x1bW5PcmRlciA/PyBmYWxzZTtcbiAgICBpZiAoY29sdW1uT3JkZXJQZXJzaXN0ZW5jZUVuYWJsZWQgJiYgISF0aGlzLnJlb3JkZXJEaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbk9yZGVyUGVyc2lzdGVyKGxvY2FsU3RvcmFnZVN0YXRlKTtcbiAgICAgIHRoaXMuaW5pdENvbHVtbk9yZGVyKGxvY2FsU3RvcmFnZVN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdpbmF0aW9uUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RQYWdpbmF0aW9uID8/IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbj8ucGFnZSAmJiBwYWdpbmF0aW9uUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICB0aGlzLmluaXRQYWdlU2l6ZVBlcnNpc3Rlcihsb2NhbFN0b3JhZ2VTdGF0ZSk7XG4gICAgICB0aGlzLmluaXRDdXJyZW50UGFnZSh2b2xhdGlsZURhdGFTdGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FuU2hvd1BhZ2luYXRpb25EZXNjcmlwdGlvbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogV2l0aCB0aGlzIG1ldGhvZCBmaWx0ZXJzIGNhbiBiZSBjbGVhcmVkXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgY2xyU3RhdGVQZXJzaXN0ZW5jZUtleVxuICAgKiBAcGFyYW0gdXNlTG9jYWxTdG9yZU9ubHkgVGhlIGNsclVzZUxvY2FsU3RvcmVPbmx5IGluZGljYXRvclxuICAgKi9cbiAgc3RhdGljIGNsZWFyRmlsdGVycyhrZXk6IHN0cmluZywgdXNlTG9jYWxTdG9yZU9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSgodXNlTG9jYWxTdG9yZU9ubHkgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZSkuZ2V0SXRlbShrZXkpKSB8fCB7fTtcbiAgICBkYXRhLmNvbHVtbnMgPSB7fTtcbiAgICAodXNlTG9jYWxTdG9yZU9ubHkgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZSkuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFBhZ2VTaXplUGVyc2lzdGVyKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKSB7XG4gICAgLyogcGVyc2lzdCBwYWdlIHNpemUgY2hhbmdlcyBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2Uuc2l6ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHBhZ2VTaXplID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpO1xuICAgICAgc3RhdGUucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgIHRoaXMuc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIC8qIGluaXQgcGFnZSBzaXplIG9mIGRhdGFncmlkIGlmIGFscmVhZHkgcGVyc2lzdGVkIGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICBpZiAoc2F2ZWRTdGF0ZS5wYWdlU2l6ZSkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2Uuc2l6ZSA9IHNhdmVkU3RhdGUucGFnZVNpemU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q3VycmVudFBhZ2Uoc2F2ZWRTdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwpIHtcbiAgICAvKiBpbml0IGN1cnJlbnQgcGFnZSBvZiBkYXRhZ3JpZCBpZiBhbHJlYWR5IHBlcnNpc3RlZCAqL1xuICAgIGlmIChzYXZlZFN0YXRlPy5jdXJyZW50UGFnZSkge1xuICAgICAgdGhpcy5kYXRhZ3JpZC5pdGVtcy5jaGFuZ2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMucGFnaW5hdGlvbi5wYWdlLmN1cnJlbnQgPSBzYXZlZFN0YXRlLmN1cnJlbnRQYWdlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmlsdGVyKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RGaWx0ZXJzID8/IHRydWU7XG4gICAgaWYgKHNhdmVkU3RhdGUuY29sdW1ucyAmJiBmaWx0ZXJQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHNhdmVkU3RhdGUuY29sdW1ucykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXIocHJvcCk7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAvKiBpZiB0aGUgc2F2ZWQgdmFsdWUgaXMgZW1wdHkgZmlsdGVyIHNlbmQgbnVsbCAqL1xuICAgICAgICAgIGNvbnN0IHNhdmVkRmlsdGVyVmFsdWUgPSBzYXZlZFN0YXRlLmNvbHVtbnNbcHJvcF0uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgaWYgKHNhdmVkRmlsdGVyVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgKGZpbHRlciBhcyBhbnkpWyd2YWx1ZSddID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2F2ZWRGaWx0ZXJWYWx1ZSlcbiAgICAgICAgICAgICAgLmZpbHRlcih2YWx1ZUtleSA9PiB2YWx1ZUtleSAhPT0gJ3Byb3BlcnR5JylcbiAgICAgICAgICAgICAgLmZvckVhY2godmFsdWVLZXkgPT4gKChmaWx0ZXIgYXMgYW55KVt2YWx1ZUtleV0gPSB0aGlzLnBhcnNlRmlsdGVyVmFsdWUoc2F2ZWRGaWx0ZXJWYWx1ZVt2YWx1ZUtleV0pKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0aW5nKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydFBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0U29ydCA/PyB0cnVlO1xuICAgIGlmIChzYXZlZFN0YXRlLnNvcnRCeSAmJiBzb3J0UGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICB0aGlzLmRhdGFncmlkLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAodGhpcy5nZXRTb3J0UHJvcGVydHkoY29sdW1uLnNvcnRCeSkgPT09IHNhdmVkU3RhdGUuc29ydEJ5KSB7XG4gICAgICAgICAgY29sdW1uLnNvcnRPcmRlciA9IHNhdmVkU3RhdGUuc29ydFJldmVyc2UgPyBDbHJEYXRhZ3JpZFNvcnRPcmRlci5ERVNDIDogQ2xyRGF0YWdyaWRTb3J0T3JkZXIuQVNDO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5zb3J0T3JkZXIgPSBDbHJEYXRhZ3JpZFNvcnRPcmRlci5VTlNPUlRFRDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1uV2lkdGhzKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uV2lkdGhzQnlGaWVsZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCA9IHNhdmVkU3RhdGU/LmNvbHVtbnNcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHNhdmVkU3RhdGUuY29sdW1ucykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIHZhbHVlLndpZHRoXSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmdyaWRDb2x1bW5zICYmIHRoaXMuZ3JpZENvbHVtblJlZnMgJiYgY29sdW1uV2lkdGhzQnlGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZENvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5ncmlkQ29sdW1ucy5nZXQoaSk7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5ncmlkQ29sdW1uUmVmcy5nZXQoaSk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKChjb2w/LmZpZWxkICYmIGNvbHVtbldpZHRoc0J5RmllbGRbY29sLmZpZWxkXSkgfHwgZWwpIHtcbiAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGNvbHVtbldpZHRoc0J5RmllbGRbY29sLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGFncmlkUGVyc2lzdGVyKCkge1xuICAgIC8vIGRlbGF5IGlzIG5lZWRlZCwgYXMgb25EZXN0cm95IHRoZSBmaWx0ZXJzIGVtaXQgZW1wdHkgdmFsdWVzLlxuICAgIC8vIFNvIGRlbGF5IGl0IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY3ljbGUsIHNvIHRoZSBkaXJlY3RpdmUgaXMgYWxzbyBkZXN0cm95ZWQgYmVmb3JlIGl0IGdldHMgdGhlIG5leHQgdmFsdWVzXG4gICAgdGhpcy5kYXRhZ3JpZC5yZWZyZXNoLnBpcGUoZGVsYXkoMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGRnU3RhdGUgPT4ge1xuICAgICAgdGhpcy5wZXJzaXN0RmlsdGVyc0FuZEN1cnJlbnRQYWdlKGRnU3RhdGUpO1xuICAgICAgdGhpcy5wZXJzaXN0U29ydGluZyhkZ1N0YXRlKTtcblxuICAgICAgaWYgKHRoaXMuY2FuU2hvd1BhZ2luYXRpb25EZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25EZXNjcmlwdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhZ3JpZC5pdGVtcy5jaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVBhZ2luYXRpb25EZXNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbk9yZGVyUGVyc2lzdGVyKHN0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCkge1xuICAgIHRoaXMucmVvcmRlckRpcmVjdGl2ZS5jb2x1bW5PcmRlckNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIC8vIHdlIHNraXAgdGhlIGZpcnN0IHZhbHVlIChpbml0KSwgYmVjYXVzZSBpdCdzIGFscmVhZHkgY29taW5nIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UsIHNvIG5vIG5lZWQgdG8gc2F2ZSBpdCBhZ2FpblxuICAgICAgICBmaWx0ZXIoKHsgdHJpZ2dlciB9KSA9PiB0cmlnZ2VyICE9PSAnaW5pdCcpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbHVtbnMgfSkgPT4gdGhpcy5wZXJzaXN0Q29sdW1uT3JkZXIoc3RhdGUsIGNvbHVtbnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbk9yZGVyKHNhdmVkU3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgaWYgKHNhdmVkU3RhdGU/LmNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzYXZlZFN0YXRlLmNvbHVtbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB2YWx1ZS5vcmRlcl0gYXMgY29uc3QpO1xuICAgICAgdGhpcy5yZW9yZGVyRGlyZWN0aXZlLmluaXRpYWxpemVDb2x1bW5PcmRlcihPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdEZpbHRlcnNBbmRDdXJyZW50UGFnZShkZ1N0YXRlOiBDbHJEYXRhZ3JpZFN0YXRlSW50ZXJmYWNlPHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyUGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RGaWx0ZXJzID8/IHRydWU7XG4gICAgY29uc3QgcGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5wZXJzaXN0UGFnaW5hdGlvbiA/PyB0cnVlO1xuICAgIGlmICghZmlsdGVyUGVyc2lzdGVuY2VFbmFibGVkICYmICFwYWdpbmF0aW9uUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFZvbGF0aWxlRGF0YVN0YXRlKCk7XG4gICAgc3RhdGUuY29sdW1ucyA9IHN0YXRlLmNvbHVtbnMgfHwge307XG5cbiAgICBpZiAocGFnaW5hdGlvblBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgc3RhdGUuY3VycmVudFBhZ2UgPSBkZ1N0YXRlLnBhZ2U/LmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclBlcnNpc3RlbmNlRW5hYmxlZCkge1xuICAgICAgT2JqZWN0LmtleXMoc3RhdGUuY29sdW1ucykuZm9yRWFjaChwcm9wID0+IChzdGF0ZS5jb2x1bW5zW3Byb3BdLmZpbHRlclZhbHVlID0gdW5kZWZpbmVkKSk7XG4gICAgICBkZ1N0YXRlLmZpbHRlcnM/LmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmdldEZpbHRlclByb3BlcnR5TmFtZShmaWx0ZXIpO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW3Byb3BlcnR5XSA9IHN0YXRlLmNvbHVtbnNbcHJvcGVydHldIHx8IHt9O1xuICAgICAgICAgIHN0YXRlLmNvbHVtbnNbcHJvcGVydHldLmZpbHRlclZhbHVlID0gdGhpcy5lbnJpY2hGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmVWb2xhdGlsZURhdGFTdGF0ZShzdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RTb3J0aW5nKGRnU3RhdGU6IENsckRhdGFncmlkU3RhdGVJbnRlcmZhY2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCBzb3J0UGVyc2lzdGVuY2VFbmFibGVkID0gdGhpcy5vcHRpb25zLnBlcnNpc3RTb3J0ID8/IHRydWU7XG4gICAgaWYgKHNvcnRQZXJzaXN0ZW5jZUVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpO1xuICAgICAgc3RhdGUuc29ydEJ5ID0gdGhpcy5nZXRTb3J0UHJvcGVydHkoZGdTdGF0ZS5zb3J0Py5ieSk7XG4gICAgICBzdGF0ZS5zb3J0UmV2ZXJzZSA9IGRnU3RhdGUuc29ydD8ucmV2ZXJzZTtcblxuICAgICAgdGhpcy5zYXZlTG9jYWxTdG9yYWdlU3RhdGUoc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICBwcml2YXRlIHBlcnNpc3RDb2x1bW5XaWR0aHMoKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uV2lkdGhQZXJzaXN0ZW5jZUVuYWJsZWQgPSB0aGlzLm9wdGlvbnM/LnBlcnNpc3RDb2x1bW5XaWR0aHMgPz8gZmFsc2U7XG4gICAgaWYgKGNvbHVtbldpZHRoUGVyc2lzdGVuY2VFbmFibGVkKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlU3RhdGUoKTtcbiAgICAgIHN0YXRlLmNvbHVtbnMgPSBzdGF0ZS5jb2x1bW5zIHx8IHt9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ3JpZENvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5ncmlkQ29sdW1ucy5nZXQoaSk7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5ncmlkQ29sdW1uUmVmcy5nZXQoaSk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGVsPy5zdHlsZT8ud2lkdGggJiYgZWwuc3R5bGUud2lkdGggIT09ICcwcHgnICYmIGNvbD8uZmllbGQpIHtcbiAgICAgICAgICBzdGF0ZS5jb2x1bW5zW2NvbC5maWVsZF0gfHw9IHt9O1xuICAgICAgICAgIHN0YXRlLmNvbHVtbnNbY29sLmZpZWxkXS53aWR0aCA9IGVsLnN0eWxlLndpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RDb2x1bW5PcmRlcihzdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwsIGNvbHVtbnM6IHsgbmFtZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIHN0YXRlLmNvbHVtbnMgPSBzdGF0ZS5jb2x1bW5zIHx8IHt9O1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKCh7IG5hbWUgfSwgaW5kZXgpID0+IHtcbiAgICAgIHN0YXRlLmNvbHVtbnNbbmFtZV0gPSBzdGF0ZS5jb2x1bW5zW25hbWVdIHx8IHt9O1xuICAgICAgc3RhdGUuY29sdW1uc1tuYW1lXS5vcmRlciA9IGluZGV4O1xuICAgIH0pO1xuXG4gICAgdGhpcy5zYXZlTG9jYWxTdG9yYWdlU3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhZ2luYXRpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBzZXQgYnkgdGhpcyBkaXJlY3RpdmUsXG4gICAqIG90aGVyd2lzZSB3ZSBjYW4ndCB1cGRhdGUgZGF0YWdyaWQgdmFsdWVzIGZyb20gbG9jYWxTdG9yYWdlXG4gICAqIHdpdGhvdXQgZ2V0dGluZyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25EZXNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uRWxlbSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25EZXNjRWxlbSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYWdpbmF0aW9uRWxlbS5uYXRpdmVFbGVtZW50KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAncGFnaW5hdGlvbi1kZXNjcmlwdGlvbidcbiAgICAgICk/LlswXTtcbiAgICAgIGlmIChwYWdpbmF0aW9uRGVzY0VsZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLndhcm5lZEFib3V0Q3VzdG9tRGVzY3JpcHRpb24gJiYgcGFnaW5hdGlvbkRlc2NFbGVtLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1doZW4gdXNpbmcgY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSBkaXJlY3RpdmUsIHlvdSBzaG91bGQgbm90IHVzZSBjdXN0b20gcGFnaW5hdGlvbiBkZXNjcmlwdGlvbicgK1xuICAgICAgICAgICAgICAnIGluc2lkZSBwYWdpbmF0aW9uIGNvbXBvbmVudCBjb250ZW50LCBidXQgdXNlIFtjbHJQYWdpbmF0aW9uRGVzY3JpcHRpb25dIG9uIGNsci1kYXRhZ3JpZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2FybmVkQWJvdXRDdXN0b21EZXNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhZ2luYXRpb25EZXNjRWxlbS50ZXh0Q29udGVudCA9IHRoaXMucGFnaW5hdGlvbkRlc2NyaXB0aW9uXG4gICAgICAgICAgICAucmVwbGFjZSgne3tmaXJzdH19JywgKHRoaXMucGFnaW5hdGlvbi5maXJzdEl0ZW0gKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t7bGFzdH19JywgKHRoaXMucGFnaW5hdGlvbi5sYXN0SXRlbSArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3t0b3RhbH19JywgdGhpcy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGUgb2Ygdm9sYXRpbGUgZGF0YS4gVGhpcyBjYW4gYmUgaW5mbHVlbmNlZCBieSBjbHJVc2VMb2NhbFN0b3JlT25seS5cbiAgICovXG4gIGdldFZvbGF0aWxlRGF0YVN0YXRlKCk6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmdldFN0b3JhZ2VCYXNlZE9uSW5wdXRGbGFnKCkuZ2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5KSkgfHwge307XG4gIH1cblxuICBnZXRMb2NhbFN0b3JhZ2VTdGF0ZSgpOiBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5vcHRpb25zLmtleSkpIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHN0YXRlIG9mIHZvbGF0aWxlIGRhdGEuIFRoaXMgY2FuIGJlIGluZmx1ZW5jZWQgYnkgY2xyVXNlTG9jYWxTdG9yZU9ubHkuXG4gICAqL1xuICBzYXZlVm9sYXRpbGVEYXRhU3RhdGUoc3RhdGU6IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpLnNldEl0ZW0odGhpcy5vcHRpb25zLmtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgfVxuXG4gIHNhdmVMb2NhbFN0b3JhZ2VTdGF0ZShzdGF0ZTogQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLm9wdGlvbnMua2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlQmFzZWRPbklucHV0RmxhZygpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy51c2VMb2NhbFN0b3JlT25seSA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGEgZGF0ZSBpcyBzZXJpYWxpemVkIGFzIHN0cmluZywgYnV0IG5vdCBkZXNlcmlhbGl6ZWQgYXMgZGF0ZVxuICAgKiB3ZSBuZWVkIHRvIGFkZCBzb21lIG1ldGEgaW5mb3JtYXRpb24gdG8gZG8gdGhhdCBtYW51YWxseSBsYXRlclxuICAgKi9cbiAgcHJpdmF0ZSBlbnJpY2hGaWx0ZXJWYWx1ZShmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goXG4gICAgICBrZXkgPT5cbiAgICAgICAgKHJlc3VsdFtrZXldID1cbiAgICAgICAgICBmaWx0ZXJba2V5XSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEQVRFX1RZUEUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlcltrZXldLFxuICAgICAgICAgICAgICB9IGFzIEZpbHRlclZhbHVlV2l0aE1ldGFkYXRhKVxuICAgICAgICAgICAgOiBmaWx0ZXJba2V5XSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBmaWx0ZXIgdmFsdWVzIHdpdGggbWV0YSBpbmZvcm1hdGlvbiBsaWtlIGRhdGUsIHdoaWNoIG5lZWRzIG1hbnVhbCBkZXNlcmlhbGl6YXRpb24gdG8gYSBkYXRlIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZpbHRlclZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBGaWx0ZXJWYWx1ZVdpdGhNZXRhZGF0YSk/LnR5cGUgPT09IERBVEVfVFlQRVxuICAgICAgPyBuZXcgRGF0ZSgodmFsdWUgYXMgRmlsdGVyVmFsdWVXaXRoTWV0YWRhdGEpLnZhbHVlIGFzIHN0cmluZylcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcihwcm9wOiBzdHJpbmcpOiBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTx1bmtub3duLCB1bmtub3duPiB7XG4gICAgLy8gZ2V0IGRlZmF1bHQgZmlsdGVyIG9yIGN1c3RvbSBmaWx0ZXJcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gcHJvcCk/LmZpbHRlciB8fFxuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzLmZpbmQoZmlsdGVyID0+IHRoaXMuZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlci5maWx0ZXIpID09PSBwcm9wKT8uZmlsdGVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyUHJvcGVydHlOYW1lKGZpbHRlcjogQ2xyRGF0YWdyaWRGaWx0ZXJJbnRlcmZhY2U8dW5rbm93biwgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGZvciBOZXN0ZWRQcm9wZXJ0eSB3ZSBuZWVkIHRvIGdldCB0aGUgb3JpZ2luYWwgcHJvcGVydHlcbiAgICBjb25zdCBmaWx0ZXJXaXRoUHJvcCA9IGZpbHRlciBhcyB1bmtub3duIGFzIHsgcHJvcGVydHk6IHVua25vd24gfTtcbiAgICByZXR1cm4gKChmaWx0ZXJXaXRoUHJvcC5wcm9wZXJ0eSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnByb3AgfHxcbiAgICAgIHRoaXMucmVzb2x2ZVNpZ25hbChmaWx0ZXJXaXRoUHJvcC5wcm9wZXJ0eSkpIGFzIHN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpZ25hbDxUPih2YWx1ZTogVCB8IFNpZ25hbDxUPik6IFQge1xuICAgIHJldHVybiBpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRQcm9wZXJ0eShzb3J0Qnk6IENsckRhdGFncmlkQ29tcGFyYXRvckludGVyZmFjZTx1bmtub3duPiB8IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNvcnRCeSkge1xuICAgICAgaWYgKHR5cGVvZiBzb3J0QnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzb3J0Qnk7XG4gICAgICB9XG4gICAgICBpZiAoc29ydEJ5IGluc3RhbmNlb2YgRGF0YWdyaWRQcm9wZXJ0eUNvbXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRCeS5wcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5wZXJzaXN0Q29sdW1uV2lkdGhzKCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTdGF0ZVBlcnNpc3RlbmNlT3B0aW9ucyB7XG4gIGtleTogc3RyaW5nO1xuICBzZXJ2ZXJEcml2ZW46IGJvb2xlYW47XG4gIHBlcnNpc3RGaWx0ZXJzPzogYm9vbGVhbjtcbiAgcGVyc2lzdFBhZ2luYXRpb24/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTdGF0ZVBlcnNpc3RlbmNlT3B0aW9ucyB7XG4gIGtleTogc3RyaW5nO1xuICBzZXJ2ZXJEcml2ZW46IGJvb2xlYW47XG4gIHBlcnNpc3RGaWx0ZXJzPzogYm9vbGVhbjtcbiAgcGVyc2lzdFBhZ2luYXRpb24/OiBib29sZWFuO1xuICBwZXJzaXN0U29ydD86IGJvb2xlYW47XG4gIHBlcnNpc3RIaWRkZW5Db2x1bW5zPzogYm9vbGVhbjtcbiAgcGVyc2lzdENvbHVtbldpZHRocz86IGJvb2xlYW47XG4gIHBlcnNpc3RDb2x1bW5PcmRlcj86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './datagrid-state-persistence';
|
|
2
|
+
export * from './column-reorder';
|
|
2
3
|
export * from './enum-filter';
|
|
3
4
|
export * from './date-filter';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1uLXJlb3JkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9lbnVtLWZpbHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUtZmlsdGVyJztcbiJdfQ==
|