@arsedizioni/ars-utils 18.1.51 → 18.1.53
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/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +101 -110
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +91 -99
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/package.json +18 -18
- package/ui.application/ui/components/file-input/file-input.component.d.ts +1 -1
- package/ui.application/ui/components/filter-bar/filter-bar.component.d.ts +1 -1
- package/ui.application/ui/dialogs/select/select-dialog.component.d.ts +24 -26
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Component, EventEmitter,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Output, ViewChild, inject, signal } from "@angular/core";
|
|
2
2
|
import { FormsModule } from "@angular/forms";
|
|
3
3
|
import { MatButtonModule } from "@angular/material/button";
|
|
4
4
|
import { MatCheckboxModule } from "@angular/material/checkbox";
|
|
5
5
|
import { MatOptionModule } from "@angular/material/core";
|
|
6
|
-
import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from "@angular/material/dialog";
|
|
6
|
+
import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from "@angular/material/dialog";
|
|
7
7
|
import { MatDividerModule } from "@angular/material/divider";
|
|
8
8
|
import { MatFormFieldModule } from "@angular/material/form-field";
|
|
9
9
|
import { MatIconModule } from "@angular/material/icon";
|
|
@@ -17,26 +17,24 @@ import { SafeHtmlPipe, SearchFilterPipe, SystemUtils } from '@arsedizioni/ars-ut
|
|
|
17
17
|
import { ExtendedModule } from '@ngbracket/ngx-layout';
|
|
18
18
|
import { FlexModule } from "@ngbracket/ngx-layout/flex";
|
|
19
19
|
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "@
|
|
21
|
-
import * as i2 from "@
|
|
22
|
-
import * as i3 from "@angular/material/
|
|
23
|
-
import * as i4 from "@angular/
|
|
24
|
-
import * as i5 from "@angular/
|
|
25
|
-
import * as i6 from "@angular/material/
|
|
26
|
-
import * as i7 from "@angular/material/
|
|
27
|
-
import * as i8 from "@angular/material/
|
|
28
|
-
import * as i9 from "@angular/material/
|
|
29
|
-
import * as i10 from "@angular/material/
|
|
30
|
-
import * as i11 from "@angular/material/
|
|
31
|
-
import * as i12 from "@angular/material/
|
|
32
|
-
import * as i13 from "@angular/material/
|
|
33
|
-
import * as i14 from "@angular/material/
|
|
34
|
-
import * as i15 from "@angular/material/paginator";
|
|
20
|
+
import * as i1 from "@ngbracket/ngx-layout/flex";
|
|
21
|
+
import * as i2 from "@angular/material/form-field";
|
|
22
|
+
import * as i3 from "@angular/material/input";
|
|
23
|
+
import * as i4 from "@angular/forms";
|
|
24
|
+
import * as i5 from "@angular/material/button";
|
|
25
|
+
import * as i6 from "@angular/material/icon";
|
|
26
|
+
import * as i7 from "@angular/material/select";
|
|
27
|
+
import * as i8 from "@angular/material/core";
|
|
28
|
+
import * as i9 from "@angular/material/tooltip";
|
|
29
|
+
import * as i10 from "@angular/material/menu";
|
|
30
|
+
import * as i11 from "@angular/material/divider";
|
|
31
|
+
import * as i12 from "@angular/material/checkbox";
|
|
32
|
+
import * as i13 from "@angular/material/list";
|
|
33
|
+
import * as i14 from "@angular/material/paginator";
|
|
35
34
|
export class SelectDialogComponent {
|
|
36
|
-
constructor(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.dialogRef = dialogRef;
|
|
35
|
+
constructor() {
|
|
36
|
+
this.dialogRef = inject((MatDialogRef));
|
|
37
|
+
this.dialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'outline', title: 'Seleziona' };
|
|
40
38
|
this.done = new EventEmitter();
|
|
41
39
|
this.edit = new EventEmitter();
|
|
42
40
|
this.view = new EventEmitter();
|
|
@@ -45,13 +43,13 @@ export class SelectDialogComponent {
|
|
|
45
43
|
this.lookup = new EventEmitter();
|
|
46
44
|
this.lookupOptions = new EventEmitter();
|
|
47
45
|
this.filter = new EventEmitter();
|
|
48
|
-
this.canEdit = false;
|
|
49
|
-
this.canView = false;
|
|
50
|
-
this.canAppend = false;
|
|
51
|
-
this.canDelete = false;
|
|
52
|
-
this.canPaginate = false;
|
|
46
|
+
this.canEdit = signal(false);
|
|
47
|
+
this.canView = signal(false);
|
|
48
|
+
this.canAppend = signal(false);
|
|
49
|
+
this.canDelete = signal(false);
|
|
50
|
+
this.canPaginate = signal(false);
|
|
53
51
|
// Handle submit button activity
|
|
54
|
-
this.okDisabled = true;
|
|
52
|
+
this.okDisabled = signal(true);
|
|
55
53
|
// Used for array filtering
|
|
56
54
|
this.filterText = "";
|
|
57
55
|
this.filterOptions = [];
|
|
@@ -60,42 +58,42 @@ export class SelectDialogComponent {
|
|
|
60
58
|
this.lookupField = "";
|
|
61
59
|
// Used to display selected elements
|
|
62
60
|
this.selectionInfo = "";
|
|
63
|
-
this.selectionMasterIndeterminate = false;
|
|
64
|
-
this.selectionMasterChecked = false;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
this.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
61
|
+
this.selectionMasterIndeterminate = signal(false);
|
|
62
|
+
this.selectionMasterChecked = signal(false);
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
if (!this.dialogData.appearance) {
|
|
66
|
+
this.dialogData.appearance = 'outline';
|
|
67
|
+
}
|
|
68
|
+
if (!this.dialogData.title) {
|
|
69
|
+
this.dialogData.title = 'Seleziona';
|
|
70
|
+
}
|
|
71
|
+
if (this.dialogData.multi && !this.dialogData.items) {
|
|
72
|
+
this.dialogData.multi = true;
|
|
73
|
+
}
|
|
74
|
+
if (!this.dialogData.okCaption) {
|
|
75
|
+
this.dialogData.okCaption = "Ok";
|
|
76
|
+
}
|
|
77
|
+
this.canAppend.set(this.dialogData.canAppend);
|
|
78
|
+
if (this.dialogData.canLookup) {
|
|
79
|
+
this.dialogData.items = [];
|
|
80
|
+
if (this.dialogData.lookupFields && this.dialogData.lookupFields.length > 0) {
|
|
81
|
+
this.lookupField = this.dialogData.lookupFields[0].value;
|
|
82
82
|
}
|
|
83
|
-
if (this.
|
|
84
|
-
this.filterOptions = this.
|
|
83
|
+
if (this.dialogData.canFilter) {
|
|
84
|
+
this.filterOptions = this.dialogData.filters;
|
|
85
85
|
}
|
|
86
|
-
if (this.
|
|
87
|
-
this.canPaginate
|
|
88
|
-
if (!this.
|
|
89
|
-
this.
|
|
86
|
+
if (this.dialogData.canPaginate) {
|
|
87
|
+
this.canPaginate.set(this.dialogData.canPaginate);
|
|
88
|
+
if (!this.dialogData.pageSize) {
|
|
89
|
+
this.dialogData.pageSize = 100;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
this.okDisabled
|
|
94
|
-
}
|
|
95
|
-
ngOnInit() {
|
|
93
|
+
this.okDisabled.set(this.dialogData.mustSelect);
|
|
96
94
|
// Apply filter if exists
|
|
97
|
-
if (this.
|
|
98
|
-
this.doFilter(this.
|
|
95
|
+
if (this.dialogData.filter || this.dialogData.lookupOnInit) {
|
|
96
|
+
this.doFilter(this.dialogData.filter);
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
/**
|
|
@@ -105,7 +103,7 @@ export class SelectDialogComponent {
|
|
|
105
103
|
return (this.selection &&
|
|
106
104
|
this.selection.selectedOptions &&
|
|
107
105
|
this.selection.selectedOptions.selected &&
|
|
108
|
-
this.selection.selectedOptions.selected.length === this.
|
|
106
|
+
this.selection.selectedOptions.selected.length === this.dialogData.items.length);
|
|
109
107
|
}
|
|
110
108
|
/**
|
|
111
109
|
* Checks if exists a selection
|
|
@@ -125,46 +123,40 @@ export class SelectDialogComponent {
|
|
|
125
123
|
this.selection.selectAll();
|
|
126
124
|
else
|
|
127
125
|
this.selection.deselectAll();
|
|
128
|
-
this.selectionMasterIndeterminate
|
|
126
|
+
this.selectionMasterIndeterminate.set(false);
|
|
129
127
|
this.selectionMasterChecked = args.checked;
|
|
130
|
-
this.okDisabled
|
|
131
|
-
this.
|
|
132
|
-
(!this.selection || this.selection.selectedOptions.selected.length === 0);
|
|
128
|
+
this.okDisabled.set(this.dialogData.mustSelect &&
|
|
129
|
+
(!this.selection || this.selection.selectedOptions.selected.length === 0));
|
|
133
130
|
this.updateSelectionInfo();
|
|
134
131
|
}
|
|
135
132
|
/**
|
|
136
133
|
* Handle selection/deselection of an item
|
|
137
134
|
*/
|
|
138
135
|
select(e) {
|
|
139
|
-
if (!this.
|
|
136
|
+
if (!this.dialogData.multi) {
|
|
140
137
|
this.selection.deselectAll();
|
|
141
138
|
if (e.options?.length > 0)
|
|
142
139
|
e.options[0].selected = true;
|
|
143
|
-
this.okDisabled
|
|
140
|
+
this.okDisabled.set(false);
|
|
144
141
|
}
|
|
145
142
|
else {
|
|
146
|
-
this.okDisabled
|
|
147
|
-
this.
|
|
148
|
-
|
|
149
|
-
this.selection.selectedOptions.selected.length === 0);
|
|
143
|
+
this.okDisabled.set(this.dialogData.mustSelect &&
|
|
144
|
+
(!this.selection ||
|
|
145
|
+
this.selection.selectedOptions.selected.length === 0));
|
|
150
146
|
}
|
|
151
147
|
// Update editors
|
|
152
|
-
this.canAppend
|
|
153
|
-
this.canEdit
|
|
154
|
-
this.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
this.selection.selectedOptions.selected.length > 0;
|
|
165
|
-
this.selectionMasterIndeterminate =
|
|
166
|
-
!this.isAllSelected() && this.hasSelection();
|
|
167
|
-
this.selectionMasterChecked = this.hasSelection();
|
|
148
|
+
this.canAppend.set(this.dialogData.canAppend);
|
|
149
|
+
this.canEdit.set(this.dialogData.canEdit &&
|
|
150
|
+
this.selection &&
|
|
151
|
+
this.selection.selectedOptions.selected.length === 1);
|
|
152
|
+
this.canView.set(this.dialogData.canView &&
|
|
153
|
+
this.selection &&
|
|
154
|
+
this.selection.selectedOptions.selected.length === 1);
|
|
155
|
+
this.canDelete.set(this.dialogData.canDelete &&
|
|
156
|
+
this.selection &&
|
|
157
|
+
this.selection.selectedOptions.selected.length > 0);
|
|
158
|
+
this.selectionMasterIndeterminate.set(!this.isAllSelected() && this.hasSelection());
|
|
159
|
+
this.selectionMasterChecked.set(this.hasSelection());
|
|
168
160
|
this.updateSelectionInfo();
|
|
169
161
|
}
|
|
170
162
|
/**
|
|
@@ -172,7 +164,7 @@ export class SelectDialogComponent {
|
|
|
172
164
|
*/
|
|
173
165
|
updateSelectionInfo() {
|
|
174
166
|
// Update selection info
|
|
175
|
-
if (this.selection && this.
|
|
167
|
+
if (this.selection && this.dialogData.multi) {
|
|
176
168
|
this.selectionInfo =
|
|
177
169
|
this.selection.selectedOptions.selected.length +
|
|
178
170
|
" / " +
|
|
@@ -186,8 +178,8 @@ export class SelectDialogComponent {
|
|
|
186
178
|
* Clear current selection
|
|
187
179
|
*/
|
|
188
180
|
clearSelection() {
|
|
189
|
-
this.selectionMasterIndeterminate
|
|
190
|
-
this.selectionMasterChecked
|
|
181
|
+
this.selectionMasterIndeterminate.set(false);
|
|
182
|
+
this.selectionMasterChecked.set(false);
|
|
191
183
|
this.selection.deselectAll();
|
|
192
184
|
this.selectionInfo = "";
|
|
193
185
|
}
|
|
@@ -229,9 +221,9 @@ export class SelectDialogComponent {
|
|
|
229
221
|
if (text) {
|
|
230
222
|
this.filterText = text;
|
|
231
223
|
}
|
|
232
|
-
if (this.
|
|
224
|
+
if (this.dialogData.canLookup) {
|
|
233
225
|
if (!e || e.keyCode === 13) {
|
|
234
|
-
this.lookup.emit({ items: this.
|
|
226
|
+
this.lookup.emit({ items: this.dialogData.items, filter: this.filterText });
|
|
235
227
|
}
|
|
236
228
|
}
|
|
237
229
|
}
|
|
@@ -240,9 +232,9 @@ export class SelectDialogComponent {
|
|
|
240
232
|
* @param filterOPtion : the current filter
|
|
241
233
|
*/
|
|
242
234
|
doFilterByOptions(filterOption) {
|
|
243
|
-
if (this.
|
|
235
|
+
if (this.dialogData.canLookup && this.dialogData.canFilter) {
|
|
244
236
|
this.filter.emit({
|
|
245
|
-
items: this.
|
|
237
|
+
items: this.dialogData.items,
|
|
246
238
|
filter: this.filterText,
|
|
247
239
|
filterOption: filterOption,
|
|
248
240
|
owner: this,
|
|
@@ -254,10 +246,10 @@ export class SelectDialogComponent {
|
|
|
254
246
|
* @param params : the object with current parameters
|
|
255
247
|
*/
|
|
256
248
|
doLookup(params) {
|
|
257
|
-
if (this.
|
|
249
|
+
if (this.dialogData.canLookup) {
|
|
258
250
|
this.lookupParams = params;
|
|
259
251
|
this.lookupParams.first = 0;
|
|
260
|
-
this.lookup.emit({ items: this.
|
|
252
|
+
this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });
|
|
261
253
|
}
|
|
262
254
|
}
|
|
263
255
|
/**
|
|
@@ -277,31 +269,33 @@ export class SelectDialogComponent {
|
|
|
277
269
|
* @param e : the MatPaginator PageEvent data
|
|
278
270
|
*/
|
|
279
271
|
doLookupPage(e) {
|
|
280
|
-
if (this.
|
|
272
|
+
if (this.dialogData.canLookup && this.dialogData.canPaginate) {
|
|
281
273
|
this.clearSelection();
|
|
282
|
-
this.lookupParams.first = e.pageIndex * (this.
|
|
283
|
-
this.lookup.emit({ items: this.
|
|
274
|
+
this.lookupParams.first = e.pageIndex * (this.dialogData.pageSize ?? 0);
|
|
275
|
+
this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });
|
|
284
276
|
}
|
|
285
277
|
}
|
|
286
278
|
/**
|
|
287
279
|
* Append
|
|
288
280
|
*/
|
|
289
281
|
doAppend() {
|
|
290
|
-
this.append.emit({ items: this.
|
|
282
|
+
this.append.emit({ items: this.dialogData.items });
|
|
291
283
|
}
|
|
292
284
|
/**
|
|
293
285
|
* Edit
|
|
294
286
|
*/
|
|
295
287
|
doEdit() {
|
|
296
|
-
if (this.selection.selectedOptions.selected)
|
|
288
|
+
if (this.selection.selectedOptions.selected) {
|
|
297
289
|
this.edit.emit(this.selection.selectedOptions.selected[0].value);
|
|
290
|
+
}
|
|
298
291
|
}
|
|
299
292
|
/**
|
|
300
293
|
* View
|
|
301
294
|
*/
|
|
302
295
|
doView() {
|
|
303
|
-
if (this.selection.selectedOptions.selected)
|
|
296
|
+
if (this.selection.selectedOptions.selected) {
|
|
304
297
|
this.view.emit(this.selection.selectedOptions.selected[0].value);
|
|
298
|
+
}
|
|
305
299
|
}
|
|
306
300
|
/**
|
|
307
301
|
* Delete
|
|
@@ -312,17 +306,17 @@ export class SelectDialogComponent {
|
|
|
312
306
|
selectedItems.push(element.value);
|
|
313
307
|
});
|
|
314
308
|
this.delete.emit({
|
|
315
|
-
items: this.
|
|
309
|
+
items: this.dialogData.items,
|
|
316
310
|
selectedItems: selectedItems,
|
|
317
311
|
});
|
|
318
|
-
this.canDelete
|
|
312
|
+
this.canDelete.set(false);
|
|
319
313
|
}
|
|
320
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SelectDialogComponent, deps: [
|
|
321
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: SelectDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", edit: "edit", view: "view", append: "append", delete: "delete", lookup: "lookup", lookupOptions: "lookupOptions", filter: "filter" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "selection", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>{{data.title}}</h2>\r\n<div style=\"padding: 0 24px\">\r\n @if (data.description) {\r\n <div style=\"padding-bottom:10px\" [innerHtml]=\"data.description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill>\r\n @if (!data.canLookupWithOptions) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"data.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" cdkFocusInitial (keyup.Enter)=\"doFilter()\" matInput\r\n title=\"{{data.canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\" [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!data.canLookupWithOptions && data.canLookup && data.lookupFields) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"data.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of data.lookupFields; track field) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (data.canLookupWithOptions) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon>Ricerca\r\n </button>\r\n </div>\r\n }\r\n @if (data.canLookup && data.canFilter) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" style=\"white-space:nowrap\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\" color=\"primary\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n }\r\n @if (canEdit || canAppend || canView || canDelete) {\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n @if (data.canAppend) {\r\n <button fxFlexAlign=\"center\" type=\"button\" [disabled]=\"!canAppend\" mat-icon-button color=\"primary\"\r\n (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (data.canEdit) {\r\n <button fxFlexAlign=\"center\" type=\"button\" [disabled]=\"!canEdit\" mat-icon-button color=\"primary\"\r\n (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (data.canView) {\r\n <button fxFlexAlign=\"center\" type=\"button\" [disabled]=\"!canView\" mat-icon-button color=\"primary\"\r\n (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (data.canDelete) {\r\n <button fxFlexAlign=\"center\" type=\"button\" [disabled]=\"!canDelete\" mat-icon-button color=\"primary\"\r\n (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((data.multi || data.header) && data.items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFalyoutGap=\"10px\" fxFill style=\"padding-top: 10px;\">\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n @if (data.multi) {\r\n <mat-checkbox color=\"primary\" (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate\" [checked]=\"selectionMasterChecked\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (data.header) {\r\n <div [innerHtml]=\"data.header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<div mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n @if (data.canLookup && (!data.items || data.items.length == 0)) {\r\n <div style=\"padding:24px; text-align: center\"><i>\r\n @if (!data.emptyMessage) {\r\n <span class=\"item-greyed-1\">Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (data.maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{data.maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"item-greyed-1\" [innerHtml]=\"data.emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\">\r\n @for (item of (data.items | search: (!data.canLookup ? filterText : '')); track item) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\" color=\"primary\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div style=\"padding-left:20px\">\r\n @if (selectionInfo) {\r\n <span class=\"small\">selezione: </span><span class=\"bold\">{{selectionInfo}}</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate) {\r\n <div [hidden]=\"!data.items || data.items.length === 0\">\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"data.pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\"></mat-paginator>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\" [disabled]=\"okDisabled\">\r\n <span>{{data.mustSelect ? data.okCaption : 'CHIUDI'}}</span>\r\n </button>\r\n @if (data.mustSelect) {\r\n <button mat-button mat-dialog-close cdkFocusInitial color=\"primary\">\r\n <span>ANNULLA</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>", styles: [":root{--ars-dialog-info-ok: #388E3C;--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-dialog-info-ok: #4CAF50;--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i14.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i14.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i15.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: SearchFilterPipe, name: "search" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] }); }
|
|
314
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SelectDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
315
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: SelectDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done", edit: "edit", view: "view", append: "append", delete: "delete", lookup: "lookup", lookupOptions: "lookupOptions", filter: "filter" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "selection", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>{{dialogData.title}}</h2>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData.description) {\r\n <div style=\"padding-bottom:10px\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill>\r\n @if (!dialogData.canLookupWithOptions) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" cdkFocusInitial (keyup.Enter)=\"doFilter()\" matInput\r\n title=\"{{dialogData.canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\" [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData.canLookupWithOptions && dialogData.canLookup && dialogData.lookupFields) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData.lookupFields; track field) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData.canLookupWithOptions) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon>Ricerca\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData.canLookup && dialogData.canFilter) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" style=\"white-space:nowrap\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\" color=\"primary\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n @if (canAppend()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((dialogData.multi || dialogData.header) && dialogData.items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFalyoutGap=\"10px\" fxFill style=\"padding-top: 10px;\">\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n @if (dialogData.multi) {\r\n <mat-checkbox color=\"primary\" (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData.header) {\r\n <div [innerHtml]=\"dialogData.header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<div mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData.canLookup && (!dialogData.items || dialogData.items.length == 0)) {\r\n <div style=\"padding:24px; text-align: center\"><i>\r\n @if (!dialogData.emptyMessage) {\r\n <span class=\"item-greyed-1\">Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData.maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData.maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"item-greyed-1\" [innerHtml]=\"dialogData.emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\">\r\n @for (item of (dialogData.items | search: (!dialogData.canLookup ? filterText : '')); track item) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\" color=\"primary\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div style=\"padding-left:20px\">\r\n @if (selectionInfo) {\r\n <span class=\"small\">selezione: </span><span class=\"bold\">{{selectionInfo}}</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate) {\r\n <div [hidden]=\"!dialogData.items || dialogData.items.length === 0\">\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData.pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\"></mat-paginator>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\" [disabled]=\"okDisabled\">\r\n <span>{{dialogData.mustSelect ? dialogData.okCaption : 'CHIUDI'}}</span>\r\n </button>\r\n @if (dialogData.mustSelect) {\r\n <button mat-button mat-dialog-close cdkFocusInitial color=\"primary\">\r\n <span>ANNULLA</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>", styles: [":root{--ars-dialog-info-ok: #388E3C;--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-dialog-info-ok: #4CAF50;--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i13.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i13.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i14.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: SearchFilterPipe, name: "search" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
322
316
|
}
|
|
323
317
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SelectDialogComponent, decorators: [{
|
|
324
318
|
type: Component,
|
|
325
|
-
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, imports: [
|
|
319
|
+
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
326
320
|
MatDialogTitle,
|
|
327
321
|
FlexModule,
|
|
328
322
|
ExtendedModule,
|
|
@@ -344,11 +338,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
344
338
|
MatPaginatorModule,
|
|
345
339
|
SearchFilterPipe,
|
|
346
340
|
SafeHtmlPipe
|
|
347
|
-
], template: "<h2 mat-dialog-title>{{
|
|
348
|
-
}],
|
|
349
|
-
type: Inject,
|
|
350
|
-
args: [MAT_DIALOG_DATA]
|
|
351
|
-
}] }], propDecorators: { paginator: [{
|
|
341
|
+
], template: "<h2 mat-dialog-title>{{dialogData.title}}</h2>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData.description) {\r\n <div style=\"padding-bottom:10px\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill>\r\n @if (!dialogData.canLookupWithOptions) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" cdkFocusInitial (keyup.Enter)=\"doFilter()\" matInput\r\n title=\"{{dialogData.canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\" [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData.canLookupWithOptions && dialogData.canLookup && dialogData.lookupFields) {\r\n <div fxFlex=\"100\">\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData.lookupFields; track field) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData.canLookupWithOptions) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon>Ricerca\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData.canLookup && dialogData.canFilter) {\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" style=\"white-space:nowrap\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\" color=\"primary\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n @if (canAppend()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\"\r\n (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((dialogData.multi || dialogData.header) && dialogData.items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFalyoutGap=\"10px\" fxFill style=\"padding-top: 10px;\">\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n @if (dialogData.multi) {\r\n <mat-checkbox color=\"primary\" (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData.header) {\r\n <div [innerHtml]=\"dialogData.header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<div mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData.canLookup && (!dialogData.items || dialogData.items.length == 0)) {\r\n <div style=\"padding:24px; text-align: center\"><i>\r\n @if (!dialogData.emptyMessage) {\r\n <span class=\"item-greyed-1\">Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData.maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData.maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"item-greyed-1\" [innerHtml]=\"dialogData.emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\">\r\n @for (item of (dialogData.items | search: (!dialogData.canLookup ? filterText : '')); track item) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\" color=\"primary\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div style=\"padding-left:20px\">\r\n @if (selectionInfo) {\r\n <span class=\"small\">selezione: </span><span class=\"bold\">{{selectionInfo}}</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate) {\r\n <div [hidden]=\"!dialogData.items || dialogData.items.length === 0\">\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData.pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\"></mat-paginator>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\" [disabled]=\"okDisabled\">\r\n <span>{{dialogData.mustSelect ? dialogData.okCaption : 'CHIUDI'}}</span>\r\n </button>\r\n @if (dialogData.mustSelect) {\r\n <button mat-button mat-dialog-close cdkFocusInitial color=\"primary\">\r\n <span>ANNULLA</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>", styles: [":root{--ars-dialog-info-ok: #388E3C;--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-dialog-info-ok: #4CAF50;--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-dialog-info-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}\n"] }]
|
|
342
|
+
}], propDecorators: { paginator: [{
|
|
352
343
|
type: ViewChild,
|
|
353
344
|
args: ['paginator']
|
|
354
345
|
}], selection: [{
|
|
@@ -371,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
371
362
|
}], filter: [{
|
|
372
363
|
type: Output
|
|
373
364
|
}] } });
|
|
374
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZWxlY3Qvc2VsZWN0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZWxlY3Qvc2VsZWN0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0ksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3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QUFXO2dCQUVaLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCwgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94XCI7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlclwiO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSwgTWF0U2VsZWN0aW9uTGlzdCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9saXN0XCI7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RcIjtcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSwgU2VhcmNoRmlsdGVyUGlwZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdERpYWxvZ0FwcGVuZCxcclxuICBTZWxlY3REaWFsb2dEYXRhLFxyXG4gIFNlbGVjdERpYWxvZ0RlbGV0ZSxcclxuICBTZWxlY3REaWFsb2dMb29rdXAsXHJcbiAgU2VsZWN0RGlhbG9nUmVzdWx0LFxyXG4gIFNlbGVjdGFibGVJdGVtLFxyXG59IGZyb20gXCIuLi8uLi9kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tIFwiQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXhcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VsZWN0LWRpYWxvZy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9zZWxlY3QtZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgRXh0ZW5kZWRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdExpc3RNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgTWF0RGlhbG9nQ2xvc2UsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBTZWFyY2hGaWx0ZXJQaXBlLFxyXG4gICAgU2FmZUh0bWxQaXBlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdG9yJykgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3Rpb25cIikgc2VsZWN0aW9uITogTWF0U2VsZWN0aW9uTGlzdDtcclxuXHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdERpYWxvZ1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0YWJsZUl0ZW0+KCk7XHJcbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGFibGVJdGVtPigpO1xyXG4gIEBPdXRwdXQoKSBhcHBlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdERpYWxvZ0FwcGVuZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3REaWFsb2dEZWxldGU+KCk7XHJcbiAgQE91dHB1dCgpIGxvb2t1cCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0RGlhbG9nTG9va3VwPigpO1xyXG4gIEBPdXRwdXQoKSBsb29rdXBPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBkYXRhOiBTZWxlY3REaWFsb2dEYXRhO1xyXG4gIGNhbkVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYW5WaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuQXBwZW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuRGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuUGFnaW5hdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gSGFuZGxlIHN1Ym1pdCBidXR0b24gYWN0aXZpdHlcclxuICBva0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVXNlZCBmb3IgYXJyYXkgZmlsdGVyaW5nXHJcbiAgZmlsdGVyVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBmaWx0ZXJPcHRpb25zOiBhbnkgPSBbXTtcclxuICBmaWx0ZXJPcHRpb25zSW5mbzogc3RyaW5nID0gXCJUdXR0b1wiO1xyXG5cclxuICAvLyBVc2VkIHRvIHNpbmNyb25pemUgbG9va3VwIGZpZWxkcyBhbmQgcGFyYW1zXHJcbiAgbG9va3VwRmllbGQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJpdmF0ZSBsb29rdXBQYXJhbXM6IGFueTtcclxuXHJcblxyXG4gIC8vIFVzZWQgdG8gZGlzcGxheSBzZWxlY3RlZCBlbGVtZW50c1xyXG4gIHNlbGVjdGlvbkluZm86IHN0cmluZyA9IFwiXCI7XHJcbiAgc2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGlvbk1hc3RlckNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBwcml2YXRlICRicm9hZGNhc3Q6IEJyb2FkY2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNlbGVjdERpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgX2RhdGE6IFNlbGVjdERpYWxvZ0RhdGFcclxuICApIHtcclxuICAgIHRoaXMuZGF0YSA9IF9kYXRhIHx8IHsgYXBwZWFyYW5jZTogJ291dGxpbmUnLCB0aXRsZTogJ1NlbGV6aW9uYScgfTtcclxuICAgIGlmICghdGhpcy5kYXRhLmFwcGVhcmFuY2UpIHRoaXMuZGF0YS5hcHBlYXJhbmNlID0gJ291dGxpbmUnO1xyXG4gICAgaWYgKCF0aGlzLmRhdGEudGl0bGUpIHRoaXMuZGF0YS50aXRsZSA9ICdTZWxlemlvbmEnO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5tdWx0aSAmJiAhdGhpcy5kYXRhLml0ZW1zKSB0aGlzLmRhdGEubXVsdGkgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmRhdGEub2tDYXB0aW9uKSB0aGlzLmRhdGEub2tDYXB0aW9uID0gXCJPS1wiO1xyXG4gICAgdGhpcy5jYW5BcHBlbmQgPSB0aGlzLmRhdGEuY2FuQXBwZW5kO1xyXG4gICAgdGhpcy5jYW5FZGl0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLmNhbkxvb2t1cCkge1xyXG4gICAgICB0aGlzLmRhdGEuaXRlbXMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5sb29rdXBGaWVsZHMgJiYgdGhpcy5kYXRhLmxvb2t1cEZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5sb29rdXBGaWVsZCA9IHRoaXMuZGF0YS5sb29rdXBGaWVsZHNbMF0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YS5jYW5GaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLmRhdGEuZmlsdGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhLmNhblBhZ2luYXRlKSB7XHJcbiAgICAgICAgdGhpcy5jYW5QYWdpbmF0ZSA9IHRoaXMuZGF0YS5jYW5QYWdpbmF0ZTtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5wYWdlU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5kYXRhLnBhZ2VTaXplID0gMTAwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9rRGlzYWJsZWQgPSB0aGlzLmRhdGEubXVzdFNlbGVjdDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gQXBwbHkgZmlsdGVyIGlmIGV4aXN0c1xyXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXIgfHwgdGhpcy5kYXRhLmxvb2t1cE9uSW5pdCkge1xyXG4gICAgICB0aGlzLmRvRmlsdGVyKHRoaXMuZGF0YS5maWx0ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgZXZlcnkgZWxlbWVudCBhcmUgc2VsZWN0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuZGF0YS5pdGVtcy5sZW5ndGhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgZXhpc3RzIGEgc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYXNTZWxlY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5sZW5ndGggPiAwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFzdGVyIHNlbGVjdGlvbiB0b2dnbGVcclxuICAgKi9cclxuICBtYXN0ZXJTZWxlY3Rpb25Ub2dnbGUoYXJnczogYW55KSB7XHJcbiAgICBpZiAoYXJncy5jaGVja2VkKVxyXG4gICAgICAvLyBEZXNlbGVjdCBpZiBub3QgYWxsc2VsZWN0ZWQgc28gdGhhdCB0b2dnbGUgbWFrZXMgdGhlIHJpZ2h0IGNob2ljZVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwoKTtcclxuICAgIGVsc2UgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25NYXN0ZXJDaGVja2VkID0gYXJncy5jaGVja2VkO1xyXG4gICAgdGhpcy5va0Rpc2FibGVkID1cclxuICAgICAgdGhpcy5kYXRhLm11c3RTZWxlY3QgJiZcclxuICAgICAgKCF0aGlzLnNlbGVjdGlvbiB8fCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25JbmZvKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIG9mIGFuIGl0ZW1cclxuICAgKi9cclxuICBzZWxlY3QoZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5tdWx0aSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdEFsbCgpO1xyXG4gICAgICBpZiAoZS5vcHRpb25zPy5sZW5ndGggPiAwKVxyXG4gICAgICAgIGUub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMub2tEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5va0Rpc2FibGVkID1cclxuICAgICAgICB0aGlzLmRhdGEubXVzdFNlbGVjdCAmJlxyXG4gICAgICAgICghdGhpcy5zZWxlY3Rpb24gfHxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5sZW5ndGggPT09IDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBlZGl0b3JzXHJcbiAgICB0aGlzLmNhbkFwcGVuZCA9IHRoaXMuZGF0YS5jYW5BcHBlbmQ7XHJcbiAgICB0aGlzLmNhbkVkaXQgPVxyXG4gICAgICB0aGlzLmRhdGEuY2FuRWRpdCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID09PSAxO1xyXG4gICAgdGhpcy5jYW5WaWV3ID1cclxuICAgICAgdGhpcy5kYXRhLmNhblZpZXcgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24gJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCA9PT0gMTtcclxuICAgIHRoaXMuY2FuRGVsZXRlID1cclxuICAgICAgdGhpcy5kYXRhLmNhbkRlbGV0ZSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuc2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZSA9XHJcbiAgICAgICF0aGlzLmlzQWxsU2VsZWN0ZWQoKSAmJiB0aGlzLmhhc1NlbGVjdGlvbigpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25NYXN0ZXJDaGVja2VkID0gdGhpcy5oYXNTZWxlY3Rpb24oKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHNlbGVjdGlvbiBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb25JbmZvKCkge1xyXG4gICAgLy8gVXBkYXRlIHNlbGVjdGlvbiBpbmZvXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5kYXRhLm11bHRpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5mbyA9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCArXHJcbiAgICAgICAgXCIgLyBcIiArXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ub3B0aW9ucy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbkluZm8gPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBjdXJyZW50IHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25NYXN0ZXJJbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hc3RlckNoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkluZm8gPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VibWl0IHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIG9rKCkge1xyXG4gICAgaWYgKCF0aGlzLm9rRGlzYWJsZWQpIHtcclxuICAgICAgLy8gTXVsdGkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaChlbGVtZW50LnZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZG9uZS5lbWl0KHsgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtcyB9KTtcclxuICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZpbHRlclxyXG4gICAqL1xyXG4gIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gXCJcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgZmlsdGVyIG9wdGlvbnNcclxuICAgKi9cclxuICBzaG93RmlsdGVyT3B0aW9ucygpIHtcclxuICAgIGlmICh0aGlzLmxvb2t1cE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5sb29rdXBPcHRpb25zLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlclxyXG4gICAqIEBwYXJhbSB0ZXh0IDogdGhlIHN0cmluZyB0byBmaWx0ZXIgdG9cclxuICAgKi9cclxuICBkb0ZpbHRlcih0ZXh0OiBzdHJpbmcgPSBudWxsLCBlOiBhbnkgPSBudWxsKSB7XHJcbiAgICBpZiAodGV4dCkge1xyXG4gICAgICB0aGlzLmZpbHRlclRleHQgPSB0ZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5jYW5Mb29rdXApIHtcclxuICAgICAgaWYgKCFlIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgICB0aGlzLmxvb2t1cC5lbWl0KHsgaXRlbXM6IHRoaXMuZGF0YS5pdGVtcywgZmlsdGVyOiB0aGlzLmZpbHRlclRleHQgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlciB1c2luZyBmaWx0ZXIgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSBmaWx0ZXJPUHRpb24gOiB0aGUgY3VycmVudCBmaWx0ZXJcclxuICAgKi9cclxuICBkb0ZpbHRlckJ5T3B0aW9ucyhmaWx0ZXJPcHRpb246IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jYW5Mb29rdXAgJiYgdGhpcy5kYXRhLmNhbkZpbHRlcikge1xyXG4gICAgICB0aGlzLmZpbHRlci5lbWl0KHtcclxuICAgICAgICBpdGVtczogdGhpcy5kYXRhLml0ZW1zLFxyXG4gICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJUZXh0LFxyXG4gICAgICAgIGZpbHRlck9wdGlvbjogZmlsdGVyT3B0aW9uLFxyXG4gICAgICAgIG93bmVyOiB0aGlzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlclxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgb2JqZWN0IHdpdGggY3VycmVudCBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgZG9Mb29rdXAocGFyYW1zOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuY2FuTG9va3VwKSB7XHJcbiAgICAgIHRoaXMubG9va3VwUGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICB0aGlzLmxvb2t1cFBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgIHRoaXMubG9va3VwLmVtaXQoeyBpdGVtczogdGhpcy5kYXRhLml0ZW1zLCBwYXJhbXM6IHRoaXMubG9va3VwUGFyYW1zLCBvd25lcjogdGhpcyB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbG9va3VwIHBhZ2luYXRyb1xyXG4gICAqIEBwYXJhbSB0b3RhbCA6IHRoZSBuZXcgdG90YWwgaXRlbXNcclxuICAgKi9cclxuICB1cGRhdGVMb29rdXBQYWdpbmF0b3IodG90YWw6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuY2FuUGFnaW5hdGUpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnBhZ2luYXRvci5sZW5ndGggPSB0b3RhbCA/PyAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEFwcGx5IGZpbHRlclxyXG4gICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgZG9Mb29rdXBQYWdlKGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jYW5Mb29rdXAgJiYgdGhpcy5kYXRhLmNhblBhZ2luYXRlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy5sb29rdXBQYXJhbXMuZmlyc3QgPSBlLnBhZ2VJbmRleCAqICh0aGlzLmRhdGEucGFnZVNpemUgPz8gMCk7XHJcbiAgICAgIHRoaXMubG9va3VwLmVtaXQoeyBpdGVtczogdGhpcy5kYXRhLml0ZW1zLCBwYXJhbXM6IHRoaXMubG9va3VwUGFyYW1zLCBvd25lcjogdGhpcyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZFxyXG4gICAqL1xyXG4gIGRvQXBwZW5kKCkge1xyXG4gICAgdGhpcy5hcHBlbmQuZW1pdCh7IGl0ZW1zOiB0aGlzLmRhdGEuaXRlbXMgfSBhcyBTZWxlY3REaWFsb2dBcHBlbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRWRpdFxyXG4gICAqL1xyXG4gIGRvRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQpXHJcbiAgICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZFswXS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWaWV3XHJcbiAgICovXHJcbiAgZG9WaWV3KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZClcclxuICAgICAgdGhpcy52aWV3LmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkWzBdLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZVxyXG4gICAqL1xyXG4gIGRvRGVsZXRlKCkge1xyXG4gICAgbGV0IHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKGVsZW1lbnQudmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRlbGV0ZS5lbWl0KHtcclxuICAgICAgaXRlbXM6IHRoaXMuZGF0YS5pdGVtcyxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtcyxcclxuICAgIH0gYXMgU2VsZWN0RGlhbG9nRGVsZXRlKTtcclxuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7ZGF0YS50aXRsZX19PC9oMj5cclxuPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMjRweFwiPlxyXG4gIEBpZiAoZGF0YS5kZXNjcmlwdGlvbikge1xyXG4gIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbToxMHB4XCIgW2lubmVySHRtbF09XCJkYXRhLmRlc2NyaXB0aW9uIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICB9XHJcbiAgPGRpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeEZpbGw+XHJcbiAgICAgIEBpZiAoIWRhdGEuY2FuTG9va3VwV2l0aE9wdGlvbnMpIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9J3dpZHRoOjEwMCUnIFthcHBlYXJhbmNlXT1cImRhdGEuYXBwZWFyYW5jZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q2VyY2EuLi48L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNka0ZvY3VzSW5pdGlhbCAoa2V5dXAuRW50ZXIpPVwiZG9GaWx0ZXIoKVwiIG1hdElucHV0XHJcbiAgICAgICAgICAgIHRpdGxlPVwie3tkYXRhLmNhbkxvb2t1cCA/ICdEaWdpdGEgaWwgdGVzdG8gZSBwcmVtaSBpbnZpbycgOiAnRGlnaXRhIGlsIHRlc3RvJ319XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCI+XHJcbiAgICAgICAgICBAaWYgKGZpbHRlclRleHQpIHtcclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJjbGVhckZpbHRlcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKCFkYXRhLmNhbkxvb2t1cFdpdGhPcHRpb25zICYmIGRhdGEuY2FuTG9va3VwICYmIGRhdGEubG9va3VwRmllbGRzKSB7XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPSd3aWR0aDoxMDAlJyBbYXBwZWFyYW5jZV09XCJkYXRhLmFwcGVhcmFuY2VcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNvbWUuLi48L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFsodmFsdWUpXT1cImxvb2t1cEZpZWxkXCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGRhdGEubG9va3VwRmllbGRzOyB0cmFjayBmaWVsZCkge1xyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmllbGQudmFsdWVcIj5cclxuICAgICAgICAgICAgICB7e2ZpZWxkLm5hbWV9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGRhdGEuY2FuTG9va3VwV2l0aE9wdGlvbnMpIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gYXJpYS1sYWJlbD1cIlJpY2VyY2FcIiAoY2xpY2spPVwic2hvd0ZpbHRlck9wdGlvbnMoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+UmljZXJjYVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGRhdGEuY2FuTG9va3VwICYmIGRhdGEuY2FuRmlsdGVyKSB7XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXBcIj5cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gbWF0VG9vbHRpcD1cIkZpbHRyYVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ZpbHRyYSdcIlxyXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVGaWx0ZXJcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfYWx0PC9tYXQtaWNvbj4ge3tmaWx0ZXJPcHRpb25zSW5mb319IDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5cclxuICAgICAgICAgICAgYXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8bWF0LW1lbnUgI21lbnVGaWx0ZXI9XCJtYXRNZW51XCIgY2xhc3M9XCJtYXQtbWVudS0zMDBcIj5cclxuICAgICAgICAgIEBmb3IgKGYgb2YgZmlsdGVyT3B0aW9uczsgdHJhY2sgZikge1xyXG5cclxuICAgICAgICAgIEBpZiAoZi5kaXZpZGVyKSB7XHJcbiAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBpZiAoZi5ncm91cE5hbWUpIHtcclxuICAgICAgICAgIDxzcGFuIHN0eWxlPSdmb250LXNpemU6c21hbGw7IHBhZGRpbmc6IDJweCA0cHg7Jz48aT48Yj57e2YuZ3JvdXBOYW1lfX08L2I+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBpZiAoIWYuZ3JvdXBOYW1lICYmICFmLmRpdmlkZXIpIHtcclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZG9GaWx0ZXJCeU9wdGlvbnMoZilcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImYuZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgQGlmIChmLnJhZGlvICYmIGYudmFsdWUpIHtcclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6NDBweFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8bWF0LWljb24+e3tmLmljb259fTwvbWF0LWljb24+IHt7Zi50aXRsZX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChjYW5FZGl0IHx8IGNhbkFwcGVuZCB8fCBjYW5WaWV3IHx8IGNhbkRlbGV0ZSkge1xyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dEFsaWduPVwiZW5kXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXBcIj5cclxuICAgICAgICBAaWYgKGRhdGEuY2FuQXBwZW5kKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWNhbkFwcGVuZFwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRvQXBwZW5kKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiQWdnaXVuZ2lcIiBtYXRUb29sdGlwPVwiQWdnaXVuZ2lcIj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKGRhdGEuY2FuRWRpdCkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFjYW5FZGl0XCIgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZG9FZGl0KClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiTW9kaWZpY2FcIiBtYXRUb29sdGlwPVwiTW9kaWZpY2FcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChkYXRhLmNhblZpZXcpIHtcclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhY2FuVmlld1wiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRvVmlldygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gYXJpYS1sYWJlbD1cIk1vc3RyYVwiIG1hdFRvb2x0aXA9XCJNb3N0cmFcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChkYXRhLmNhbkRlbGV0ZSkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFjYW5EZWxldGVcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJkb0RlbGV0ZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gYXJpYS1sYWJlbD1cIkVsaW1pbmFcIiBtYXRUb29sdGlwPVwiRWxpbWluYVwiPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgQGlmICgoZGF0YS5tdWx0aSB8fCBkYXRhLmhlYWRlcikgJiYgZGF0YS5pdGVtcz8ubGVuZ3RoID4gMCkge1xyXG4gIDxkaXY+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhGYWx5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxMHB4O1wiPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjcycHhcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7XCI+XHJcbiAgICAgICAgQGlmIChkYXRhLm11bHRpKSB7XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclNlbGVjdGlvblRvZ2dsZSgkZXZlbnQpIDogbnVsbFwiXHJcbiAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25NYXN0ZXJJbmRldGVybWluYXRlXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uTWFzdGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlemlvbmEvZGVzZWxlemlvbmEgdHV0dG8nXCIgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0b1wiPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICBAaWYgKGRhdGEuaGVhZGVyKSB7XHJcbiAgICAgICAgPGRpdiAgW2lubmVySHRtbF09XCJkYXRhLmhlYWRlciB8IHNhZmVIdG1sXCI+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICBAaWYgKGRhdGEuY2FuTG9va3VwICYmICghZGF0YS5pdGVtcyB8fCBkYXRhLml0ZW1zLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6MjRweDsgdGV4dC1hbGlnbjogY2VudGVyXCI+PGk+XHJcbiAgICAgICAgQGlmICghZGF0YS5lbXB0eU1lc3NhZ2UpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tZ3JleWVkLTFcIj5OZXNzdW4gZWxlbWVudG8gZGEgdmlzdWFsaXp6YXJlLjxicj5Fc2VndWkgdW5hIG51b3ZhIHJpY2VyY2EgbyBtb2RpZmljYSBxdWVsbGFcclxuICAgICAgICAgIGVzaXN0ZW50ZS5cclxuICAgICAgICAgIEBpZiAoZGF0YS5tYXhJdGVtcyA+IDApIHtcclxuICAgICAgICAgIDxzcGFuPlNhcmFubm8gbW9zdHJhdGkgYWwgbWFzc2ltbyB7e2RhdGEubWF4SXRlbXN9fSBlbGVtZW50aS48L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1ncmV5ZWQtMVwiIFtpbm5lckh0bWxdPVwiZGF0YS5lbXB0eU1lc3NhZ2UgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvaT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPG1hdC1zZWxlY3Rpb24tbGlzdCAjc2VsZWN0aW9uIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIiBkZW5zZSBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPVwidHJ1ZVwiPlxyXG4gICAgICBAZm9yIChpdGVtIG9mIChkYXRhLml0ZW1zIHwgc2VhcmNoOiAoIWRhdGEuY2FuTG9va3VwID8gZmlsdGVyVGV4dCA6ICcnKSk7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgPG1hdC1saXN0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiIFtzZWxlY3RlZF09XCJpdGVtLnNlbGVjdGVkXCIgY2hlY2tib3hQb3NpdGlvbj1cImJlZm9yZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJpdGVtLnRlbXBsYXRlIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6MjBweFwiPlxyXG4gICAgICAgIEBpZiAoc2VsZWN0aW9uSW5mbykge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGxcIj5zZWxlemlvbmU6IDwvc3Bhbj48c3BhbiBjbGFzcz1cImJvbGRcIj57e3NlbGVjdGlvbkluZm99fTwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgQGlmIChjYW5QYWdpbmF0ZSkge1xyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCIhZGF0YS5pdGVtcyB8fCBkYXRhLml0ZW1zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbcGFnZVNpemVdPVwiZGF0YS5wYWdlU2l6ZVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgKHBhZ2UpPVwiZG9Mb29rdXBQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBmeEZpbGw+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvaygpXCIgIFtkaXNhYmxlZF09XCJva0Rpc2FibGVkXCI+XHJcbiAgICAgICAgPHNwYW4+e3tkYXRhLm11c3RTZWxlY3QgPyBkYXRhLm9rQ2FwdGlvbiA6ICdDSElVREknfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBAaWYgKGRhdGEubXVzdFNlbGVjdCkge1xyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBjZGtGb2N1c0luaXRpYWwgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuPkFOTlVMTEE8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZWxlY3Qvc2VsZWN0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvZGlhbG9ncy9zZWxlY3Qvc2VsZWN0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7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QyxZQUFZLEVBQUUsRUFBRSxtQkFHM0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLFlBQVk7cUJBQ2I7OEJBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDRSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBS1osSUFBSTtzQkFBYixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGluamVjdCxcclxuICBzaWduYWxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94XCI7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlclwiO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSwgTWF0U2VsZWN0aW9uTGlzdCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9saXN0XCI7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RcIjtcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSwgU2VhcmNoRmlsdGVyUGlwZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdERpYWxvZ0FwcGVuZCxcclxuICBTZWxlY3REaWFsb2dEYXRhLFxyXG4gIFNlbGVjdERpYWxvZ0RlbGV0ZSxcclxuICBTZWxlY3REaWFsb2dMb29rdXAsXHJcbiAgU2VsZWN0RGlhbG9nUmVzdWx0LFxyXG4gIFNlbGVjdGFibGVJdGVtLFxyXG59IGZyb20gXCIuLi8uLi9kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFeHRlbmRlZE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tIFwiQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXhcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VsZWN0LWRpYWxvZy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9zZWxlY3QtZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgRXh0ZW5kZWRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdExpc3RNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgTWF0RGlhbG9nQ2xvc2UsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBTZWFyY2hGaWx0ZXJQaXBlLFxyXG4gICAgU2FmZUh0bWxQaXBlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdG9yJykgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3Rpb25cIikgc2VsZWN0aW9uITogTWF0U2VsZWN0aW9uTGlzdDtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPFNlbGVjdERpYWxvZ0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBTZWxlY3REaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgPz8geyBhcHBlYXJhbmNlOiAnb3V0bGluZScsIHRpdGxlOiAnU2VsZXppb25hJyB9O1xyXG5cclxuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0RGlhbG9nUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RhYmxlSXRlbT4oKTtcclxuICBAT3V0cHV0KCkgdmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0YWJsZUl0ZW0+KCk7XHJcbiAgQE91dHB1dCgpIGFwcGVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0RGlhbG9nQXBwZW5kPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdERpYWxvZ0RlbGV0ZT4oKTtcclxuICBAT3V0cHV0KCkgbG9va3VwID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3REaWFsb2dMb29rdXA+KCk7XHJcbiAgQE91dHB1dCgpIGxvb2t1cE9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHByb3RlY3RlZCBjYW5FZGl0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgY2FuVmlldyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIGNhbkFwcGVuZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIGNhbkRlbGV0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIGNhblBhZ2luYXRlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLy8gSGFuZGxlIHN1Ym1pdCBidXR0b24gYWN0aXZpdHlcclxuICBwcm90ZWN0ZWQgb2tEaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgLy8gVXNlZCBmb3IgYXJyYXkgZmlsdGVyaW5nXHJcbiAgcHJvdGVjdGVkIGZpbHRlclRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJvdGVjdGVkIGZpbHRlck9wdGlvbnM6IGFueSA9IFtdO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJPcHRpb25zSW5mbzogc3RyaW5nID0gXCJUdXR0b1wiO1xyXG5cclxuICAvLyBVc2VkIHRvIHNpbmNyb25pemUgbG9va3VwIGZpZWxkcyBhbmQgcGFyYW1zXHJcbiAgcHJvdGVjdGVkIGxvb2t1cEZpZWxkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHByaXZhdGUgbG9va3VwUGFyYW1zOiBhbnk7XHJcblxyXG5cclxuICAvLyBVc2VkIHRvIGRpc3BsYXkgc2VsZWN0ZWQgZWxlbWVudHNcclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uSW5mbzogc3RyaW5nID0gXCJcIjtcclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHNlbGVjdGlvbk1hc3RlckNoZWNrZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLmFwcGVhcmFuY2UpIHtcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhLmFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YS50aXRsZSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEudGl0bGUgPSAnU2VsZXppb25hJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubXVsdGkgJiYgIXRoaXMuZGlhbG9nRGF0YS5pdGVtcykge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEubXVsdGkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEub2tDYXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YS5va0NhcHRpb24gPSBcIk9rXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbkFwcGVuZC5zZXQodGhpcy5kaWFsb2dEYXRhLmNhbkFwcGVuZCk7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmNhbkxvb2t1cCkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEuaXRlbXMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5sb29rdXBGaWVsZHMgJiYgdGhpcy5kaWFsb2dEYXRhLmxvb2t1cEZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5sb29rdXBGaWVsZCA9IHRoaXMuZGlhbG9nRGF0YS5sb29rdXBGaWVsZHNbMF0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5jYW5GaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLmRpYWxvZ0RhdGEuZmlsdGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmNhblBhZ2luYXRlKSB7XHJcbiAgICAgICAgdGhpcy5jYW5QYWdpbmF0ZS5zZXQodGhpcy5kaWFsb2dEYXRhLmNhblBhZ2luYXRlKTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YS5wYWdlU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dEYXRhLnBhZ2VTaXplID0gMTAwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9rRGlzYWJsZWQuc2V0KHRoaXMuZGlhbG9nRGF0YS5tdXN0U2VsZWN0KTtcclxuXHJcbiAgICAvLyBBcHBseSBmaWx0ZXIgaWYgZXhpc3RzXHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmZpbHRlciB8fCB0aGlzLmRpYWxvZ0RhdGEubG9va3VwT25Jbml0KSB7XHJcbiAgICAgIHRoaXMuZG9GaWx0ZXIodGhpcy5kaWFsb2dEYXRhLmZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBldmVyeSBlbGVtZW50IGFyZSBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5kaWFsb2dEYXRhLml0ZW1zLmxlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBleGlzdHMgYSBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIGhhc1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCA+IDBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXN0ZXIgc2VsZWN0aW9uIHRvZ2dsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBtYXN0ZXJTZWxlY3Rpb25Ub2dnbGUoYXJnczogYW55KSB7XHJcbiAgICBpZiAoYXJncy5jaGVja2VkKVxyXG4gICAgICAvLyBEZXNlbGVjdCBpZiBub3QgYWxsc2VsZWN0ZWQgc28gdGhhdCB0b2dnbGUgbWFrZXMgdGhlIHJpZ2h0IGNob2ljZVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwoKTtcclxuICAgIGVsc2UgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25NYXN0ZXJDaGVja2VkID0gYXJncy5jaGVja2VkO1xyXG4gICAgdGhpcy5va0Rpc2FibGVkLnNldChcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhLm11c3RTZWxlY3QgJiZcclxuICAgICAgKCF0aGlzLnNlbGVjdGlvbiB8fCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkluZm8oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gb2YgYW4gaXRlbVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZWxlY3QoZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuZGlhbG9nRGF0YS5tdWx0aSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdEFsbCgpO1xyXG4gICAgICBpZiAoZS5vcHRpb25zPy5sZW5ndGggPiAwKVxyXG4gICAgICAgIGUub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMub2tEaXNhYmxlZC5zZXQoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5va0Rpc2FibGVkLnNldChcclxuICAgICAgICB0aGlzLmRpYWxvZ0RhdGEubXVzdFNlbGVjdCAmJlxyXG4gICAgICAgICghdGhpcy5zZWxlY3Rpb24gfHxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5sZW5ndGggPT09IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgZWRpdG9yc1xyXG4gICAgdGhpcy5jYW5BcHBlbmQuc2V0KHRoaXMuZGlhbG9nRGF0YS5jYW5BcHBlbmQpO1xyXG4gICAgdGhpcy5jYW5FZGl0LnNldChcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhLmNhbkVkaXQgJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24gJiZcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCA9PT0gMSk7XHJcbiAgICB0aGlzLmNhblZpZXcuc2V0KFxyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEuY2FuVmlldyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID09PSAxKTtcclxuICAgIHRoaXMuY2FuRGVsZXRlLnNldChcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhLmNhbkRlbGV0ZSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoID4gMCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hc3RlckluZGV0ZXJtaW5hdGUuc2V0KFxyXG4gICAgICAhdGhpcy5pc0FsbFNlbGVjdGVkKCkgJiYgdGhpcy5oYXNTZWxlY3Rpb24oKSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hc3RlckNoZWNrZWQuc2V0KHRoaXMuaGFzU2VsZWN0aW9uKCkpO1xyXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25JbmZvKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc2VsZWN0aW9uIGluZm9cclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbkluZm8oKSB7XHJcbiAgICAvLyBVcGRhdGUgc2VsZWN0aW9uIGluZm9cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiAmJiB0aGlzLmRpYWxvZ0RhdGEubXVsdGkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb25JbmZvID1cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoICtcclxuICAgICAgICBcIiAvIFwiICtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5vcHRpb25zLmxlbmd0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5mbyA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBjdXJyZW50IHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25NYXN0ZXJJbmRldGVybWluYXRlLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk1hc3RlckNoZWNrZWQuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkluZm8gPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VibWl0IHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvaygpIHtcclxuICAgIGlmICghdGhpcy5va0Rpc2FibGVkKSB7XHJcbiAgICAgIC8vIE11bHRpIHNlbGVjdGlvblxyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBhbnkgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goZWxlbWVudC52YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmRvbmUuZW1pdCh7IHNlbGVjdGVkSXRlbXM6IHNlbGVjdGVkSXRlbXMgfSk7XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBmaWx0ZXJcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlclRleHQgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBmaWx0ZXIgb3B0aW9uc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzaG93RmlsdGVyT3B0aW9ucygpIHtcclxuICAgIGlmICh0aGlzLmxvb2t1cE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5sb29rdXBPcHRpb25zLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlclxyXG4gICAqIEBwYXJhbSB0ZXh0IDogdGhlIHN0cmluZyB0byBmaWx0ZXIgdG9cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG9GaWx0ZXIodGV4dDogc3RyaW5nID0gbnVsbCwgZTogYW55ID0gbnVsbCkge1xyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gdGV4dDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuY2FuTG9va3VwKSB7XHJcbiAgICAgIGlmICghZSB8fCBlLmtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgICAgdGhpcy5sb29rdXAuZW1pdCh7IGl0ZW1zOiB0aGlzLmRpYWxvZ0RhdGEuaXRlbXMsIGZpbHRlcjogdGhpcy5maWx0ZXJUZXh0IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSBmaWx0ZXIgdXNpbmcgZmlsdGVyIG9wdGlvbnNcclxuICAgKiBAcGFyYW0gZmlsdGVyT1B0aW9uIDogdGhlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGRvRmlsdGVyQnlPcHRpb25zKGZpbHRlck9wdGlvbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmNhbkxvb2t1cCAmJiB0aGlzLmRpYWxvZ0RhdGEuY2FuRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyLmVtaXQoe1xyXG4gICAgICAgIGl0ZW1zOiB0aGlzLmRpYWxvZ0RhdGEuaXRlbXMsXHJcbiAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlclRleHQsXHJcbiAgICAgICAgZmlsdGVyT3B0aW9uOiBmaWx0ZXJPcHRpb24sXHJcbiAgICAgICAgb3duZXI6IHRoaXMsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgZmlsdGVyXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHRoZSBvYmplY3Qgd2l0aCBjdXJyZW50IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBkb0xvb2t1cChwYXJhbXM6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5jYW5Mb29rdXApIHtcclxuICAgICAgdGhpcy5sb29rdXBQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgIHRoaXMubG9va3VwUGFyYW1zLmZpcnN0ID0gMDtcclxuICAgICAgdGhpcy5sb29rdXAuZW1pdCh7IGl0ZW1zOiB0aGlzLmRpYWxvZ0RhdGEuaXRlbXMsIHBhcmFtczogdGhpcy5sb29rdXBQYXJhbXMsIG93bmVyOiB0aGlzIH0pO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBsb29rdXAgcGFnaW5hdHJvXHJcbiAgICogQHBhcmFtIHRvdGFsIDogdGhlIG5ldyB0b3RhbCBpdGVtc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVMb29rdXBQYWdpbmF0b3IodG90YWw6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuY2FuUGFnaW5hdGUpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnBhZ2luYXRvci5sZW5ndGggPSB0b3RhbCA/PyAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEFwcGx5IGZpbHRlclxyXG4gICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgKi9cclxuICBkb0xvb2t1cFBhZ2UoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmNhbkxvb2t1cCAmJiB0aGlzLmRpYWxvZ0RhdGEuY2FuUGFnaW5hdGUpIHtcclxuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICB0aGlzLmxvb2t1cFBhcmFtcy5maXJzdCA9IGUucGFnZUluZGV4ICogKHRoaXMuZGlhbG9nRGF0YS5wYWdlU2l6ZSA/PyAwKTtcclxuICAgICAgdGhpcy5sb29rdXAuZW1pdCh7IGl0ZW1zOiB0aGlzLmRpYWxvZ0RhdGEuaXRlbXMsIHBhcmFtczogdGhpcy5sb29rdXBQYXJhbXMsIG93bmVyOiB0aGlzIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kXHJcbiAgICovXHJcbiAgZG9BcHBlbmQoKSB7XHJcbiAgICB0aGlzLmFwcGVuZC5lbWl0KHsgaXRlbXM6IHRoaXMuZGlhbG9nRGF0YS5pdGVtcyB9IGFzIFNlbGVjdERpYWxvZ0FwcGVuZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFZGl0XHJcbiAgICovXHJcbiAgZG9FZGl0KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZCl7XHJcbiAgICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZFswXS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWaWV3XHJcbiAgICovXHJcbiAgZG9WaWV3KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnZpZXcuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWRbMF0udmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlXHJcbiAgICovXHJcbiAgZG9EZWxldGUoKSB7XHJcbiAgICBsZXQgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goZWxlbWVudC52YWx1ZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGVsZXRlLmVtaXQoe1xyXG4gICAgICBpdGVtczogdGhpcy5kaWFsb2dEYXRhLml0ZW1zLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgfSBhcyBTZWxlY3REaWFsb2dEZWxldGUpO1xyXG4gICAgdGhpcy5jYW5EZWxldGUuc2V0KGZhbHNlKTtcclxuICB9XHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3tkaWFsb2dEYXRhLnRpdGxlfX08L2gyPlxyXG48ZGl2IHN0eWxlPVwicGFkZGluZzogMCAyNHB4XCI+XHJcbiAgQGlmIChkaWFsb2dEYXRhLmRlc2NyaXB0aW9uKSB7XHJcbiAgPGRpdiBzdHlsZT1cInBhZGRpbmctYm90dG9tOjEwcHhcIiBbaW5uZXJIdG1sXT1cImRpYWxvZ0RhdGEuZGVzY3JpcHRpb24gfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gIH1cclxuICA8ZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4RmlsbD5cclxuICAgICAgQGlmICghZGlhbG9nRGF0YS5jYW5Mb29rdXBXaXRoT3B0aW9ucykge1xyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT0nd2lkdGg6MTAwJScgW2FwcGVhcmFuY2VdPVwiZGlhbG9nRGF0YS5hcHBlYXJhbmNlXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5DZXJjYS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2RrRm9jdXNJbml0aWFsIChrZXl1cC5FbnRlcik9XCJkb0ZpbHRlcigpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgdGl0bGU9XCJ7e2RpYWxvZ0RhdGEuY2FuTG9va3VwID8gJ0RpZ2l0YSBpbCB0ZXN0byBlIHByZW1pIGludmlvJyA6ICdEaWdpdGEgaWwgdGVzdG8nfX1cIiBbKG5nTW9kZWwpXT1cImZpbHRlclRleHRcIj5cclxuICAgICAgICAgIEBpZiAoZmlsdGVyVGV4dCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoIWRpYWxvZ0RhdGEuY2FuTG9va3VwV2l0aE9wdGlvbnMgJiYgZGlhbG9nRGF0YS5jYW5Mb29rdXAgJiYgZGlhbG9nRGF0YS5sb29rdXBGaWVsZHMpIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9J3dpZHRoOjEwMCUnIFthcHBlYXJhbmNlXT1cImRpYWxvZ0RhdGEuYXBwZWFyYW5jZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q29tZS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwibG9va3VwRmllbGRcIj5cclxuICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgZGlhbG9nRGF0YS5sb29rdXBGaWVsZHM7IHRyYWNrIGZpZWxkKSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIHt7ZmllbGQubmFtZX19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoZGlhbG9nRGF0YS5jYW5Mb29rdXBXaXRoT3B0aW9ucykge1xyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmljZXJjYVwiIChjbGljayk9XCJzaG93RmlsdGVyT3B0aW9ucygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5SaWNlcmNhXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoZGlhbG9nRGF0YS5jYW5Mb29rdXAgJiYgZGlhbG9nRGF0YS5jYW5GaWx0ZXIpIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBzdHlsZT1cIndoaXRlLXNwYWNlOm5vd3JhcFwiPlxyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBtYXRUb29sdGlwPVwiRmlsdHJhXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInRmlsdHJhJ1wiXHJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUZpbHRlclwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9hbHQ8L21hdC1pY29uPiB7e2ZpbHRlck9wdGlvbnNJbmZvfX0gPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1tZW51LWRyb3AtZG93blwiPlxyXG4gICAgICAgICAgICBhcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtbWVudSAjbWVudUZpbHRlcj1cIm1hdE1lbnVcIiBjbGFzcz1cIm1hdC1tZW51LTMwMFwiPlxyXG4gICAgICAgICAgQGZvciAoZiBvZiBmaWx0ZXJPcHRpb25zOyB0cmFjayBmKSB7XHJcblxyXG4gICAgICAgICAgQGlmIChmLmRpdmlkZXIpIHtcclxuICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmIChmLmdyb3VwTmFtZSkge1xyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZTpzbWFsbDsgcGFkZGluZzogMnB4IDRweDsnPjxpPjxiPnt7Zi5ncm91cE5hbWV9fTwvYj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmICghZi5ncm91cE5hbWUgJiYgIWYuZGl2aWRlcikge1xyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkb0ZpbHRlckJ5T3B0aW9ucyhmKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZi5kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICBAaWYgKGYucmFkaW8gJiYgZi52YWx1ZSkge1xyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDo0MHB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj57e2YuaWNvbn19PC9tYXQtaWNvbj4ge3tmLnRpdGxlfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGNhbkVkaXQoKSB8fCBjYW5BcHBlbmQoKSB8fCBjYW5WaWV3KCkgfHwgY2FuRGVsZXRlKCkpIHtcclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6bm93cmFwXCI+XHJcbiAgICAgICAgQGlmIChjYW5BcHBlbmQoKSkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRvQXBwZW5kKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiQWdnaXVuZ2lcIiBtYXRUb29sdGlwPVwiQWdnaXVuZ2lcIj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKGNhbkVkaXQoKSkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZG9FZGl0KClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWxhYmVsPVwiTW9kaWZpY2FcIiBtYXRUb29sdGlwPVwiTW9kaWZpY2FcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5WaWV3KCkpIHtcclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRvVmlldygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gYXJpYS1sYWJlbD1cIk1vc3RyYVwiIG1hdFRvb2x0aXA9XCJNb3N0cmFcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5EZWxldGUoKSkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZG9EZWxldGUoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGFyaWEtbGFiZWw9XCJFbGltaW5hXCIgbWF0VG9vbHRpcD1cIkVsaW1pbmFcIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIEBpZiAoKGRpYWxvZ0RhdGEubXVsdGkgfHwgZGlhbG9nRGF0YS5oZWFkZXIpICYmIGRpYWxvZ0RhdGEuaXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICA8ZGl2PlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4RmFseW91dEdhcD1cIjEwcHhcIiBmeEZpbGwgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCI3MnB4XCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4O1wiPlxyXG4gICAgICAgIEBpZiAoZGlhbG9nRGF0YS5tdWx0aSkge1xyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJTZWxlY3Rpb25Ub2dnbGUoJGV2ZW50KSA6IG51bGxcIlxyXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uTWFzdGVySW5kZXRlcm1pbmF0ZSgpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uTWFzdGVyQ2hlY2tlZCgpXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0bydcIiBtYXRUb29sdGlwPVwiU2VsZXppb25hL2Rlc2VsZXppb25hIHR1dHRvXCI+XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgIEBpZiAoZGlhbG9nRGF0YS5oZWFkZXIpIHtcclxuICAgICAgICA8ZGl2ICBbaW5uZXJIdG1sXT1cImRpYWxvZ0RhdGEuaGVhZGVyIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgIEBpZiAoZGlhbG9nRGF0YS5jYW5Mb29rdXAgJiYgKCFkaWFsb2dEYXRhLml0ZW1zIHx8IGRpYWxvZ0RhdGEuaXRlbXMubGVuZ3RoID09IDApKSB7XHJcbiAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzoyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXJcIj48aT5cclxuICAgICAgICBAaWYgKCFkaWFsb2dEYXRhLmVtcHR5TWVzc2FnZSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1ncmV5ZWQtMVwiPk5lc3N1biBlbGVtZW50byBkYSB2aXN1YWxpenphcmUuPGJyPkVzZWd1aSB1bmEgbnVvdmEgcmljZXJjYSBvIG1vZGlmaWNhIHF1ZWxsYVxyXG4gICAgICAgICAgZXNpc3RlbnRlLlxyXG4gICAgICAgICAgQGlmIChkaWFsb2dEYXRhLm1heEl0ZW1zID4gMCkge1xyXG4gICAgICAgICAgPHNwYW4+U2FyYW5ubyBtb3N0cmF0aSBhbCBtYXNzaW1vIHt7ZGlhbG9nRGF0YS5tYXhJdGVtc319IGVsZW1lbnRpLjwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWdyZXllZC0xXCIgW2lubmVySHRtbF09XCJkaWFsb2dEYXRhLmVtcHR5TWVzc2FnZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0ICNzZWxlY3Rpb24gKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3QoJGV2ZW50KVwiIGRlbnNlIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I9XCJ0cnVlXCI+XHJcbiAgICAgIEBmb3IgKGl0ZW0gb2YgKGRpYWxvZ0RhdGEuaXRlbXMgfCBzZWFyY2g6ICghZGlhbG9nRGF0YS5jYW5Mb29rdXAgPyBmaWx0ZXJUZXh0IDogJycpKTsgdHJhY2sgaXRlbSkge1xyXG4gICAgICA8bWF0LWxpc3Qtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgW3NlbGVjdGVkXT1cIml0ZW0uc2VsZWN0ZWRcIiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIml0ZW0udGVtcGxhdGUgfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICA8L21hdC1saXN0LW9wdGlvbj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDoyMHB4XCI+XHJcbiAgICAgICAgQGlmIChzZWxlY3Rpb25JbmZvKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWFsbFwiPnNlbGV6aW9uZTogPC9zcGFuPjxzcGFuIGNsYXNzPVwiYm9sZFwiPnt7c2VsZWN0aW9uSW5mb319PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICBAaWYgKGNhblBhZ2luYXRlKSB7XHJcbiAgICAgICAgPGRpdiBbaGlkZGVuXT1cIiFkaWFsb2dEYXRhLml0ZW1zIHx8IGRpYWxvZ0RhdGEuaXRlbXMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCJkaWFsb2dEYXRhLnBhZ2VTaXplXCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAocGFnZSk9XCJkb0xvb2t1cFBhZ2UoJGV2ZW50KVwiPjwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGZ4RmlsbD5cclxuICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9rKClcIiAgW2Rpc2FibGVkXT1cIm9rRGlzYWJsZWRcIj5cclxuICAgICAgICA8c3Bhbj57e2RpYWxvZ0RhdGEubXVzdFNlbGVjdCA/IGRpYWxvZ0RhdGEub2tDYXB0aW9uIDogJ0NISVVESSd9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIEBpZiAoZGlhbG9nRGF0YS5tdXN0U2VsZWN0KSB7XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGNka0ZvY3VzSW5pdGlhbCAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgPHNwYW4+QU5OVUxMQTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|