@valtimo/components 12.0.0 → 12.1.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/assets/css/carbon.scss +3 -0
- package/assets/css/compatibility.scss +22 -0
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +2 -2
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +11 -2
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +132 -39
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +7 -3
- package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +37 -5
- package/esm2022/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.mjs +165 -0
- package/esm2022/lib/components/carbon-list/services/index.mjs +17 -0
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +1 -1
- package/esm2022/lib/components/form-io/form-io-builder.component.mjs +2 -2
- package/esm2022/lib/components/input/input.component.mjs +1 -1
- package/esm2022/lib/components/input-label/input-label.component.mjs +6 -3
- package/esm2022/lib/components/list/list.module.mjs +22 -4
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +1 -1
- package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +3 -3
- package/esm2022/lib/components/page-header/page-header.component.mjs +2 -2
- package/esm2022/lib/components/radio/radio.component.mjs +1 -1
- package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +92 -75
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +23 -13
- package/esm2022/lib/components/select/select.component.mjs +1 -1
- package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +4 -4
- package/esm2022/lib/components/stepper/stepper.module.mjs +5 -4
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +13 -17
- package/esm2022/lib/components/view-content/type-converters/currencyTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +31 -0
- package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +5 -3
- package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/numberTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/percentTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +60 -17
- package/esm2022/lib/components/view-content/view-content.module.mjs +33 -0
- package/esm2022/lib/components/view-content/view-content.service.mjs +11 -22
- package/esm2022/lib/components/widget/widget.component.mjs +2 -2
- package/esm2022/lib/constants/carbon.constants.mjs +2 -1
- package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +2 -2
- package/esm2022/lib/models/carbon-list.model.mjs +5 -2
- package/esm2022/lib/models/carbon-tag.model.mjs +2 -2
- package/esm2022/lib/models/modal.model.mjs +1 -1
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/key-generator.service.mjs +50 -0
- package/esm2022/lib/services/key-state.service.mjs +33 -0
- package/fesm2022/valtimo-components.mjs +816 -195
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts +3 -0
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.component.d.ts +28 -9
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts +2 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
- package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts +13 -3
- package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts.map +1 -1
- package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts +40 -0
- package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts.map +1 -0
- package/lib/components/carbon-list/services/index.d.ts +2 -0
- package/lib/components/carbon-list/services/index.d.ts.map +1 -0
- package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
- package/lib/components/input-label/input-label.component.d.ts +2 -1
- package/lib/components/input-label/input-label.component.d.ts.map +1 -1
- package/lib/components/list/list.module.d.ts +2 -1
- package/lib/components/list/list.module.d.ts.map +1 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +17 -20
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +4 -4
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper.module.d.ts +2 -1
- package/lib/components/stepper/stepper.module.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts +6 -0
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts +6 -0
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/dateTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/enumTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/relatedFilesTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/type-converters.model.d.ts +13 -1
- package/lib/components/view-content/type-converters/type-converters.model.d.ts.map +1 -1
- package/lib/components/view-content/view-content.module.d.ts +8 -0
- package/lib/components/view-content/view-content.module.d.ts.map +1 -0
- package/lib/components/view-content/view-content.service.d.ts +1 -5
- package/lib/components/view-content/view-content.service.d.ts.map +1 -1
- package/lib/constants/carbon.constants.d.ts +1 -0
- package/lib/constants/carbon.constants.d.ts.map +1 -1
- package/lib/models/carbon-list.model.d.ts +15 -3
- package/lib/models/carbon-list.model.d.ts.map +1 -1
- package/lib/models/carbon-tag.model.d.ts +2 -0
- package/lib/models/carbon-tag.model.d.ts.map +1 -1
- package/lib/models/modal.model.d.ts +2 -1
- package/lib/models/modal.model.d.ts.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/key-generator.service.d.ts +8 -0
- package/lib/services/key-generator.service.d.ts.map +1 -0
- package/lib/services/key-state.service.d.ts +12 -0
- package/lib/services/key-state.service.d.ts.map +1 -0
- package/package.json +4 -2
|
@@ -15,32 +15,37 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
17
17
|
import { FormControl } from '@angular/forms';
|
|
18
|
-
import { ArrowDown16, ArrowUp16, SettingsView16 } from '@carbon/icons';
|
|
18
|
+
import { ArrowDown16, ArrowUp16, Draggable16, SettingsView16 } from '@carbon/icons';
|
|
19
19
|
import { Table, TableHeaderItem, TableItem, TableModel, } from 'carbon-components-angular';
|
|
20
20
|
import { get as _get } from 'lodash';
|
|
21
21
|
import { BehaviorSubject, combineLatest, debounceTime, map, startWith, Subscription, switchMap, take, } from 'rxjs';
|
|
22
22
|
import { filter, tap } from 'rxjs/operators';
|
|
23
23
|
import { BOOLEAN_CONVERTER_VALUES, CASES_WITHOUT_STATUS_KEY } from '../../constants';
|
|
24
|
-
import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, MoveRowDirection, ViewType, } from '../../models';
|
|
24
|
+
import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, MoveRowDirection, TAG_ELLIPSIS_LIMIT, ViewType, } from '../../models';
|
|
25
25
|
import { CarbonListFilterPipe } from './CarbonListFilterPipe.directive';
|
|
26
|
+
import { CarbonListDragAndDropService } from './services';
|
|
26
27
|
import * as i0 from "@angular/core";
|
|
27
28
|
import * as i1 from "./CarbonListFilterPipe.directive";
|
|
28
29
|
import * as i2 from "carbon-components-angular";
|
|
29
30
|
import * as i3 from "ngx-logger";
|
|
30
31
|
import * as i4 from "@ngx-translate/core";
|
|
31
32
|
import * as i5 from "../view-content/view-content.service";
|
|
32
|
-
import * as i6 from "
|
|
33
|
-
import * as i7 from "
|
|
34
|
-
import * as i8 from "@
|
|
35
|
-
import * as i9 from "
|
|
33
|
+
import * as i6 from "../../services/key-state.service";
|
|
34
|
+
import * as i7 from "./services";
|
|
35
|
+
import * as i8 from "@angular/common";
|
|
36
|
+
import * as i9 from "@angular/forms";
|
|
37
|
+
import * as i10 from "@ng-bootstrap/ng-bootstrap";
|
|
38
|
+
import * as i11 from "./tags-modal/tags-modal.component";
|
|
36
39
|
export class CarbonListComponent {
|
|
37
|
-
|
|
38
|
-
this._items
|
|
39
|
-
this._items$.next(value);
|
|
40
|
+
get _items() {
|
|
41
|
+
return this._items$.getValue();
|
|
40
42
|
}
|
|
41
43
|
get items() {
|
|
42
44
|
return this._items;
|
|
43
45
|
}
|
|
46
|
+
set items(value) {
|
|
47
|
+
this._items$.next(value);
|
|
48
|
+
}
|
|
44
49
|
set fields(value) {
|
|
45
50
|
this._fields$.next(value);
|
|
46
51
|
}
|
|
@@ -60,6 +65,11 @@ export class CarbonListComponent {
|
|
|
60
65
|
get pagination() {
|
|
61
66
|
return this._pagination;
|
|
62
67
|
}
|
|
68
|
+
set sortState(value) {
|
|
69
|
+
if (!value)
|
|
70
|
+
return;
|
|
71
|
+
this.sort$.next(value);
|
|
72
|
+
}
|
|
63
73
|
static { this.PAGINATION_SIZE = 'PaginationSize'; }
|
|
64
74
|
get selectedItems() {
|
|
65
75
|
const model = this._table.model;
|
|
@@ -71,14 +81,16 @@ export class CarbonListComponent {
|
|
|
71
81
|
get model() {
|
|
72
82
|
return this._table.model;
|
|
73
83
|
}
|
|
74
|
-
constructor(filterPipe, iconService, logger, translateService, viewContentService) {
|
|
84
|
+
constructor(filterPipe, iconService, logger, translateService, viewContentService, keyStateService, dragAndDropService, elementRef) {
|
|
75
85
|
this.filterPipe = filterPipe;
|
|
76
86
|
this.iconService = iconService;
|
|
77
87
|
this.logger = logger;
|
|
78
88
|
this.translateService = translateService;
|
|
79
89
|
this.viewContentService = viewContentService;
|
|
90
|
+
this.keyStateService = keyStateService;
|
|
91
|
+
this.dragAndDropService = dragAndDropService;
|
|
92
|
+
this.elementRef = elementRef;
|
|
80
93
|
this._items$ = new BehaviorSubject([]);
|
|
81
|
-
this.items$ = new BehaviorSubject([]);
|
|
82
94
|
this.currentOpenActionId = null;
|
|
83
95
|
this._fields$ = new BehaviorSubject([]);
|
|
84
96
|
this._tableTranslations$ = new BehaviorSubject(DEFAULT_LIST_TRANSLATIONS);
|
|
@@ -93,6 +105,8 @@ export class CarbonListComponent {
|
|
|
93
105
|
this.striped = false;
|
|
94
106
|
this.hideToolbar = false;
|
|
95
107
|
this.lockedTooltipTranslationKey = '';
|
|
108
|
+
this.dragAndDrop = false;
|
|
109
|
+
this.dragAndDropDisabled = false;
|
|
96
110
|
this.rowClicked = new EventEmitter();
|
|
97
111
|
this.paginationClicked = new EventEmitter();
|
|
98
112
|
this.paginationSet = new EventEmitter();
|
|
@@ -129,7 +143,7 @@ export class CarbonListComponent {
|
|
|
129
143
|
this.searchFormControl = new FormControl('');
|
|
130
144
|
this._subscriptions = new Subscription();
|
|
131
145
|
this._viewInitialized$ = new BehaviorSubject(false);
|
|
132
|
-
this._translatedFields$ = this.translateService.stream('key').pipe(switchMap(() => this._fields$), map((fields) => fields.map((field) => ({
|
|
146
|
+
this._translatedFields$ = this.translateService.stream('key').pipe(switchMap(() => this._fields$), filter((fields) => !!fields), map((fields) => fields.map((field) => ({
|
|
133
147
|
...field,
|
|
134
148
|
label: !field.label ? '' : this.translateService.instant(field.label),
|
|
135
149
|
}))));
|
|
@@ -143,13 +157,22 @@ export class CarbonListComponent {
|
|
|
143
157
|
key: field.key,
|
|
144
158
|
sorted: sortState.isSorting && field.key === sortState.state.name,
|
|
145
159
|
ascending: field.key === sortState.state.name && sortState.state.direction === 'ASC',
|
|
146
|
-
}))), map((header) => [
|
|
147
|
-
|
|
160
|
+
}))), map((header) => [
|
|
161
|
+
...this.dragAndDropHeaderColumns,
|
|
162
|
+
...header,
|
|
163
|
+
...this.extraColumns,
|
|
164
|
+
]));
|
|
165
|
+
this._tableItems$ = combineLatest([
|
|
166
|
+
this._fields$,
|
|
167
|
+
this._items$,
|
|
168
|
+
this._viewInitialized$,
|
|
169
|
+
]).pipe(filter(([fields, items, viewInitialized]) => !!fields && !!items && viewInitialized), map(([fields, items]) => items.map((item, index) => [
|
|
170
|
+
...this.getDragAndDropItemsItems(item, index, items.length),
|
|
148
171
|
...fields.map((field) => {
|
|
149
172
|
switch (field.viewType) {
|
|
150
173
|
case ViewType.TEMPLATE:
|
|
151
174
|
return new TableItem({
|
|
152
|
-
data: { item, index, length: items.length },
|
|
175
|
+
data: { item, index, length: items.length, ...field.templateData },
|
|
153
176
|
template: field.template,
|
|
154
177
|
});
|
|
155
178
|
case ViewType.BOOLEAN:
|
|
@@ -161,13 +184,16 @@ export class CarbonListComponent {
|
|
|
161
184
|
data,
|
|
162
185
|
template: this.booleanTemplate,
|
|
163
186
|
});
|
|
164
|
-
case ViewType.TAGS:
|
|
187
|
+
case ViewType.TAGS: {
|
|
188
|
+
return this.resolveTagObject(item.tags);
|
|
189
|
+
}
|
|
190
|
+
default:
|
|
165
191
|
return new TableItem({
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
title: this.resolveObject(field, item) ?? '-',
|
|
193
|
+
data: this.resolveObject(field, item) ?? '-',
|
|
194
|
+
template: this.defaultTemplate,
|
|
195
|
+
item,
|
|
168
196
|
});
|
|
169
|
-
default:
|
|
170
|
-
return new TableItem({ data: this.resolveObject(field, item) ?? '-', item });
|
|
171
197
|
}
|
|
172
198
|
}),
|
|
173
199
|
...this.getExtraItems(item, index, items.length),
|
|
@@ -185,7 +211,7 @@ export class CarbonListComponent {
|
|
|
185
211
|
model.data = filteredData ?? data;
|
|
186
212
|
return model;
|
|
187
213
|
}), startWith(new TableModel()));
|
|
188
|
-
this.iconService.registerAll([ArrowDown16, ArrowUp16, SettingsView16]);
|
|
214
|
+
this.iconService.registerAll([ArrowDown16, ArrowUp16, SettingsView16, Draggable16]);
|
|
189
215
|
}
|
|
190
216
|
ngOnInit() {
|
|
191
217
|
if (this.pagination) {
|
|
@@ -210,16 +236,27 @@ export class CarbonListComponent {
|
|
|
210
236
|
}
|
|
211
237
|
ngAfterViewInit() {
|
|
212
238
|
this._viewInitialized$.next(true);
|
|
239
|
+
this.openDragAndDropSubscription();
|
|
213
240
|
}
|
|
214
241
|
ngOnDestroy() {
|
|
215
242
|
this._subscriptions.unsubscribe();
|
|
216
243
|
}
|
|
244
|
+
openDragAndDropSubscription() {
|
|
245
|
+
this._subscriptions.add(this.dragAndDropService.dragAndDropEvents$.subscribe(dragAndDropEvent => {
|
|
246
|
+
const reorderedItems = this.swapItems(this._items, dragAndDropEvent.startIndex, dragAndDropEvent.newIndex);
|
|
247
|
+
this.itemsReordered.emit(reorderedItems);
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
217
250
|
onRowClick(index) {
|
|
218
|
-
const
|
|
219
|
-
|
|
251
|
+
const rowData = this._table.model.data[index];
|
|
252
|
+
const firstItemWithData = rowData.find(item => !!item['item']);
|
|
253
|
+
const firstItem = firstItemWithData?.['item'];
|
|
254
|
+
if (firstItem)
|
|
255
|
+
firstItem.ctrlClick = this.keyStateService.getCtrlOrCmdState();
|
|
256
|
+
if (!firstItem || firstItem?.locked) {
|
|
220
257
|
return;
|
|
221
258
|
}
|
|
222
|
-
this.rowClicked.emit(
|
|
259
|
+
this.rowClicked.emit(firstItem);
|
|
223
260
|
}
|
|
224
261
|
onSelectPage(page) {
|
|
225
262
|
if (!this.paginationModel.pageLength) {
|
|
@@ -258,6 +295,12 @@ export class CarbonListComponent {
|
|
|
258
295
|
this.sortChanged.emit(newState);
|
|
259
296
|
});
|
|
260
297
|
}
|
|
298
|
+
onDragStart(mouseEvent, carbonEvent) {
|
|
299
|
+
if (this.dragAndDropDisabled)
|
|
300
|
+
return;
|
|
301
|
+
this.dragAndDropService.setCarbonListElementRef(this.elementRef);
|
|
302
|
+
this.dragAndDropService.startDrag(mouseEvent.y, carbonEvent.index);
|
|
303
|
+
}
|
|
261
304
|
buildPaginationModel() {
|
|
262
305
|
this.paginationModel = {
|
|
263
306
|
currentPage: this.pagination.page,
|
|
@@ -265,6 +308,20 @@ export class CarbonListComponent {
|
|
|
265
308
|
pageLength: this.pagination.size,
|
|
266
309
|
};
|
|
267
310
|
}
|
|
311
|
+
get dragAndDropHeaderColumns() {
|
|
312
|
+
const emptyHeader = new TableHeaderItem();
|
|
313
|
+
emptyHeader.sortable = false;
|
|
314
|
+
return [
|
|
315
|
+
...(this.dragAndDrop
|
|
316
|
+
? [
|
|
317
|
+
new TableHeaderItem({
|
|
318
|
+
className: 'valtimo-carbon-list__actions',
|
|
319
|
+
sortable: false,
|
|
320
|
+
}),
|
|
321
|
+
]
|
|
322
|
+
: []),
|
|
323
|
+
];
|
|
324
|
+
}
|
|
268
325
|
get extraColumns() {
|
|
269
326
|
const emptyHeader = new TableHeaderItem();
|
|
270
327
|
emptyHeader.sortable = false;
|
|
@@ -324,6 +381,21 @@ export class CarbonListComponent {
|
|
|
324
381
|
onCloseEvent() {
|
|
325
382
|
this.tagModalOpen$.next(false);
|
|
326
383
|
}
|
|
384
|
+
handleActionOpenChange(actionId, isOpen) {
|
|
385
|
+
if (isOpen) {
|
|
386
|
+
this.currentOpenActionId = actionId;
|
|
387
|
+
}
|
|
388
|
+
else if (this.currentOpenActionId === actionId) {
|
|
389
|
+
this.currentOpenActionId = null;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
getDragAndDropItemsItems(item, index, length) {
|
|
393
|
+
return [
|
|
394
|
+
...(!!this.dragAndDrop
|
|
395
|
+
? [new TableItem({ data: { item, index, length }, template: this.dragAndDropTemplate })]
|
|
396
|
+
: []),
|
|
397
|
+
];
|
|
398
|
+
}
|
|
327
399
|
getExtraItems(item, index, length) {
|
|
328
400
|
return [
|
|
329
401
|
...(!!this.actions
|
|
@@ -389,25 +461,34 @@ export class CarbonListComponent {
|
|
|
389
461
|
return this.viewContentService.get(resolvedObjValue, definition);
|
|
390
462
|
}
|
|
391
463
|
swapItems(items, index1, index2) {
|
|
392
|
-
const
|
|
393
|
-
|
|
394
|
-
|
|
464
|
+
const itemToInsert = items[index1];
|
|
465
|
+
const filteredItems = items.filter((_, index) => index !== index1);
|
|
466
|
+
filteredItems.splice(index2, 0, itemToInsert);
|
|
467
|
+
return filteredItems;
|
|
395
468
|
}
|
|
396
|
-
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}
|
|
469
|
+
resolveTagObject(itemTags) {
|
|
470
|
+
if (!itemTags || itemTags.length === 0)
|
|
471
|
+
return new TableItem({
|
|
472
|
+
data: { tags: [] },
|
|
473
|
+
template: this.tagTemplate,
|
|
474
|
+
});
|
|
475
|
+
const tags = itemTags.map((tag, index) => index === 0 ? { ...tag, ellipsisContent: this.transformTagEllipsis(tag.content) } : tag);
|
|
476
|
+
return new TableItem({
|
|
477
|
+
data: { tags },
|
|
478
|
+
template: this.tagTemplate,
|
|
479
|
+
});
|
|
403
480
|
}
|
|
404
|
-
|
|
405
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option [type]=\"action.type\" (selected)=\"action.callback(data.item)\">\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i2.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i2.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i2.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i2.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i2.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i2.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i2.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i2.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i9.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
481
|
+
transformTagEllipsis(tagContent) {
|
|
482
|
+
return (tagContent.substring(0, TAG_ELLIPSIS_LIMIT - 1) +
|
|
483
|
+
(tagContent.length > TAG_ELLIPSIS_LIMIT ? '...' : ''));
|
|
484
|
+
}
|
|
485
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.CarbonListFilterPipe }, { token: i2.IconService }, { token: i3.NGXLogger }, { token: i4.TranslateService }, { token: i5.ViewContentService }, { token: i6.KeyStateService }, { token: i7.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
486
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].ellipsisContent ?? data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i2.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i2.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i2.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i2.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i2.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i2.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i2.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i2.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i10.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i11.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
406
487
|
}
|
|
407
488
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CarbonListComponent, decorators: [{
|
|
408
489
|
type: Component,
|
|
409
|
-
args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option [type]=\"action.type\"
|
|
410
|
-
}], ctorParameters: () => [{ type: i1.CarbonListFilterPipe }, { type: i2.IconService }, { type: i3.NGXLogger }, { type: i4.TranslateService }, { type: i5.ViewContentService }], propDecorators: { actionsMenuTemplate: [{
|
|
490
|
+
args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].ellipsisContent ?? data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
491
|
+
}], ctorParameters: () => [{ type: i1.CarbonListFilterPipe }, { type: i2.IconService }, { type: i3.NGXLogger }, { type: i4.TranslateService }, { type: i5.ViewContentService }, { type: i6.KeyStateService }, { type: i7.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
|
|
411
492
|
type: ViewChild,
|
|
412
493
|
args: ['actionsMenuTemplate']
|
|
413
494
|
}], actionTemplate: [{
|
|
@@ -419,12 +500,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
419
500
|
}], moveRowsTemplate: [{
|
|
420
501
|
type: ViewChild,
|
|
421
502
|
args: ['moveRowsTemplate']
|
|
503
|
+
}], dragAndDropTemplate: [{
|
|
504
|
+
type: ViewChild,
|
|
505
|
+
args: ['dragAndDropTemplate']
|
|
422
506
|
}], rowDisabled: [{
|
|
423
507
|
type: ViewChild,
|
|
424
508
|
args: ['rowDisabled']
|
|
425
509
|
}], tagTemplate: [{
|
|
426
510
|
type: ViewChild,
|
|
427
511
|
args: ['tagTemplate']
|
|
512
|
+
}], defaultTemplate: [{
|
|
513
|
+
type: ViewChild,
|
|
514
|
+
args: ['defaultTemplate']
|
|
428
515
|
}], _table: [{
|
|
429
516
|
type: ViewChild,
|
|
430
517
|
args: [Table]
|
|
@@ -450,6 +537,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
450
537
|
type: Input
|
|
451
538
|
}], initialSortState: [{
|
|
452
539
|
type: Input
|
|
540
|
+
}], sortState: [{
|
|
541
|
+
type: Input
|
|
453
542
|
}], isSearchable: [{
|
|
454
543
|
type: Input
|
|
455
544
|
}], enableSingleSelection: [{
|
|
@@ -468,6 +557,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
468
557
|
type: Input
|
|
469
558
|
}], movingRowsEnabled: [{
|
|
470
559
|
type: Input
|
|
560
|
+
}], dragAndDrop: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], dragAndDropDisabled: [{
|
|
563
|
+
type: Input
|
|
471
564
|
}], rowClicked: [{
|
|
472
565
|
type: Output
|
|
473
566
|
}], paginationClicked: [{
|
|
@@ -483,4 +576,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
483
576
|
}], itemsReordered: [{
|
|
484
577
|
type: Output
|
|
485
578
|
}] } });
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHckUsT0FBTyxFQUtMLEtBQUssRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLElBQUksSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixHQUFHLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRixPQUFPLEVBUUwseUJBQXlC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aUI7c0JBQXpCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Fycm93RG93bjE2LCBBcnJvd1VwMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ludGVybmFsQ2FzZVN0YXR1cywgSW50ZXJuYWxDYXNlU3RhdHVzVXRpbHMsIFNvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG4gIFRhZ1R5cGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWNhcmJvbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyYm9uLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0NhcmJvbkxpc3RGaWx0ZXJQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyYm9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnYWN0aW9uc01lbnVUZW1wbGF0ZScpIGFjdGlvbnNNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE92ZXJmbG93TWVudT47XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvblRlbXBsYXRlJykgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2Jvb2xlYW5UZW1wbGF0ZScpIGJvb2xlYW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnbW92ZVJvd3NUZW1wbGF0ZScpIG1vdmVSb3dzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3Jvd0Rpc2FibGVkJykgcm93RGlzYWJsZWQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3RhZ1RlbXBsYXRlJykgdGFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoVGFibGUpIHByaXZhdGUgX3RhYmxlOiBUYWJsZTtcblxuICBwcml2YXRlIF9jb21wbGV0ZURhdGFTb3VyY2U6IFRhYmxlSXRlbVtdW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuICBwcml2YXRlIF9pdGVtczogQ2FyYm9uTGlzdEl0ZW1bXTtcbiAgcHVibGljIGl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJdGVtW11bXT4oW10pO1xuICBwdWJsaWMgY3VycmVudE9wZW5BY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBDYXJib25MaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5Db25maWdbXT4oW10pO1xuICBASW5wdXQoKSBzZXQgZmllbGRzKHZhbHVlOiBDb2x1bW5Db25maWdbXSkge1xuICAgIHRoaXMuX2ZpZWxkcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZVRyYW5zbGF0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0VHJhbnNsYXRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OU1xuICApO1xuICBASW5wdXQoKSBzZXQgdGFibGVUcmFuc2xhdGlvbnModmFsdWU6IFBhcnRpYWw8Q2FyYm9uTGlzdFRyYW5zbGF0aW9ucz4pIHtcbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQubmV4dCh7Li4uREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OUywgLi4udmFsdWV9KTtcbiAgfVxuXG4gIEBJbnB1dCgpIHBhZ2luYXRvckNvbmZpZzogQ2FyYm9uUGFnaW5hdG9yQ29uZmlnID0gREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHO1xuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBhZ2luYXRpb24odmFsdWU6IFBhcnRpYWw8UGFnaW5hdGlvbj4gfCBmYWxzZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4uREVGQVVMVF9QQUdJTkFUSU9OLCAuLi52YWx1ZX07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi50aGlzLl9wYWdpbmF0aW9uLCAuLi52YWx1ZX07XG4gICAgdGhpcy5idWlsZFBhZ2luYXRpb25Nb2RlbCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBhY3Rpb25zIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFjdGlvbnMgY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdO1xuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVDb2x1bW5IZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluaXRpYWxTb3J0U3RhdGU6IFNvcnRTdGF0ZTtcbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvblNldCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydFN0YXRlPigpO1xuICBAT3V0cHV0KCkgbW92ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8TW92ZVJvd0V2ZW50PigpO1xuICBAT3V0cHV0KCkgaXRlbXNSZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmJvbkxpc3RJdGVtW10+KCk7XG5cbiAgcHVibGljIGJhdGNoVGV4dCQ6IE9ic2VydmFibGU8Q2FyYm9uTGlzdEJhdGNoVGV4dD4gPSB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHRyYW5zbGF0aW9uczogQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucykgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKSxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0LnNpbmdsZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodHJhbnNsYXRpb25zLnNlbGVjdC5tdWx0aXBsZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwKChbU0lOR0xFLCBNVUxUSVBMRV0pID0+ICh7U0lOR0xFLCBNVUxUSVBMRX0pKVxuICApO1xuXG4gIHB1YmxpYyBwYWdpbmF0aW9uVHJhbnNsYXRpb25zJDogT2JzZXJ2YWJsZTxQYXJ0aWFsPFBhZ2luYXRpb25UcmFuc2xhdGlvbnM+PiA9XG4gICAgdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHRyYW5zbGF0aW9uczogQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucykgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi5pdGVtc1BlclBhZ2UpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2UnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdpbnRlcmZhY2UubGlzdC5vZkxhc3RQYWdlcycpLFxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIG1hcCgoW0lURU1TX1BFUl9QQUdFLCBUT1RBTF9JVEVNLCBUT1RBTF9JVEVNUywgT0ZfTEFTVF9QQUdFLCBPRl9MQVNUX1BBR0VTXSkgPT4gKHtcbiAgICAgICAgSVRFTVNfUEVSX1BBR0UsXG4gICAgICAgIFRPVEFMX0lURU0sXG4gICAgICAgIFRPVEFMX0lURU1TLFxuICAgICAgICBPRl9MQVNUX1BBR0UsXG4gICAgICAgIE9GX0xBU1RfUEFHRVMsXG4gICAgICB9KSlcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ydFN0YXRlPih7XG4gICAgc3RhdGU6IHtuYW1lOiAnJywgZGlyZWN0aW9uOiAnREVTQyd9LFxuICAgIGlzU29ydGluZzogZmFsc2UsXG4gIH0pO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnTW9kYWxPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnTW9kYWxEYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uVGFnW10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZID0gQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZO1xuICBwdWJsaWMgcmVhZG9ubHkgVmlld1R5cGUgPSBWaWV3VHlwZTtcbiAgcHVibGljIHNrZWxldG9uTW9kZWwgPSBUYWJsZS5za2VsZXRvbk1vZGVsKDUsIDUpO1xuICBwdWJsaWMgcGFnaW5hdGlvbk1vZGVsOiBQYWdpbmF0aW9uTW9kZWw7XG4gIHB1YmxpYyBzZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gJ1BhZ2luYXRpb25TaXplJztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLl90YWJsZS5tb2RlbDtcblxuICAgIHJldHVybiBtb2RlbC5kYXRhLnJlZHVjZShcbiAgICAgIChpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgXywgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgbW9kZWwuaXNSb3dTZWxlY3RlZChpbmRleCkgPyBbLi4uaXRlbXMsIHRoaXMuaXRlbXNbaW5kZXhdXSA6IFsuLi5pdGVtc10sXG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3SW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGdldCB2aWV3SW5pdGlhbGl6ZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLnBpcGUoZmlsdGVyKGluaXRpYWxpemVkID0+IGluaXRpYWxpemVkKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRhYmxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl90YWJsZS5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyUGlwZTogQ2FyYm9uTGlzdEZpbHRlclBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBTZXR0aW5nc1ZpZXcxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMubG9hZFBhZ2luYXRpb25TaXplKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSkge1xuICAgICAgdGhpcy5zb3J0JC5uZXh0KHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoU3RyaW5nOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHNlYXJjaFN0cmluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUGlwZS50cmFuc2Zvcm0odGhpcy5fY29tcGxldGVEYXRhU291cmNlLCBzZWFyY2hTdHJpbmcgPz8gJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3SW5pdGlhbGl6ZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl90YWJsZS5tb2RlbC5kYXRhW2luZGV4XVswXVsnaXRlbSddO1xuXG4gICAgaWYgKCFpdGVtIHx8IGl0ZW0/LmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFsuLi5oZWFkZXIsIC4uLnRoaXMuZXh0cmFDb2x1bW5zXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gY29tYmluZUxhdGVzdChbdGhpcy5fZmllbGRzJCwgdGhpcy5faXRlbXMkXSkpLFxuICAgIGZpbHRlcigoW2ZpZWxkcywgaXRlbXNdKSA9PiAhIWZpZWxkcyAmJiAhIWl0ZW1zKSxcbiAgICBtYXAoKFtmaWVsZHMsIGl0ZW1zXSkgPT5cbiAgICAgIGl0ZW1zLm1hcCgoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IFtcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RofSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogZmllbGQudGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5CT09MRUFOOlxuICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSk7XG4gICAgICAgICAgICAgIGRhdGEgPSAhQk9PTEVBTl9DT05WRVJURVJfVkFMVUVTLmluY2x1ZGVzKGRhdGEpXG4gICAgICAgICAgICAgICAgPyBkYXRhXG4gICAgICAgICAgICAgICAgOiBgJHsndmlld1R5cGVDb252ZXJ0ZXIuJyArIGRhdGF9YDtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYm9vbGVhblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEFHUzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHt0YWdzOiBpdGVtPy50YWdzID8/IFtdfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7ZGF0YTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSA/PyAnLScsIGl0ZW19KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGUgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKGl0ZW0gPT4gaXRlbS5sb2NrZWQpID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVEb3duQ2xpY2soXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGE6IHtpbmRleDogbnVtYmVyOyBpdGVtOiBDYXJib25MaXN0SXRlbTsgbGVuZ3RoOiBudW1iZXJ9XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW92ZVJvd0V2ZW50ID0ge1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXgsIG1vdmVSb3dFdmVudC5pbmRleCArIDEpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5VUCxcbiAgICAgIGluZGV4OiBkYXRhLmluZGV4LFxuICAgIH07XG4gICAgY29uc3Qgb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXModGhpcy5faXRlbXMsIG1vdmVSb3dFdmVudC5pbmRleCAtIDEsIG1vdmVSb3dFdmVudC5pbmRleCk7XG5cbiAgICB0aGlzLm1vdmVSb3cuZW1pdChtb3ZlUm93RXZlbnQpO1xuICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChvcmRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soZXZlbnQ6IEV2ZW50LCB0YWdzOiBDYXJib25UYWdbXSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudGFnTW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMudGFnTW9kYWxEYXRhJC5uZXh0KHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dHJhSXRlbXMoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBjYWxsYmFjazogYWN0aW9uLmNhbGxiYWNrLCBpY29uQ2xhc3M6IGFjdGlvbi5pY29uQ2xhc3N9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUodGFibGVJdGVtID0+IHRhYmxlSXRlbS5sb2NrZWQpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtsb2NrZWQ6IGl0ZW0ubG9ja2VkfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMucm93RGlzYWJsZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGVcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGV9KV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLm1vdmVSb3dzVGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgZGF0YToge2FjdGlvbnM6IHRoaXMuYWN0aW9uSXRlbXMsIGl0ZW19LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25zTWVudVRlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7c2l6ZTogK2VudHJpZXN9O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcEl0ZW1zKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCB0ZW1wID0gWy4uLml0ZW1zXTtcbiAgICB0ZW1wW2luZGV4MV0gPSB0ZW1wLnNwbGljZShpbmRleDIsIDEsIHRlbXBbaW5kZXgxXSlbMF07XG5cbiAgICByZXR1cm4gdGVtcDtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVBY3Rpb25PcGVuQ2hhbmdlKGFjdGlvbklkOiBzdHJpbmcsIGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9IGFjdGlvbklkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID09PSBhY3Rpb25JZCkge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxjZHMtdGFibGUtY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHNvcnQ6IHNvcnQkIHwgYXN5bmMsXG4gICAgbW9kZWw6IG1vZGVsJCB8IGFzeW5jLFxuICAgIHZpZXdJbml0aWFsaXplZDogdmlld0luaXRpYWxpemVkJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0XCJcbj5cbiAgPGNkcy10YWJsZS1oZWFkZXIgKm5nSWY9XCJoZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9jZHMtdGFibGUtaGVhZGVyPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8Y2RzLXRhYmxlLXRvb2xiYXJcbiAgICAqbmdJZj1cIiFoaWRlVG9vbGJhclwiXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X190b29sYmFyXCJcbiAgICBbbW9kZWxdPVwib2JzLm1vZGVsXCJcbiAgICBbYmF0Y2hUZXh0XT1cImJhdGNoVGV4dCQgfCBhc3luY1wiXG4gID5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQWN0aW9uc11cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cblxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICAgICAgPGNkcy10YWJsZS10b29sYmFyLXNlYXJjaFxuICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckNvbnRlbnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLXRvb2xiYXI+XG5cbiAgPGNkcy10YWJsZVxuICAgICpuZ0lmPVwiISFvYnMuc29ydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2hlYWRlci0taGlkZGVuJzogaGlkZUNvbHVtbkhlYWRlcixcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0LS11bmNsaWNrYWJsZSc6ICF0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZWRcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcy5sZW5ndGhcIlxuICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cInBhZ2luYXRvckNvbmZpZy5pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICBbbW9kZWxdPVwicGFnaW5hdGlvbk1vZGVsXCJcbiAgICBbc2hvd1BhZ2VJbnB1dF09XCJwYWdpbmF0b3JDb25maWcuc2hvd1BhZ2VJbnB1dFwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFt0cmFuc2xhdGlvbnNdPVwicGFnaW5hdGlvblRyYW5zbGF0aW9ucyQgfCBhc3luY1wiXG4gICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICA+PC9jZHMtcGFnaW5hdGlvbj5cbjwvY2RzLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGlcbiAgICBjbGFzcz1cImNsaWNrYWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiZGF0YS5pY29uQ2xhc3NcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRhdGEuY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gID48L2k+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jvb2xlYW5UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAge3sgZGF0YSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25zTWVudVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8Y2RzLW92ZXJmbG93LW1lbnVcbiAgICBbb3Blbl09XCJjdXJyZW50T3BlbkFjdGlvbklkID09PSBkYXRhLml0ZW1cIlxuICAgIChvcGVuQ2hhbmdlKT1cImhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoZGF0YS5pdGVtLCAkZXZlbnQpXCJcbiAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA1MH1cIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICBAZm9yIChhY3Rpb24gb2YgZGF0YS5hY3Rpb25zOyB0cmFjayBhY3Rpb24ubGFiZWwpIHtcbiAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24gW3R5cGVdPVwiYWN0aW9uLnR5cGVcIiAoc2VsZWN0ZWQpPVwiYWN0aW9uLmNhbGxiYWNrKGRhdGEuaXRlbSlcIj5cbiAgICAgICAgPGkgKm5nSWY9XCIhIWFjdGlvbi5pY29uQ2xhc3NcIiBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuXG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgfVxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJsb2NrZWRcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiZy1ncmV5XCJcbiAgICAgIG5nYlRvb2x0aXA9XCJ7eyBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd3NUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX21vdmUtcm93c1wiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSAwXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlVXBDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tdXBcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlRG93bkNsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS1kb3duXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFnVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGF0YS50YWdzXCI+LTwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgKm5nSWY9XCJkYXRhLnRhZ3NcIiBjbGFzcz1cInRhZy10ZW1wbGF0ZVwiPlxuICAgIEBpZiAoZGF0YS50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLVxuICAgIH0gQGVsc2Uge1xuICAgICAgPGNkcy10YWcgKm5nSWY9XCIhIWRhdGEudGFnc1swXS5jb250ZW50XCIgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhLnRhZ3NbMF0udHlwZVwiPlxuICAgICAgICB7eyBkYXRhLnRhZ3NbMF0uY29udGVudCB9fVxuICAgICAgPC9jZHMtdGFnPlxuXG4gICAgICA8Y2RzLXRhZ1xuICAgICAgICAqbmdJZj1cImRhdGEudGFncy5sZW5ndGggPiAxXCJcbiAgICAgICAgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW4gdmFsdGltby1jYXJib24tbGlzdF9fZXhwYW5kLXRhZ1wiXG4gICAgICAgIHR5cGU9XCJoaWdoLWNvbnRyYXN0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVGFnQ2xpY2soJGV2ZW50LCBkYXRhLnRhZ3MpXCJcbiAgICAgID5cbiAgICAgICAge3sgZGF0YS50YWdzLmxlbmd0aCAtIDEgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2Nkcy10YWc+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjx2YWx0aW1vLXRhZ3MtbW9kYWxcbiAgW29wZW5dPVwidGFnTW9kYWxPcGVuJCB8IGFzeW5jXCJcbiAgW3RhZ3NdPVwidGFnTW9kYWxEYXRhJCB8IGFzeW5jXCJcbiAgKGNsb3NlRXZlbnQpPVwib25DbG9zZUV2ZW50KClcIlxuPjwvdmFsdGltby10YWdzLW1vZGFsPlxuIl19
|
|
579
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLHdCQUF3QixFQUFFLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxF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S0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNiwgRHJhZ2dhYmxlMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBUQUdfRUxMSVBTSVNfTElNSVQsXG4gIFZpZXdUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtLZXlTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtDYXJib25MaXN0RmlsdGVyUGlwZSwgQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbnNNZW51VGVtcGxhdGUnKSBhY3Rpb25zTWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxPdmVyZmxvd01lbnU+O1xuICBAVmlld0NoaWxkKCdhY3Rpb25UZW1wbGF0ZScpIGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdib29sZWFuVGVtcGxhdGUnKSBib29sZWFuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dzVGVtcGxhdGUnKSBtb3ZlUm93c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcFRlbXBsYXRlJykgZHJhZ0FuZERyb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFnVGVtcGxhdGUnKSB0YWdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRlbXBsYXRlJykgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVEYXRhU291cmNlOiBUYWJsZUl0ZW1bXVtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuICBwcml2YXRlIGdldCBfaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBDYXJib25MaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnRPcGVuQWN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbHVtbkNvbmZpZ1tdPihbXSk7XG4gIEBJbnB1dCgpIHNldCBmaWVsZHModmFsdWU6IENvbHVtbkNvbmZpZ1tdKSB7XG4gICAgdGhpcy5fZmllbGRzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlVHJhbnNsYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TXG4gICk7XG4gIEBJbnB1dCgpIHNldCB0YWJsZVRyYW5zbGF0aW9ucyh2YWx1ZTogUGFydGlhbDxDYXJib25MaXN0VHJhbnNsYXRpb25zPikge1xuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5uZXh0KHsuLi5ERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLCAuLi52YWx1ZX0pO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yQ29uZmlnOiBDYXJib25QYWdpbmF0b3JDb25maWcgPSBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUc7XG4gIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcGFnaW5hdGlvbih2YWx1ZTogUGFydGlhbDxQYWdpbmF0aW9uPiB8IGZhbHNlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi5ERUZBVUxUX1BBR0lOQVRJT04sIC4uLnZhbHVlfTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLnRoaXMuX3BhZ2luYXRpb24sIC4uLnZhbHVlfTtcbiAgICB0aGlzLmJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk7XG4gIH1cbiAgcHVibGljIGdldCBwYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGFjdGlvbnMgZmllbGQgaXMgZGVwcmVjYXRlZC4gQWN0aW9ucyBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW107XG4gIEBJbnB1dCgpIGhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBASW5wdXQoKSBzZXQgc29ydFN0YXRlKHZhbHVlOiBTb3J0U3RhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5zb3J0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBpc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbGFzdENvbHVtblRlbXBsYXRlIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFueSB0ZW1wbGF0ZSBjb2x1bW4gY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBsYXN0Q29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25JZGVudGlmaWVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dTZWxlY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RyaXBlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlVG9vbGJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgbW92aW5nUm93c0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIG1vdmVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdmVSb3dFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJib25MaXN0SXRlbVtdPigpO1xuXG4gIHB1YmxpYyBiYXRjaFRleHQkOiBPYnNlcnZhYmxlPENhcmJvbkxpc3RCYXRjaFRleHQ+ID0gdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMuc2VsZWN0LnNpbmdsZSksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5tdWx0aXBsZSksXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgoW1NJTkdMRSwgTVVMVElQTEVdKSA9PiAoe1NJTkdMRSwgTVVMVElQTEV9KSlcbiAgKTtcblxuICBwdWJsaWMgcGFnaW5hdGlvblRyYW5zbGF0aW9ucyQ6IE9ic2VydmFibGU8UGFydGlhbDxQYWdpbmF0aW9uVHJhbnNsYXRpb25zPj4gPVxuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24uaXRlbXNQZXJQYWdlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLnRvdGFsSXRlbSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW1zKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdpbnRlcmZhY2UubGlzdC5vZkxhc3RQYWdlJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZXMnKSxcbiAgICAgICAgXSlcbiAgICAgICksXG4gICAgICBtYXAoKFtJVEVNU19QRVJfUEFHRSwgVE9UQUxfSVRFTSwgVE9UQUxfSVRFTVMsIE9GX0xBU1RfUEFHRSwgT0ZfTEFTVF9QQUdFU10pID0+ICh7XG4gICAgICAgIElURU1TX1BFUl9QQUdFLFxuICAgICAgICBUT1RBTF9JVEVNLFxuICAgICAgICBUT1RBTF9JVEVNUyxcbiAgICAgICAgT0ZfTEFTVF9QQUdFLFxuICAgICAgICBPRl9MQVNUX1BBR0VTLFxuICAgICAgfSkpXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvcnRTdGF0ZT4oe1xuICAgIHN0YXRlOiB7bmFtZTogJycsIGRpcmVjdGlvbjogJ0RFU0MnfSxcbiAgICBpc1NvcnRpbmc6IGZhbHNlLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvblRhZ1tdPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWSA9IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWTtcbiAgcHVibGljIHJlYWRvbmx5IFZpZXdUeXBlID0gVmlld1R5cGU7XG4gIHB1YmxpYyBza2VsZXRvbk1vZGVsID0gVGFibGUuc2tlbGV0b25Nb2RlbCg1LCA1KTtcbiAgcHVibGljIHBhZ2luYXRpb25Nb2RlbDogUGFnaW5hdGlvbk1vZGVsO1xuICBwdWJsaWMgc2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fdGFibGUubW9kZWw7XG5cbiAgICByZXR1cm4gbW9kZWwuZGF0YS5yZWR1Y2UoXG4gICAgICAoaXRlbXM6IENhcmJvbkxpc3RJdGVtW10sIF8sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIG1vZGVsLmlzUm93U2VsZWN0ZWQoaW5kZXgpID8gWy4uLml0ZW1zLCB0aGlzLml0ZW1zW2luZGV4XV0gOiBbLi4uaXRlbXNdLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0luaXRpYWxpemVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBnZXQgdmlld0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0luaXRpYWxpemVkJC5waXBlKGZpbHRlcihpbml0aWFsaXplZCA9PiBpbml0aWFsaXplZCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBUYWJsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGUubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU29ydFN0YXRlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5pbml0aWFsU29ydFN0YXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbS50YWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSA/PyAnLScsXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSA/PyAnLScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuZGVmYXVsdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC4uLnRoaXMuZ2V0RXh0cmFJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICB0YXAoKGRhdGE6IFRhYmxlSXRlbVtdW10pID0+IHtcbiAgICAgIHRoaXMuX2NvbXBsZXRlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJlZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVJdGVtW11bXSB8IG51bGw+KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBtb2RlbCQ6IE9ic2VydmFibGU8VGFibGVNb2RlbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9oZWFkZXJJdGVtcyQsXG4gICAgdGhpcy5fdGFibGVJdGVtcyQsXG4gICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaGVhZGVyLCBkYXRhLCBmaWx0ZXJlZERhdGFdKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbCA9IG5ldyBUYWJsZU1vZGVsKCk7XG4gICAgICBtb2RlbC5oZWFkZXIgPSBoZWFkZXI7XG4gICAgICBtb2RlbC5kYXRhID0gZmlsdGVyZWREYXRhID8/IGRhdGE7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSksXG4gICAgc3RhcnRXaXRoKG5ldyBUYWJsZU1vZGVsKCkpXG4gICk7XG5cbiAgcHJpdmF0ZSBnZXQgZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zKCk6IFRhYmxlSGVhZGVySXRlbVtdIHtcbiAgICBjb25zdCBlbXB0eUhlYWRlciA9IG5ldyBUYWJsZUhlYWRlckl0ZW0oKTtcblxuICAgIGVtcHR5SGVhZGVyLnNvcnRhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGV4dHJhQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLm1vdmluZ1Jvd3NFbmFibGVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGUgPyBbZW1wdHlIZWFkZXJdIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKGl0ZW0gPT4gaXRlbS5sb2NrZWQpID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVEb3duQ2xpY2soXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGE6IHtpbmRleDogbnVtYmVyOyBpdGVtOiBDYXJib25MaXN0SXRlbTsgbGVuZ3RoOiBudW1iZXJ9XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW92ZVJvd0V2ZW50ID0ge1xuICAgICAgZGlyZWN0aW9uOiBNb3ZlUm93RGlyZWN0aW9uLkRPV04sXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXgsIG1vdmVSb3dFdmVudC5pbmRleCArIDEpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVVcENsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5VUCxcbiAgICAgIGluZGV4OiBkYXRhLmluZGV4LFxuICAgIH07XG4gICAgY29uc3Qgb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXModGhpcy5faXRlbXMsIG1vdmVSb3dFdmVudC5pbmRleCAtIDEsIG1vdmVSb3dFdmVudC5pbmRleCk7XG5cbiAgICB0aGlzLm1vdmVSb3cuZW1pdChtb3ZlUm93RXZlbnQpO1xuICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChvcmRlcmVkSXRlbXMpO1xuICB9XG5cbiAgcHVibGljIG9uVGFnQ2xpY2soZXZlbnQ6IEV2ZW50LCB0YWdzOiBDYXJib25UYWdbXSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudGFnTW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICAgIHRoaXMudGFnTW9kYWxEYXRhJC5uZXh0KHRhZ3MpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQWN0aW9uT3BlbkNoYW5nZShhY3Rpb25JZDogc3RyaW5nLCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBhY3Rpb25JZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gYWN0aW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5BY3Rpb25JZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnQW5kRHJvcEl0ZW1zSXRlbXMoXG4gICAgaXRlbTogQ2FyYm9uTGlzdEl0ZW0sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsZW5ndGg6IG51bWJlclxuICApOiBUYWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLighIXRoaXMuZHJhZ0FuZERyb3BcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5kcmFnQW5kRHJvcFRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEV4dHJhSXRlbXMoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmFjdGlvbnMubWFwKFxuICAgICAgICAgICAgYWN0aW9uID0+XG4gICAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBjYWxsYmFjazogYWN0aW9uLmNhbGxiYWNrLCBpY29uQ2xhc3M6IGFjdGlvbi5pY29uQ2xhc3N9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmFjdGlvblRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5faXRlbXM/LnNvbWUodGFibGVJdGVtID0+IHRhYmxlSXRlbS5sb2NrZWQpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgIGRhdGE6IHtsb2NrZWQ6IGl0ZW0ubG9ja2VkfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMucm93RGlzYWJsZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGVcbiAgICAgICAgPyBbbmV3IFRhYmxlSXRlbSh7ZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LCB0ZW1wbGF0ZTogdGhpcy5sYXN0Q29sdW1uVGVtcGxhdGV9KV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLm1vdmVSb3dzVGVtcGxhdGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25JdGVtc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgZGF0YToge2FjdGlvbnM6IHRoaXMuYWN0aW9uSXRlbXMsIGl0ZW19LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25zTWVudVRlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0NhcmJvbkxpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7c2l6ZTogK2VudHJpZXN9O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgc3dhcEl0ZW1zKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBpdGVtVG9JbnNlcnQgPSBpdGVtc1tpbmRleDFdO1xuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCAhPT0gaW5kZXgxKTtcbiAgICBmaWx0ZXJlZEl0ZW1zLnNwbGljZShpbmRleDIsIDAsIGl0ZW1Ub0luc2VydCk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRhZ09iamVjdChpdGVtVGFnczogQ2FyYm9uVGFnW10gfCB1bmRlZmluZWQpOiBUYWJsZUl0ZW0ge1xuICAgIGlmICghaXRlbVRhZ3MgfHwgaXRlbVRhZ3MubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICBkYXRhOiB7dGFnczogW119LFxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdGFncyA9IGl0ZW1UYWdzLm1hcCgodGFnOiBDYXJib25UYWcsIGluZGV4OiBudW1iZXIpID0+XG4gICAgICBpbmRleCA9PT0gMCA/IHsuLi50YWcsIGVsbGlwc2lzQ29udGVudDogdGhpcy50cmFuc2Zvcm1UYWdFbGxpcHNpcyh0YWcuY29udGVudCl9IDogdGFnXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgIGRhdGE6IHt0YWdzfSxcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRhZ1RlbXBsYXRlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWdFbGxpcHNpcyh0YWdDb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0YWdDb250ZW50LnN1YnN0cmluZygwLCBUQUdfRUxMSVBTSVNfTElNSVQgLSAxKSArXG4gICAgICAodGFnQ29udGVudC5sZW5ndGggPiBUQUdfRUxMSVBTSVNfTElNSVQgPyAnLi4uJyA6ICcnKVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxjZHMtdGFibGUtY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHNvcnQ6IHNvcnQkIHwgYXN5bmMsXG4gICAgbW9kZWw6IG1vZGVsJCB8IGFzeW5jLFxuICAgIHZpZXdJbml0aWFsaXplZDogdmlld0luaXRpYWxpemVkJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0XCJcbj5cbiAgPGNkcy10YWJsZS1oZWFkZXIgKm5nSWY9XCJoZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9jZHMtdGFibGUtaGVhZGVyPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8Y2RzLXRhYmxlLXRvb2xiYXJcbiAgICAqbmdJZj1cIiFoaWRlVG9vbGJhclwiXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X190b29sYmFyXCJcbiAgICBbbW9kZWxdPVwib2JzLm1vZGVsXCJcbiAgICBbYmF0Y2hUZXh0XT1cImJhdGNoVGV4dCQgfCBhc3luY1wiXG4gID5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQWN0aW9uc11cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cblxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICAgICAgPGNkcy10YWJsZS10b29sYmFyLXNlYXJjaFxuICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckNvbnRlbnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLXRvb2xiYXI+XG5cbiAgPGNkcy10YWJsZVxuICAgICpuZ0lmPVwiISFvYnMuc29ydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2hlYWRlci0taGlkZGVuJzogaGlkZUNvbHVtbkhlYWRlcixcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0LS11bmNsaWNrYWJsZSc6ICF0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZWRcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcy5sZW5ndGhcIlxuICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cInBhZ2luYXRvckNvbmZpZy5pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICBbbW9kZWxdPVwicGFnaW5hdGlvbk1vZGVsXCJcbiAgICBbc2hvd1BhZ2VJbnB1dF09XCJwYWdpbmF0b3JDb25maWcuc2hvd1BhZ2VJbnB1dFwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFt0cmFuc2xhdGlvbnNdPVwicGFnaW5hdGlvblRyYW5zbGF0aW9ucyQgfCBhc3luY1wiXG4gICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICA+PC9jZHMtcGFnaW5hdGlvbj5cbjwvY2RzLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGlcbiAgICBjbGFzcz1cImNsaWNrYWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiZGF0YS5pY29uQ2xhc3NcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRhdGEuY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gID48L2k+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jvb2xlYW5UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAge3sgZGF0YSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25zTWVudVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8Y2RzLW92ZXJmbG93LW1lbnVcbiAgICBbb3Blbl09XCJjdXJyZW50T3BlbkFjdGlvbklkID09PSBkYXRhLml0ZW1cIlxuICAgIChvcGVuQ2hhbmdlKT1cImhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoZGF0YS5pdGVtLCAkZXZlbnQpXCJcbiAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA1MH1cIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICBAZm9yIChhY3Rpb24gb2YgZGF0YS5hY3Rpb25zOyB0cmFjayBhY3Rpb24ubGFiZWwpIHtcbiAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb25cbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZENhbGxiYWNrID8gYWN0aW9uLmRpc2FibGVkQ2FsbGJhY2soZGF0YS5pdGVtKSA6IGZhbHNlXCJcbiAgICAgICAgW3R5cGVdPVwiYWN0aW9uLnR5cGVcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwiYWN0aW9uLmNhbGxiYWNrKGRhdGEuaXRlbSlcIlxuICAgICAgPlxuICAgICAgICA8aSAqbmdJZj1cIiEhYWN0aW9uLmljb25DbGFzc1wiIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIj48L2k+XG5cbiAgICAgICAge3sgYWN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAgICB9XG4gIDwvY2RzLW92ZXJmbG93LW1lbnU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Jvd0Rpc2FibGVkIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2ICpuZ0lmPVwiZGF0YS5sb2NrZWRcIiBjbGFzcz1cImxvY2tlZFwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0IGJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utc2Vjb25kYXJ5IGJnLWdyZXlcIlxuICAgICAgbmdiVG9vbHRpcD1cInt7IGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktbG9ja1wiPjwvaT5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3ZlUm93c1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fbW92ZS1yb3dzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhdGEuaW5kZXggPT09IDBcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVVcENsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS11cFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSBkYXRhLmxlbmd0aCAtIDFcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVEb3duQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYXJyb3ctLWRvd25cIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnQW5kRHJvcFRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fZHJhZ2dhYmxlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgW2Rpc2FibGVkXT1cImRyYWdBbmREcm9wRGlzYWJsZWRcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25EcmFnU3RhcnQoJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiZHJhZ2dhYmxlXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFnVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGF0YS50YWdzXCI+LTwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgKm5nSWY9XCJkYXRhLnRhZ3NcIiBjbGFzcz1cInRhZy10ZW1wbGF0ZVwiPlxuICAgIEBpZiAoZGF0YS50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLVxuICAgIH0gQGVsc2Uge1xuICAgICAgPGNkcy10YWcgKm5nSWY9XCIhIWRhdGEudGFnc1swXS5jb250ZW50XCIgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhLnRhZ3NbMF0udHlwZVwiPlxuICAgICAgICB7eyBkYXRhLnRhZ3NbMF0uZWxsaXBzaXNDb250ZW50ID8/IGRhdGEudGFnc1swXS5jb250ZW50IH19XG4gICAgICA8L2Nkcy10YWc+XG5cbiAgICAgIDxjZHMtdGFnXG4gICAgICAgICpuZ0lmPVwiZGF0YS50YWdzLmxlbmd0aCA+IDFcIlxuICAgICAgICBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpbiB2YWx0aW1vLWNhcmJvbi1saXN0X19leHBhbmQtdGFnXCJcbiAgICAgICAgdHlwZT1cImhpZ2gtY29udHJhc3RcIlxuICAgICAgICAoY2xpY2spPVwib25UYWdDbGljaygkZXZlbnQsIGRhdGEudGFncylcIlxuICAgICAgPlxuICAgICAgICB7eyBkYXRhLnRhZ3MubGVuZ3RoIC0gMSB9fSA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgIDwvY2RzLXRhZz5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxzcGFuPnt7IGRhdGEgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby10YWdzLW1vZGFsXG4gIFtvcGVuXT1cInRhZ01vZGFsT3BlbiQgfCBhc3luY1wiXG4gIFt0YWdzXT1cInRhZ01vZGFsRGF0YSQgfCBhc3luY1wiXG4gIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgpXCJcbj48L3ZhbHRpbW8tdGFncy1tb2RhbD5cbiJdfQ==
|