@tiba-spark/client-shared-lib 26.2.0-130 → 26.2.0-141
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/libraries/components/field-label/field-label.component.mjs +5 -2
- package/esm2022/libraries/modules/facility/facility.service.mjs +4 -4
- package/esm2022/libraries/services/modal.service.mjs +135 -112
- package/fesm2022/tiba-spark-client-shared-lib.mjs +140 -114
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/components/field-label/field-label.component.d.ts.map +1 -1
- package/libraries/modules/facility/facility.service.d.ts.map +1 -1
- package/libraries/services/modal.service.d.ts +19 -16
- package/libraries/services/modal.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,171 +1,194 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { createComponent, Injectable } from '@angular/core';
|
|
2
2
|
import { MatDialogConfig } from '@angular/material/dialog';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { first, takeUntil } from 'rxjs/operators';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/material/dialog";
|
|
7
7
|
import * as i2 from "@angular/material/snack-bar";
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const Z_INDEX_FRONT = '1000';
|
|
9
|
+
const Z_INDEX_BACK = '999';
|
|
10
10
|
export class ModalService {
|
|
11
|
-
constructor(dialog, snackBar, appRef,
|
|
11
|
+
constructor(dialog, snackBar, appRef, environmentInjector) {
|
|
12
12
|
this.dialog = dialog;
|
|
13
13
|
this.snackBar = snackBar;
|
|
14
14
|
this.appRef = appRef;
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
this.addOpenModalToList = (dialogId) => this.openModalIds.push(dialogId);
|
|
22
|
-
this.removeOpenModalFromList = (dialogId) => this.openModalIds = this.openModalIds.filter(id => id !== dialogId);
|
|
23
|
-
}
|
|
24
|
-
// enable subscribing to modal opened observable
|
|
15
|
+
this.environmentInjector = environmentInjector;
|
|
16
|
+
this._modalOpened$ = new Subject();
|
|
17
|
+
this._buttonWrapperRefs = {};
|
|
18
|
+
this._minimizedIds = [];
|
|
19
|
+
this._openIds = [];
|
|
20
|
+
}
|
|
25
21
|
onModalOpened() {
|
|
26
|
-
return this.
|
|
22
|
+
return this._modalOpened$.asObservable();
|
|
27
23
|
}
|
|
28
24
|
getOpenDialogs() {
|
|
29
25
|
return this.dialog.openDialogs;
|
|
30
26
|
}
|
|
31
27
|
open(modalComponent, modalConfig) {
|
|
32
|
-
// dismisses the currently-visible snack bar, needed to handle expression after change warning.
|
|
33
28
|
this.snackBar.dismiss();
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
dialogConfig.panelClass = modalConfig.panelClass;
|
|
39
|
-
dialogConfig.position = modalConfig.position;
|
|
40
|
-
dialogConfig.data = modalConfig.data;
|
|
41
|
-
dialogConfig.id = modalConfig.id;
|
|
42
|
-
dialogConfig.height = modalConfig.height;
|
|
43
|
-
const dialogRef = this.dialog.open(modalComponent, dialogConfig);
|
|
44
|
-
this.displayBackdrop(dialogRef.id);
|
|
45
|
-
this.displayModalButtonWrapper(dialogRef, modalConfig);
|
|
46
|
-
dialogRef.afterOpened().pipe(first()).subscribe(() => this.afterOpened(dialogRef, modalConfig));
|
|
29
|
+
const dialogRef = this.dialog.open(modalComponent, this.buildDialogConfig(modalConfig));
|
|
30
|
+
this.createBackdrop(dialogRef.id);
|
|
31
|
+
this.attachButtonWrapper(dialogRef, modalConfig);
|
|
32
|
+
dialogRef.afterOpened().pipe(first()).subscribe(() => this.afterOpened(dialogRef));
|
|
47
33
|
dialogRef.afterClosed().pipe(first()).subscribe(() => this.afterClosed(dialogRef));
|
|
48
34
|
return dialogRef.afterClosed();
|
|
49
35
|
}
|
|
50
|
-
closeAll({ excludeMinimized } = {
|
|
36
|
+
closeAll({ excludeMinimized = true } = {}) {
|
|
51
37
|
if (excludeMinimized) {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (!dialog || !dialog.instance.isMinimized) {
|
|
38
|
+
for (const openDialog of this.getOpenDialogs()) {
|
|
39
|
+
const wrapper = this._buttonWrapperRefs[openDialog.id];
|
|
40
|
+
if (!wrapper || !wrapper.instance.isMinimized) {
|
|
56
41
|
openDialog.close();
|
|
57
42
|
}
|
|
58
43
|
}
|
|
59
44
|
}
|
|
60
45
|
else {
|
|
61
|
-
|
|
46
|
+
this.dialog.closeAll();
|
|
62
47
|
}
|
|
63
48
|
}
|
|
64
49
|
disableClose(disable, dialogId = 0) {
|
|
65
50
|
this.dialog.openDialogs[dialogId].disableClose = disable;
|
|
66
51
|
}
|
|
67
|
-
afterOpened(dialogRef
|
|
68
|
-
this.
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
52
|
+
afterOpened(dialogRef) {
|
|
53
|
+
this.trackModal(dialogRef.id);
|
|
54
|
+
this.setTopModal(dialogRef.id);
|
|
55
|
+
this.repositionMinimizedModals();
|
|
56
|
+
this._modalOpened$.next();
|
|
71
57
|
}
|
|
72
58
|
afterClosed(dialogRef) {
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
75
|
-
|
|
76
|
-
|
|
59
|
+
this.untrackModal(dialogRef.id);
|
|
60
|
+
const newTopId = this._openIds[this._openIds.length - 1];
|
|
61
|
+
if (newTopId) {
|
|
62
|
+
this.setTopModal(newTopId);
|
|
63
|
+
}
|
|
64
|
+
this.repositionMinimizedModals(dialogRef.id);
|
|
65
|
+
this.destroyBackdrop(dialogRef.id);
|
|
66
|
+
this.detachButtonWrapper(dialogRef.id);
|
|
67
|
+
}
|
|
68
|
+
trackModal(dialogId) {
|
|
69
|
+
this._openIds.push(dialogId);
|
|
70
|
+
}
|
|
71
|
+
untrackModal(dialogId) {
|
|
72
|
+
this._openIds = this._openIds.filter(id => id !== dialogId);
|
|
73
|
+
}
|
|
74
|
+
backdropId(dialogId) {
|
|
75
|
+
return 'backdrop-' + dialogId;
|
|
76
|
+
}
|
|
77
|
+
// Relies on the CDK-internal '.cdk-global-overlay-wrapper' class added by MatDialog; may break on Angular Material upgrades.
|
|
78
|
+
getWrapper(dialogId) {
|
|
79
|
+
const dialogEl = document.getElementById(dialogId);
|
|
80
|
+
return dialogEl ? dialogEl.closest('.cdk-global-overlay-wrapper') : null;
|
|
81
|
+
}
|
|
82
|
+
setTopModal(dialogId) {
|
|
83
|
+
this._openIds.forEach(id => {
|
|
84
|
+
const wrapper = this.getWrapper(id);
|
|
85
|
+
const backdrop = document.getElementById(this.backdropId(id));
|
|
86
|
+
if (id === dialogId) {
|
|
87
|
+
if (wrapper)
|
|
88
|
+
wrapper.style.zIndex = Z_INDEX_FRONT;
|
|
89
|
+
if (backdrop)
|
|
90
|
+
backdrop.style.zIndex = Z_INDEX_BACK;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (wrapper)
|
|
94
|
+
wrapper.style.zIndex = Z_INDEX_BACK;
|
|
95
|
+
if (backdrop)
|
|
96
|
+
backdrop.style.zIndex = Z_INDEX_BACK;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
77
99
|
}
|
|
78
100
|
minimize(dialogId) {
|
|
79
|
-
this.
|
|
80
|
-
document.getElementById(
|
|
81
|
-
document.getElementById(dialogId)
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
101
|
+
this.untrackModal(dialogId);
|
|
102
|
+
document.getElementById(this.backdropId(dialogId))?.classList.add('tb-d-none');
|
|
103
|
+
document.getElementById(dialogId)?.classList.add('minimize');
|
|
104
|
+
this._minimizedIds.push(dialogId);
|
|
105
|
+
const newTopId = this._openIds[this._openIds.length - 1];
|
|
106
|
+
if (newTopId) {
|
|
107
|
+
this.setTopModal(newTopId);
|
|
108
|
+
}
|
|
109
|
+
this.repositionMinimizedModals();
|
|
84
110
|
}
|
|
85
111
|
maximize(dialogId) {
|
|
86
|
-
this.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const el = document.getElementById(this.minimizedModals[i]);
|
|
112
|
+
this.trackModal(dialogId);
|
|
113
|
+
document.getElementById(this.backdropId(dialogId)).classList.remove('tb-d-none');
|
|
114
|
+
this.setTopModal(dialogId);
|
|
115
|
+
const dialogEl = document.getElementById(dialogId);
|
|
116
|
+
dialogEl.classList.remove('minimize');
|
|
117
|
+
dialogEl.style.bottom = undefined;
|
|
118
|
+
this.repositionMinimizedModals(dialogId);
|
|
119
|
+
}
|
|
120
|
+
repositionMinimizedModals(removedId) {
|
|
121
|
+
this._minimizedIds = this._minimizedIds.filter(id => id !== removedId);
|
|
122
|
+
for (let i = 0; i < this._minimizedIds.length; i++) {
|
|
123
|
+
const el = document.getElementById(this._minimizedIds[i]);
|
|
99
124
|
if (i === 0) {
|
|
100
125
|
el.style.bottom = '10px';
|
|
101
126
|
}
|
|
102
127
|
else {
|
|
103
|
-
const
|
|
104
|
-
|
|
128
|
+
const prevEl = document.getElementById(this._minimizedIds[i - 1]);
|
|
129
|
+
const height = prevEl.clientHeight;
|
|
105
130
|
el.style.bottom = ((height + 10) * i) + 10 + 'px';
|
|
106
131
|
}
|
|
107
132
|
el.style.right = '10px';
|
|
108
|
-
const
|
|
109
|
-
if (this.
|
|
110
|
-
|
|
133
|
+
const minimizeIconEl = el.querySelector('.modal-minimize-icon');
|
|
134
|
+
if (this._openIds.length && i !== 0) {
|
|
135
|
+
minimizeIconEl.classList.add('tb-action-disabled');
|
|
111
136
|
}
|
|
112
137
|
else {
|
|
113
|
-
|
|
138
|
+
minimizeIconEl.classList.remove('tb-action-disabled');
|
|
114
139
|
}
|
|
115
140
|
}
|
|
116
|
-
// make sure always the last open modal backdrop is in front
|
|
117
|
-
if (this.openModalIds.length > 0) {
|
|
118
|
-
const lastOpenModalId = this.openModalIds[this.openModalIds.length - 1];
|
|
119
|
-
document.getElementById('backdrop-' + lastOpenModalId).style.zIndex = BACKDROP_BACK_ZINDEX_LEVEL;
|
|
120
|
-
}
|
|
121
141
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
142
|
+
buildDialogConfig(modalConfig) {
|
|
143
|
+
const config = Object.assign(new MatDialogConfig(), modalConfig);
|
|
144
|
+
config.disableClose = modalConfig?.disableClose !== false;
|
|
145
|
+
config.hasBackdrop = false;
|
|
146
|
+
config.autoFocus = modalConfig?.autoFocus !== false;
|
|
147
|
+
return config;
|
|
148
|
+
}
|
|
149
|
+
createBackdrop(dialogId) {
|
|
150
|
+
const backdrop = document.createElement('div');
|
|
151
|
+
backdrop.classList.add('tb-overlay-backdrop');
|
|
152
|
+
backdrop.id = this.backdropId(dialogId);
|
|
153
|
+
document.querySelector('.cdk-overlay-container').append(backdrop);
|
|
154
|
+
}
|
|
155
|
+
destroyBackdrop(dialogId) {
|
|
156
|
+
document.getElementById(this.backdropId(dialogId))?.remove();
|
|
138
157
|
}
|
|
139
|
-
|
|
158
|
+
attachButtonWrapper(dialogRef, modalConfig) {
|
|
140
159
|
const dialogId = dialogRef.id;
|
|
141
160
|
import('../components/modal-buttons-wrapper/modal-buttons-wrapper.component').then(res => {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
161
|
+
if (!this.dialog.getDialogById(dialogId))
|
|
162
|
+
return;
|
|
163
|
+
this._buttonWrapperRefs[dialogId] = createComponent(res.ModalButtonsWrapperComponent, { environmentInjector: this.environmentInjector });
|
|
164
|
+
const instance = this._buttonWrapperRefs[dialogId].instance;
|
|
165
|
+
instance.close.pipe(takeUntil(instance.destroy$)).subscribe(() => dialogRef.close());
|
|
166
|
+
instance.minimize.pipe(takeUntil(instance.destroy$)).subscribe((isMinimize) => isMinimize ? this.minimize(dialogId) : this.maximize(dialogId));
|
|
167
|
+
instance.enabledMinimized = modalConfig?.enabledMinimized;
|
|
168
|
+
this.appRef.attachView(this._buttonWrapperRefs[dialogId].hostView);
|
|
169
|
+
const domEl = this._buttonWrapperRefs[dialogId].hostView.rootNodes[0];
|
|
170
|
+
const panelClass = modalConfig?.panelClass;
|
|
171
|
+
const panelSelector = Array.isArray(panelClass)
|
|
172
|
+
? panelClass.map(c => `.${c}`).join('')
|
|
173
|
+
: panelClass ? `.${panelClass}` : null;
|
|
174
|
+
if (panelSelector) {
|
|
175
|
+
document.querySelector(`${panelSelector} .modal-button-wrapper`)?.appendChild(domEl);
|
|
155
176
|
}
|
|
156
177
|
});
|
|
157
178
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
this.
|
|
162
|
-
|
|
179
|
+
detachButtonWrapper(dialogId) {
|
|
180
|
+
const ref = this._buttonWrapperRefs[dialogId];
|
|
181
|
+
if (ref) {
|
|
182
|
+
this.appRef.detachView(ref.hostView);
|
|
183
|
+
ref.destroy();
|
|
184
|
+
delete this._buttonWrapperRefs[dialogId];
|
|
163
185
|
}
|
|
164
186
|
}
|
|
165
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalService, deps: [{ token: i1.MatDialog }, { token: i2.MatSnackBar }, { token: i0.ApplicationRef }, { token: i0.
|
|
166
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalService }); }
|
|
187
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalService, deps: [{ token: i1.MatDialog }, { token: i2.MatSnackBar }, { token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
188
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalService, providedIn: 'root' }); }
|
|
167
189
|
}
|
|
168
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalService, decorators: [{
|
|
169
|
-
type: Injectable
|
|
170
|
-
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJFLFVBQVUsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFhLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFJbEQsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLENBQUM7QUFDM0MsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUM7QUFHekMsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxNQUFpQixFQUNqQixRQUFxQixFQUNyQixNQUFzQixFQUN0QixRQUFrQixFQUNsQix3QkFBa0Q7UUFKbEQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQVZwRCxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM5QixpQkFBWSxHQUFpQyxFQUFFLENBQUM7UUFDaEQsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBYSxFQUFFLENBQUM7UUE2RTVCLHVCQUFrQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUUsNEJBQXVCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxJ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Q0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7K0dBbExVLFlBQVk7bUhBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgRW1iZWRkZWRWaWV3UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGliYU1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGliYS1tYXQtZGlhbG9nLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSAnLi4vdXRpbHMvbGFuZy51dGlsJztcblxuY29uc3QgQkFDS0RST1BfRlJPTlRfWklOREVYX0xFVkVMID0gJzEwMDAnO1xuY29uc3QgQkFDS0RST1BfQkFDS19aSU5ERVhfTEVWRUwgPSAnOTk5JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IFN0cmluZ01hcDxDb21wb25lbnRSZWY8YW55Pj4gPSB7fTtcbiAgcHJpdmF0ZSBtaW5pbWl6ZWRNb2RhbHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgb3Blbk1vZGFsSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7XG4gIH1cblxuICAvLyBlbmFibGUgc3Vic2NyaWJpbmcgdG8gbW9kYWwgb3BlbmVkIG9ic2VydmFibGVcbiAgb25Nb2RhbE9wZW5lZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0O1xuICB9XG5cbiAgcHVibGljIGdldE9wZW5EaWFsb2dzKCkge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncztcbiAgfVxuXG4gIHB1YmxpYyBvcGVuPFQsIEogPSBhbnk+KFxuICAgIG1vZGFsQ29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgbW9kYWxDb25maWc/OiBUaWJhTWF0RGlhbG9nQ29uZmlnPEo+LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAvLyBkaXNtaXNzZXMgdGhlIGN1cnJlbnRseS12aXNpYmxlIHNuYWNrIGJhciwgbmVlZGVkIHRvIGhhbmRsZSBleHByZXNzaW9uIGFmdGVyIGNoYW5nZSB3YXJuaW5nLlxuICAgIHRoaXMuc25hY2tCYXIuZGlzbWlzcygpO1xuXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSBtb2RhbENvbmZpZy5kaXNhYmxlQ2xvc2UgIT09IGZhbHNlO1xuICAgIGRpYWxvZ0NvbmZpZy5oYXNCYWNrZHJvcCA9IGZhbHNlO1xuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSBtb2RhbENvbmZpZy5hdXRvRm9jdXMgIT09IGZhbHNlO1xuICAgIGRpYWxvZ0NvbmZpZy5wYW5lbENsYXNzID0gbW9kYWxDb25maWcucGFuZWxDbGFzcztcbiAgICBkaWFsb2dDb25maWcucG9zaXRpb24gPSBtb2RhbENvbmZpZy5wb3NpdGlvbjtcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IG1vZGFsQ29uZmlnLmRhdGE7XG4gICAgZGlhbG9nQ29uZmlnLmlkID0gbW9kYWxDb25maWcuaWQ7XG4gICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9IG1vZGFsQ29uZmlnLmhlaWdodDtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4obW9kYWxDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgdGhpcy5kaXNwbGF5QmFja2Ryb3AoZGlhbG9nUmVmLmlkKTtcbiAgICB0aGlzLmRpc3BsYXlNb2RhbEJ1dHRvbldyYXBwZXIoZGlhbG9nUmVmLCBtb2RhbENvbmZpZyk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJPcGVuZWQoKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFmdGVyT3BlbmVkKGRpYWxvZ1JlZiwgbW9kYWxDb25maWcpKTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFmdGVyQ2xvc2VkKGRpYWxvZ1JlZikpO1xuICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUFsbCh7IGV4Y2x1ZGVNaW5pbWl6ZWQgfSA9IHsgZXhjbHVkZU1pbmltaXplZDogdHJ1ZSB9KSB7XG4gICAgaWYgKGV4Y2x1ZGVNaW5pbWl6ZWQpIHtcbiAgICAgIGNvbnN0IG9wZW5EaWFsb2dzID0gdGhpcy5nZXRPcGVuRGlhbG9ncygpO1xuICAgICAgZm9yIChjb25zdCBvcGVuRGlhbG9nIG9mIG9wZW5EaWFsb2dzKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuY29tcG9uZW50UmVmW29wZW5EaWFsb2cuaWRdO1xuICAgICAgICBpZiAoIWRpYWxvZyB8fCAhZGlhbG9nLmluc3RhbmNlLmlzTWluaW1pemVkKSB7XG4gICAgICAgICAgb3BlbkRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlQ2xvc2UoZGlzYWJsZTogYm9vbGVhbiwgZGlhbG9nSWQ6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tkaWFsb2dJZF0uZGlzYWJsZUNsb3NlID0gZGlzYWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgYWZ0ZXJPcGVuZWQ8VCwgUj4oZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VCwgUj4sIG1vZGFsQ29uZmlnOiBUaWJhTWF0RGlhbG9nQ29uZmlnPFQ+KSB7XG4gICAgdGhpcy5hZGRPcGVuTW9kYWxUb0xpc3QoZGlhbG9nUmVmLmlkKTtcbiAgICB0aGlzLnVwZGF0ZU1pbmltaXplZE1vZGFscygpO1xuICAgIHRoaXMuc3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFmdGVyQ2xvc2VkPFQsIFI+KGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFQsIFI+KSB7XG4gICAgdGhpcy5yZW1vdmVPcGVuTW9kYWxGcm9tTGlzdChkaWFsb2dSZWYuaWQpO1xuICAgIHRoaXMudXBkYXRlTWluaW1pemVkTW9kYWxzKGRpYWxvZ1JlZi5pZCk7XG4gICAgdGhpcy5yZW1vdmVCYWNrZHJvcChkaWFsb2dSZWYuaWQpO1xuICAgIHRoaXMucmVtb3ZlTW9kYWxCdXR0b25XcmFwcGVyKGRpYWxvZ1JlZi5pZCk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9wZW5Nb2RhbFRvTGlzdCA9IChkaWFsb2dJZDogc3RyaW5nKSA9PiB0aGlzLm9wZW5Nb2RhbElkcy5wdXNoKGRpYWxvZ0lkKTtcblxuICBwcml2YXRlIHJlbW92ZU9wZW5Nb2RhbEZyb21MaXN0ID0gKGRpYWxvZ0lkOiBzdHJpbmcpID0+IHRoaXMub3Blbk1vZGFsSWRzID0gdGhpcy5vcGVuTW9kYWxJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBkaWFsb2dJZCk7XG5cbiAgcHJpdmF0ZSBtaW5pbWl6ZShkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW1vdmVPcGVuTW9kYWxGcm9tTGlzdChkaWFsb2dJZCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2tkcm9wLScgKyBkaWFsb2dJZCkuY2xhc3NMaXN0LmFkZCgndGItZC1ub25lJyk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGlhbG9nSWQpLmNsYXNzTGlzdC5hZGQoJ21pbmltaXplJyk7XG4gICAgdGhpcy5taW5pbWl6ZWRNb2RhbHMucHVzaChkaWFsb2dJZCk7XG4gICAgdGhpcy51cGRhdGVNaW5pbWl6ZWRNb2RhbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWF4aW1pemUoZGlhbG9nSWQ6IHN0cmluZykge1xuICAgIHRoaXMuYWRkT3Blbk1vZGFsVG9MaXN0KGRpYWxvZ0lkKTtcbiAgICBjb25zdCBiYWNrZHJvcEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2tkcm9wLScgKyBkaWFsb2dJZCk7XG4gICAgYmFja2Ryb3BFbC5jbGFzc0xpc3QucmVtb3ZlKCd0Yi1kLW5vbmUnKTtcbiAgICBiYWNrZHJvcEVsLnN0eWxlLnpJbmRleCA9IEJBQ0tEUk9QX0JBQ0tfWklOREVYX0xFVkVMO1xuICAgIGNvbnN0IGRpYWxvZ0lkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaWFsb2dJZCk7XG4gICAgZGlhbG9nSWRFbC5jbGFzc0xpc3QucmVtb3ZlKCdtaW5pbWl6ZScpO1xuICAgIGRpYWxvZ0lkRWwuc3R5bGUuYm90dG9tID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXBkYXRlTWluaW1pemVkTW9kYWxzKGRpYWxvZ0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWluaW1pemVkTW9kYWxzKGRpYWxvZ0lkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5taW5pbWl6ZWRNb2RhbHMgPSB0aGlzLm1pbmltaXplZE1vZGFscy5maWx0ZXIobSA9PiBtICE9PSBkaWFsb2dJZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1pbmltaXplZE1vZGFscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1pbmltaXplZE1vZGFsc1tpXSk7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSAnMTBweCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubWluaW1pemVkTW9kYWxzW2kgLSAxXSk7XG4gICAgICAgIGxldCBoZWlnaHQgPSBwcmV2RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGVsLnN0eWxlLmJvdHRvbSA9ICgoaGVpZ2h0ICsgMTApICogaSkgKyAxMCArICdweCc7XG4gICAgICB9XG5cbiAgICAgIGVsLnN0eWxlLnJpZ2h0ID0gJzEwcHgnO1xuICAgICAgY29uc3QgbWluaW16ZUljb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1taW5pbWl6ZS1pY29uJyk7XG4gICAgICBpZiAodGhpcy5vcGVuTW9kYWxJZHMubGVuZ3RoKSB7XG4gICAgICAgIG1pbmltemVJY29uRWwuY2xhc3NMaXN0LmFkZCgndGItYWN0aW9uLWRpc2FibGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5pbXplSWNvbkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RiLWFjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSBhbHdheXMgdGhlIGxhc3Qgb3BlbiBtb2RhbCBiYWNrZHJvcCBpcyBpbiBmcm9udFxuICAgIGlmICh0aGlzLm9wZW5Nb2RhbElkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsYXN0T3Blbk1vZGFsSWQgPSB0aGlzLm9wZW5Nb2RhbElkc1t0aGlzLm9wZW5Nb2RhbElkcy5sZW5ndGggLSAxXTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYWNrZHJvcC0nICsgbGFzdE9wZW5Nb2RhbElkKS5zdHlsZS56SW5kZXggPSBCQUNLRFJPUF9CQUNLX1pJTkRFWF9MRVZFTDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlCYWNrZHJvcChkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRiLW92ZXJsYXktYmFja2Ryb3AnKS5mb3JFYWNoKGVsID0+IGVsWydzdHlsZSddLnpJbmRleCA9IEJBQ0tEUk9QX0ZST05UX1pJTkRFWF9MRVZFTCk7XG4gICAgY29uc3QgZGl2QmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXZCYWNrZHJvcC5jbGFzc0xpc3QuYWRkKCd0Yi1vdmVybGF5LWJhY2tkcm9wJyk7XG4gICAgZGl2QmFja2Ryb3AuaWQgPSAnYmFja2Ryb3AtJyArIGRpYWxvZ0lkO1xuICAgIGRpdkJhY2tkcm9wLnN0eWxlLnpJbmRleCA9IEJBQ0tEUk9QX0JBQ0tfWklOREVYX0xFVkVMO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKS5hcHBlbmQoZGl2QmFja2Ryb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCYWNrZHJvcChkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFja2Ryb3AtJyArIGRpYWxvZ0lkKTtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgIGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmdbJ3N0eWxlJ10uekluZGV4ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheU1vZGFsQnV0dG9uV3JhcHBlcjxULCBSPihkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxULCBSPiwgbW9kYWxDb25maWc6IFRpYmFNYXREaWFsb2dDb25maWc8VD4pIHtcbiAgICBjb25zdCBkaWFsb2dJZCA9IGRpYWxvZ1JlZi5pZDtcbiAgICBpbXBvcnQoJy4uL2NvbXBvbmVudHMvbW9kYWwtYnV0dG9ucy13cmFwcGVyL21vZGFsLWJ1dHRvbnMtd3JhcHBlci5jb21wb25lbnQnKS50aGVuKHJlcyA9PiB7XG4gICAgICAvLyBHdWFyZCBhZ2FpbnN0IG1vZGFsIGFscmVhZHkgY2xvc2VkIGJlZm9yZSBpbXBvcnQgcmVzb2x2ZWRcbiAgICAgIGlmICh0aGlzLmRpYWxvZy5nZXREaWFsb2dCeUlkKGRpYWxvZ0lkKSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkocmVzLk1vZGFsQnV0dG9uc1dyYXBwZXJDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZltkaWFsb2dJZF0gPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFJlZltkaWFsb2dJZF0uaW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLmNsb3NlLnBpcGUodGFrZVVudGlsKGluc3RhbmNlLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RhbmNlLm1pbmltaXplLnBpcGUodGFrZVVudGlsKGluc3RhbmNlLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChtaW5pbWl6ZSkgPT4gbWluaW1pemUgPyB0aGlzLm1pbmltaXplKGRpYWxvZ0lkKSA6IHRoaXMubWF4aW1pemUoZGlhbG9nSWQpKTtcbiAgICAgICAgaW5zdGFuY2UuZW5hYmxlZE1pbmltaXplZCA9IG1vZGFsQ29uZmlnLmVuYWJsZWRNaW5pbWl6ZWQ7XG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWZbZGlhbG9nSWRdLmhvc3RWaWV3KTtcbiAgICAgICAgY29uc3QgZG9tRWxlbSA9ICh0aGlzLmNvbXBvbmVudFJlZltkaWFsb2dJZF0uaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bW9kYWxDb25maWcucGFuZWxDbGFzc30gLm1vZGFsLWJ1dHRvbi13cmFwcGVyYCk/LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVNb2RhbEJ1dHRvbldyYXBwZXIoZGlhbG9nSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZltkaWFsb2dJZF0pIHtcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWZbZGlhbG9nSWRdLmhvc3RWaWV3KTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmW2RpYWxvZ0lkXS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZltkaWFsb2dJZF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
191
|
+
type: Injectable,
|
|
192
|
+
args: [{ providedIn: 'root' }]
|
|
193
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.MatSnackBar }, { type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLGVBQWUsRUFBd0MsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBYSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFFcEYsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBR2xELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUM3QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7QUFHM0IsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxNQUFpQixFQUNqQixRQUFxQixFQUNyQixNQUFzQixFQUN0QixtQkFBd0M7UUFIeEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFUMUMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BDLHVCQUFrQixHQUFzQyxFQUFFLENBQUM7UUFDM0Qsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsYUFBUSxHQUFhLEVBQUUsQ0FBQztJQU81QixDQUFDO0lBRUwsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksQ0FBYSxjQUF5QixFQUFFLFdBQW9DO1FBQzlFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFakQsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM5QyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWdCLEVBQUUsV0FBbUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO0lBQzNELENBQUM7SUFFTyxXQUFXLENBQU8sU0FBNkI7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sV0FBVyxDQUFPLFNBQTZCO1FBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQWdCO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBZ0I7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQWdCO1FBQ2pDLE9BQU8sV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsNkhBQTZIO0lBQ3JILFVBQVUsQ0FBQyxRQUFnQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFjLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4RixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWdCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksT0FBTztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7Z0JBQ2xELElBQUksUUFBUTtvQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDckQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksT0FBTztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7Z0JBQ2pELElBQUksUUFBUTtvQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFFBQVEsQ0FBQyxRQUFnQjtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0UsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyxRQUFRLENBQUMsUUFBZ0I7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxTQUFrQjtRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25ELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNaLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUNuQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDcEQsQ0FBQztZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztZQUN4QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDckQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUksV0FBb0M7UUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxFQUFFLFlBQVksS0FBSyxLQUFLLENBQUM7UUFDMUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxLQUFLLEtBQUssQ0FBQztRQUNwRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQWdCO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM5QyxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWdCO1FBQ3RDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFTyxtQkFBbUIsQ0FBTyxTQUE2QixFQUFFLFdBQW9DO1FBQ25HLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLHFFQUFxRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQUUsT0FBTztZQUVqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDekksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUU1RCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFtQixFQUFFLEVBQUUsQ0FDckYsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUMvRCxDQUFDO1lBQ0YsUUFBUSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztZQUUxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQWlDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztZQUMvRyxNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsVUFBVSxDQUFDO1lBQzNDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsd0JBQXdCLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFFBQWdCO1FBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOytHQXBNVSxZQUFZO21IQUFaLFlBQVksY0FEQyxNQUFNOzs0RkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50UmVmLCBjcmVhdGVDb21wb25lbnQsIEVtYmVkZGVkVmlld1JlZiwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGliYU1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGliYS1tYXQtZGlhbG9nLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5jb25zdCBaX0lOREVYX0ZST05UID0gJzEwMDAnO1xuY29uc3QgWl9JTkRFWF9CQUNLID0gJzk5OSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTW9kYWxTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9tb2RhbE9wZW5lZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9idXR0b25XcmFwcGVyUmVmczogUmVjb3JkPHN0cmluZywgQ29tcG9uZW50UmVmPGFueT4+ID0ge307XG4gIHByaXZhdGUgX21pbmltaXplZElkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb3Blbklkczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIGVudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3JcbiAgKSB7IH1cblxuICBvbk1vZGFsT3BlbmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9tb2RhbE9wZW5lZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRPcGVuRGlhbG9ncygpIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG4gIH1cblxuICBvcGVuPFQsIEogPSBhbnk+KG1vZGFsQ29tcG9uZW50OiBUeXBlPGFueT4sIG1vZGFsQ29uZmlnPzogVGliYU1hdERpYWxvZ0NvbmZpZzxKPik6IE9ic2VydmFibGU8VD4ge1xuICAgIHRoaXMuc25hY2tCYXIuZGlzbWlzcygpO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbihtb2RhbENvbXBvbmVudCwgdGhpcy5idWlsZERpYWxvZ0NvbmZpZyhtb2RhbENvbmZpZykpO1xuICAgIHRoaXMuY3JlYXRlQmFja2Ryb3AoZGlhbG9nUmVmLmlkKTtcbiAgICB0aGlzLmF0dGFjaEJ1dHRvbldyYXBwZXIoZGlhbG9nUmVmLCBtb2RhbENvbmZpZyk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJPcGVuZWQoKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFmdGVyT3BlbmVkKGRpYWxvZ1JlZikpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuYWZ0ZXJDbG9zZWQoZGlhbG9nUmVmKSk7XG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpO1xuICB9XG5cbiAgY2xvc2VBbGwoeyBleGNsdWRlTWluaW1pemVkID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoZXhjbHVkZU1pbmltaXplZCkge1xuICAgICAgZm9yIChjb25zdCBvcGVuRGlhbG9nIG9mIHRoaXMuZ2V0T3BlbkRpYWxvZ3MoKSkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5fYnV0dG9uV3JhcHBlclJlZnNbb3BlbkRpYWxvZy5pZF07XG4gICAgICAgIGlmICghd3JhcHBlciB8fCAhd3JhcHBlci5pbnN0YW5jZS5pc01pbmltaXplZCkge1xuICAgICAgICAgIG9wZW5EaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVDbG9zZShkaXNhYmxlOiBib29sZWFuLCBkaWFsb2dJZDogbnVtYmVyID0gMCkge1xuICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2RpYWxvZ0lkXS5kaXNhYmxlQ2xvc2UgPSBkaXNhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZnRlck9wZW5lZDxULCBSPihkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxULCBSPikge1xuICAgIHRoaXMudHJhY2tNb2RhbChkaWFsb2dSZWYuaWQpO1xuICAgIHRoaXMuc2V0VG9wTW9kYWwoZGlhbG9nUmVmLmlkKTtcbiAgICB0aGlzLnJlcG9zaXRpb25NaW5pbWl6ZWRNb2RhbHMoKTtcbiAgICB0aGlzLl9tb2RhbE9wZW5lZCQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZnRlckNsb3NlZDxULCBSPihkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxULCBSPikge1xuICAgIHRoaXMudW50cmFja01vZGFsKGRpYWxvZ1JlZi5pZCk7XG4gICAgY29uc3QgbmV3VG9wSWQgPSB0aGlzLl9vcGVuSWRzW3RoaXMuX29wZW5JZHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKG5ld1RvcElkKSB7XG4gICAgICB0aGlzLnNldFRvcE1vZGFsKG5ld1RvcElkKTtcbiAgICB9XG4gICAgdGhpcy5yZXBvc2l0aW9uTWluaW1pemVkTW9kYWxzKGRpYWxvZ1JlZi5pZCk7XG4gICAgdGhpcy5kZXN0cm95QmFja2Ryb3AoZGlhbG9nUmVmLmlkKTtcbiAgICB0aGlzLmRldGFjaEJ1dHRvbldyYXBwZXIoZGlhbG9nUmVmLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tNb2RhbChkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3Blbklkcy5wdXNoKGRpYWxvZ0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgdW50cmFja01vZGFsKGRpYWxvZ0lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vcGVuSWRzID0gdGhpcy5fb3Blbklkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGRpYWxvZ0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgYmFja2Ryb3BJZChkaWFsb2dJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2JhY2tkcm9wLScgKyBkaWFsb2dJZDtcbiAgfVxuXG4gIC8vIFJlbGllcyBvbiB0aGUgQ0RLLWludGVybmFsICcuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInIGNsYXNzIGFkZGVkIGJ5IE1hdERpYWxvZzsgbWF5IGJyZWFrIG9uIEFuZ3VsYXIgTWF0ZXJpYWwgdXBncmFkZXMuXG4gIHByaXZhdGUgZ2V0V3JhcHBlcihkaWFsb2dJZDogc3RyaW5nKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBkaWFsb2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpYWxvZ0lkKTtcbiAgICByZXR1cm4gZGlhbG9nRWwgPyBkaWFsb2dFbC5jbG9zZXN0PEhUTUxFbGVtZW50PignLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJykgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb3BNb2RhbChkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3Blbklkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldFdyYXBwZXIoaWQpO1xuICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmJhY2tkcm9wSWQoaWQpKTtcbiAgICAgIGlmIChpZCA9PT0gZGlhbG9nSWQpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIpIHdyYXBwZXIuc3R5bGUuekluZGV4ID0gWl9JTkRFWF9GUk9OVDtcbiAgICAgICAgaWYgKGJhY2tkcm9wKSBiYWNrZHJvcC5zdHlsZS56SW5kZXggPSBaX0lOREVYX0JBQ0s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAod3JhcHBlcikgd3JhcHBlci5zdHlsZS56SW5kZXggPSBaX0lOREVYX0JBQ0s7XG4gICAgICAgIGlmIChiYWNrZHJvcCkgYmFja2Ryb3Auc3R5bGUuekluZGV4ID0gWl9JTkRFWF9CQUNLO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtaW5pbWl6ZShkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgdGhpcy51bnRyYWNrTW9kYWwoZGlhbG9nSWQpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYmFja2Ryb3BJZChkaWFsb2dJZCkpPy5jbGFzc0xpc3QuYWRkKCd0Yi1kLW5vbmUnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaWFsb2dJZCk/LmNsYXNzTGlzdC5hZGQoJ21pbmltaXplJyk7XG4gICAgdGhpcy5fbWluaW1pemVkSWRzLnB1c2goZGlhbG9nSWQpO1xuICAgIGNvbnN0IG5ld1RvcElkID0gdGhpcy5fb3Blbklkc1t0aGlzLl9vcGVuSWRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChuZXdUb3BJZCkge1xuICAgICAgdGhpcy5zZXRUb3BNb2RhbChuZXdUb3BJZCk7XG4gICAgfVxuICAgIHRoaXMucmVwb3NpdGlvbk1pbmltaXplZE1vZGFscygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXhpbWl6ZShkaWFsb2dJZDogc3RyaW5nKSB7XG4gICAgdGhpcy50cmFja01vZGFsKGRpYWxvZ0lkKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmJhY2tkcm9wSWQoZGlhbG9nSWQpKS5jbGFzc0xpc3QucmVtb3ZlKCd0Yi1kLW5vbmUnKTtcbiAgICB0aGlzLnNldFRvcE1vZGFsKGRpYWxvZ0lkKTtcbiAgICBjb25zdCBkaWFsb2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpYWxvZ0lkKTtcbiAgICBkaWFsb2dFbC5jbGFzc0xpc3QucmVtb3ZlKCdtaW5pbWl6ZScpO1xuICAgIGRpYWxvZ0VsLnN0eWxlLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlcG9zaXRpb25NaW5pbWl6ZWRNb2RhbHMoZGlhbG9nSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvc2l0aW9uTWluaW1pemVkTW9kYWxzKHJlbW92ZWRJZD86IHN0cmluZykge1xuICAgIHRoaXMuX21pbmltaXplZElkcyA9IHRoaXMuX21pbmltaXplZElkcy5maWx0ZXIoaWQgPT4gaWQgIT09IHJlbW92ZWRJZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9taW5pbWl6ZWRJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbWluaW1pemVkSWRzW2ldKTtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGVsLnN0eWxlLmJvdHRvbSA9ICcxMHB4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXZFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX21pbmltaXplZElkc1tpIC0gMV0pO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBwcmV2RWwuY2xpZW50SGVpZ2h0O1xuICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSAoKGhlaWdodCArIDEwKSAqIGkpICsgMTAgKyAncHgnO1xuICAgICAgfVxuICAgICAgZWwuc3R5bGUucmlnaHQgPSAnMTBweCc7XG4gICAgICBjb25zdCBtaW5pbWl6ZUljb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1taW5pbWl6ZS1pY29uJyk7XG4gICAgICBpZiAodGhpcy5fb3Blbklkcy5sZW5ndGggJiYgaSAhPT0gMCkge1xuICAgICAgICBtaW5pbWl6ZUljb25FbC5jbGFzc0xpc3QuYWRkKCd0Yi1hY3Rpb24tZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pbmltaXplSWNvbkVsLmNsYXNzTGlzdC5yZW1vdmUoJ3RiLWFjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaWFsb2dDb25maWc8Sj4obW9kYWxDb25maWc/OiBUaWJhTWF0RGlhbG9nQ29uZmlnPEo+KTogTWF0RGlhbG9nQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKG5ldyBNYXREaWFsb2dDb25maWcoKSwgbW9kYWxDb25maWcpO1xuICAgIGNvbmZpZy5kaXNhYmxlQ2xvc2UgPSBtb2RhbENvbmZpZz8uZGlzYWJsZUNsb3NlICE9PSBmYWxzZTtcbiAgICBjb25maWcuaGFzQmFja2Ryb3AgPSBmYWxzZTtcbiAgICBjb25maWcuYXV0b0ZvY3VzID0gbW9kYWxDb25maWc/LmF1dG9Gb2N1cyAhPT0gZmFsc2U7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFja2Ryb3AoZGlhbG9nSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZCgndGItb3ZlcmxheS1iYWNrZHJvcCcpO1xuICAgIGJhY2tkcm9wLmlkID0gdGhpcy5iYWNrZHJvcElkKGRpYWxvZ0lkKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJykuYXBwZW5kKGJhY2tkcm9wKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUJhY2tkcm9wKGRpYWxvZ0lkOiBzdHJpbmcpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmJhY2tkcm9wSWQoZGlhbG9nSWQpKT8ucmVtb3ZlKCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaEJ1dHRvbldyYXBwZXI8VCwgUj4oZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VCwgUj4sIG1vZGFsQ29uZmlnPzogVGliYU1hdERpYWxvZ0NvbmZpZzxUPikge1xuICAgIGNvbnN0IGRpYWxvZ0lkID0gZGlhbG9nUmVmLmlkO1xuICAgIGltcG9ydCgnLi4vY29tcG9uZW50cy9tb2RhbC1idXR0b25zLXdyYXBwZXIvbW9kYWwtYnV0dG9ucy13cmFwcGVyLmNvbXBvbmVudCcpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmICghdGhpcy5kaWFsb2cuZ2V0RGlhbG9nQnlJZChkaWFsb2dJZCkpIHJldHVybjtcblxuICAgICAgdGhpcy5fYnV0dG9uV3JhcHBlclJlZnNbZGlhbG9nSWRdID0gY3JlYXRlQ29tcG9uZW50KHJlcy5Nb2RhbEJ1dHRvbnNXcmFwcGVyQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciB9KTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5fYnV0dG9uV3JhcHBlclJlZnNbZGlhbG9nSWRdLmluc3RhbmNlO1xuXG4gICAgICBpbnN0YW5jZS5jbG9zZS5waXBlKHRha2VVbnRpbChpbnN0YW5jZS5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiBkaWFsb2dSZWYuY2xvc2UoKSk7XG4gICAgICBpbnN0YW5jZS5taW5pbWl6ZS5waXBlKHRha2VVbnRpbChpbnN0YW5jZS5kZXN0cm95JCkpLnN1YnNjcmliZSgoaXNNaW5pbWl6ZTogYm9vbGVhbikgPT5cbiAgICAgICAgaXNNaW5pbWl6ZSA/IHRoaXMubWluaW1pemUoZGlhbG9nSWQpIDogdGhpcy5tYXhpbWl6ZShkaWFsb2dJZClcbiAgICAgICk7XG4gICAgICBpbnN0YW5jZS5lbmFibGVkTWluaW1pemVkID0gbW9kYWxDb25maWc/LmVuYWJsZWRNaW5pbWl6ZWQ7XG5cbiAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5fYnV0dG9uV3JhcHBlclJlZnNbZGlhbG9nSWRdLmhvc3RWaWV3KTtcbiAgICAgIGNvbnN0IGRvbUVsID0gKHRoaXMuX2J1dHRvbldyYXBwZXJSZWZzW2RpYWxvZ0lkXS5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgcGFuZWxDbGFzcyA9IG1vZGFsQ29uZmlnPy5wYW5lbENsYXNzO1xuICAgICAgY29uc3QgcGFuZWxTZWxlY3RvciA9IEFycmF5LmlzQXJyYXkocGFuZWxDbGFzcylcbiAgICAgICAgPyBwYW5lbENsYXNzLm1hcChjID0+IGAuJHtjfWApLmpvaW4oJycpXG4gICAgICAgIDogcGFuZWxDbGFzcyA/IGAuJHtwYW5lbENsYXNzfWAgOiBudWxsO1xuICAgICAgaWYgKHBhbmVsU2VsZWN0b3IpIHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHtwYW5lbFNlbGVjdG9yfSAubW9kYWwtYnV0dG9uLXdyYXBwZXJgKT8uYXBwZW5kQ2hpbGQoZG9tRWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRhY2hCdXR0b25XcmFwcGVyKGRpYWxvZ0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLl9idXR0b25XcmFwcGVyUmVmc1tkaWFsb2dJZF07XG4gICAgaWYgKHJlZikge1xuICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhyZWYuaG9zdFZpZXcpO1xuICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9idXR0b25XcmFwcGVyUmVmc1tkaWFsb2dJZF07XG4gICAgfVxuICB9XG59XG4iXX0=
|