@eo-sdk/client 11.7.0-rc.1 → 11.8.0-rc.2
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/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/dashboard.component.d.ts +3 -2
- package/app/eo-client/dashboard/dashboard.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-setup/signature-statistics-setup.component.d.ts +30 -0
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-setup/signature-statistics-setup.component.d.ts.map +1 -0
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.d.ts +23 -0
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.d.ts.map +1 -0
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics.interface.d.ts +20 -0
- package/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics.interface.d.ts.map +1 -0
- package/app/eo-client/eo-client.module.d.ts +32 -29
- package/app/eo-client/eo-client.module.d.ts.map +1 -1
- package/app/eo-client/settings/settings.component.d.ts +15 -16
- package/app/eo-client/settings/settings.component.d.ts.map +1 -1
- package/app/eo-client/settings/settings.interface.d.ts +25 -0
- package/app/eo-client/settings/settings.interface.d.ts.map +1 -0
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +0 -1
- package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +78 -23
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts +24 -0
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.d.ts.map +1 -0
- package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts +5 -5
- package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-helper.service.d.ts +31 -11
- package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
- package/app/eo-framework/upload-overlay/upload-overlay.component.d.ts +51 -26
- package/app/eo-framework/upload-overlay/upload-overlay.component.d.ts.map +1 -1
- package/app/eo-framework-core/agent/agent.service.d.ts +7 -2
- package/app/eo-framework-core/agent/agent.service.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +21 -3
- package/assets/_default/i18n/en.json +21 -3
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/dashboard.component.mjs +20 -6
- package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-setup/signature-statistics-setup.component.mjs +114 -0
- package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-widget.component.mjs +80 -0
- package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics.interface.mjs +2 -0
- package/esm2022/app/eo-client/eo-client.module.mjs +11 -1
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
- package/esm2022/app/eo-client/settings/settings.component.mjs +42 -24
- package/esm2022/app/eo-client/settings/settings.interface.mjs +2 -0
- package/esm2022/app/eo-framework/actions/actions/open-document-action/open-document-action.mjs +2 -2
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +7 -9
- package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +3 -2
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +215 -94
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.service.mjs +39 -0
- package/esm2022/app/eo-framework/form-elements/string/string.component.mjs +2 -2
- package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +16 -22
- package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +8 -3
- package/esm2022/app/eo-framework/object-details/object-history/object-history.component.mjs +2 -2
- package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +43 -16
- package/esm2022/app/eo-framework/stored-query/stored-query-details/dynamic-property-switch/dynamic-property-switch.component.mjs +4 -3
- package/esm2022/app/eo-framework/upload-overlay/upload-overlay.component.mjs +163 -92
- package/esm2022/app/eo-framework-core/agent/agent.service.mjs +13 -2
- package/fesm2022/eo-sdk-client.mjs +727 -266
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +3 -2
|
@@ -1,29 +1,170 @@
|
|
|
1
1
|
import { of as observableOf, forkJoin as observableForkJoin, Observable } from 'rxjs';
|
|
2
2
|
import { Component, ViewChild } from '@angular/core';
|
|
3
3
|
import { EnaioEvent, UploadTarget, UploadFileItem, Utils, EnvironmentEnaio } from '@eo-sdk/core';
|
|
4
|
+
import { LocaleDatePipe } from '../../eo-framework-core';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/router";
|
|
6
7
|
import * as i2 from "@eo-sdk/core";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "@
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "../ui/
|
|
11
|
-
import * as i7 from "
|
|
8
|
+
import * as i3 from "../../eo-framework-core";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "@ngx-translate/core";
|
|
11
|
+
import * as i6 from "../ui/eo-icon/eo-icon.component";
|
|
12
|
+
import * as i7 from "../ui/loading-spinner/loading-spinner.component";
|
|
13
|
+
import * as i8 from "../accordion/simple-accordion/simple-accordion.component";
|
|
14
|
+
import * as i9 from "../../eo-framework-core/pipes/filesize.pipe";
|
|
12
15
|
export class UploadOverlayComponent {
|
|
13
|
-
constructor(router, renderer, prepareService, translate, systemService, eventService, uploadRegistry) {
|
|
16
|
+
constructor(router, renderer, prepareService, translate, userService, agentService, systemService, eventService, storageService, uploadRegistry) {
|
|
14
17
|
this.router = router;
|
|
15
18
|
this.renderer = renderer;
|
|
16
19
|
this.prepareService = prepareService;
|
|
17
20
|
this.translate = translate;
|
|
21
|
+
this.userService = userService;
|
|
22
|
+
this.agentService = agentService;
|
|
18
23
|
this.systemService = systemService;
|
|
19
24
|
this.eventService = eventService;
|
|
25
|
+
this.storageService = storageService;
|
|
20
26
|
this.uploadRegistry = uploadRegistry;
|
|
21
27
|
this.queue = [];
|
|
22
28
|
this.validUploadTargets = [];
|
|
29
|
+
this.folderFavorites = [];
|
|
30
|
+
this.lastOpenedFolder = [];
|
|
31
|
+
this.targetTypes = [
|
|
32
|
+
{
|
|
33
|
+
type: 'root',
|
|
34
|
+
iconSrc: 'assets/_default/svg/ic_create_document.svg',
|
|
35
|
+
targetClass: 'upload-target-general',
|
|
36
|
+
name: 'eo.upload.global.root.title',
|
|
37
|
+
description: 'eo.upload.global.root.description'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'object',
|
|
41
|
+
iconSrc: 'assets/_default/svg/ic_document_file.svg',
|
|
42
|
+
targetClass: 'upload-target-replace',
|
|
43
|
+
name: 'eo.upload.global.object.title'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'context',
|
|
47
|
+
iconSrc: 'assets/_default/svg/ic_create_document_in_folder.svg',
|
|
48
|
+
targetClass: 'upload-target-context',
|
|
49
|
+
name: 'eo.upload.global.context.title',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'contexttree',
|
|
53
|
+
iconSrc: 'assets/_default/svg/ic_create_document_in_folder.svg',
|
|
54
|
+
targetClass: 'upload-target-contexttree',
|
|
55
|
+
name: 'eo.add.title.location.subfolder'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'custom',
|
|
59
|
+
iconSrc: 'assets/_default/svg/ic_upload.svg',
|
|
60
|
+
targetClass: 'upload-target-custom',
|
|
61
|
+
name: '',
|
|
62
|
+
}
|
|
63
|
+
];
|
|
23
64
|
this.uploadTargets = [];
|
|
24
65
|
this.dragEventCount = 0;
|
|
66
|
+
this.cacheKey = 'accordion.state--';
|
|
67
|
+
this.datePipe = new LocaleDatePipe(translate);
|
|
68
|
+
}
|
|
69
|
+
ngOnInit() {
|
|
70
|
+
this.init();
|
|
71
|
+
}
|
|
72
|
+
ngOnDestroy() {
|
|
73
|
+
if (this.dragEnterListener) {
|
|
74
|
+
this.dragEnterListener();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Proceed upload with a selected upload target.
|
|
79
|
+
* @param uploadTarget - the target to upload files to
|
|
80
|
+
*/
|
|
81
|
+
proceedWithUpload(uploadTarget) {
|
|
82
|
+
if (uploadTarget.type !== UploadTarget.CUSTOM && this.queue.length > 1) {
|
|
83
|
+
// For more than one file to be uploaded to a none custom target, we let the user decide if
|
|
84
|
+
// batch upload should be used or not ...
|
|
85
|
+
this.selectedUploadTarget = uploadTarget;
|
|
86
|
+
}
|
|
87
|
+
else if (uploadTarget.type === UploadTarget.OBJECT) {
|
|
88
|
+
// ... otherwise upload is started immediately
|
|
89
|
+
this.startUpload(uploadTarget, [null, this.getStateRoute()]);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.startUpload(uploadTarget, [null, '/prepare']);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Proceed upload using the selected upload target.
|
|
97
|
+
* @param useBatchUpload - flag indicating whether or not to use batch upload
|
|
98
|
+
*/
|
|
99
|
+
proceedWithSelectedTarget(useBatchUpload) {
|
|
100
|
+
this.startUpload(this.selectedUploadTarget, [useBatchUpload, '/prepare']);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Resets the selected upload target.
|
|
104
|
+
*/
|
|
105
|
+
resetSelectedUploadTarget() {
|
|
106
|
+
this.selectedUploadTarget = null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Removes a file from the list of files to be uploaded.
|
|
110
|
+
* @param fileItem - the file item to be removed
|
|
111
|
+
*/
|
|
112
|
+
removeFileItem(fileItem) {
|
|
113
|
+
this.queue = this.queue.filter((f) => f.id !== fileItem.id);
|
|
114
|
+
if (!this.queue.length) {
|
|
115
|
+
this.close();
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// update available upload targets because their validity
|
|
119
|
+
// may be based on the queue size
|
|
120
|
+
this.validateUploadTargets();
|
|
121
|
+
this.setQueueSize();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
getStateRoute() {
|
|
125
|
+
return this.router.url;
|
|
126
|
+
}
|
|
127
|
+
onAgentToggle(info) {
|
|
128
|
+
this.storageService.setItem(this.cacheKey + 'agent-folder', JSON.stringify(info));
|
|
129
|
+
}
|
|
130
|
+
onFavoriteToggle(info) {
|
|
131
|
+
this.storageService.setItem(this.cacheKey + 'favorite-folder', JSON.stringify(info));
|
|
132
|
+
}
|
|
133
|
+
getFolder() {
|
|
134
|
+
//folder from agent
|
|
135
|
+
this.agentService.getLastOpenedFoldersInfo().subscribe((res) => {
|
|
136
|
+
this.lastOpenedFolder = res.map((item) => {
|
|
137
|
+
let target = new UploadTarget(item.id, 'agent', item?.title, this.systemService.getObjectType(item.type).iconId, item.type);
|
|
138
|
+
target.description = item?.data?.description;
|
|
139
|
+
return target;
|
|
140
|
+
});
|
|
141
|
+
this.lastOpenedFolder.forEach(target => target.onUploadSuccess = () => this.router.navigate(['/prepare']));
|
|
142
|
+
});
|
|
143
|
+
// Folder from favorite
|
|
144
|
+
this.userService.getFavorites().subscribe((res) => {
|
|
145
|
+
const favoritesFiltered = res.filter((item) => item.target.folder === true);
|
|
146
|
+
this.folderFavorites = favoritesFiltered.map(item => {
|
|
147
|
+
let target = new UploadTarget(item.target.id, 'favorite', item.title, item.target.icon.id, item.target.type);
|
|
148
|
+
target.description = this.datePipe.transform(item.created);
|
|
149
|
+
return target;
|
|
150
|
+
});
|
|
151
|
+
this.folderFavorites.forEach(target => target.onUploadSuccess = () => this.router.navigate(['/prepare']));
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Close the upload overlay and release all bound resources.
|
|
156
|
+
*/
|
|
157
|
+
close() {
|
|
158
|
+
// unbind bound event listener, when they are not needed anymore
|
|
159
|
+
this.unbindListeners();
|
|
160
|
+
// clear upload queue
|
|
161
|
+
this.queue = [];
|
|
162
|
+
// hide the overlay
|
|
163
|
+
this.setFileOver(false);
|
|
164
|
+
this.invalidInput = false;
|
|
25
165
|
}
|
|
26
166
|
init() {
|
|
167
|
+
this.getFolder();
|
|
27
168
|
// global drag&drop upload will only be available on desktop (web or electron)
|
|
28
169
|
if (EnvironmentEnaio.isMobileEnvironment()) {
|
|
29
170
|
return false;
|
|
@@ -83,7 +224,7 @@ export class UploadOverlayComponent {
|
|
|
83
224
|
// todo: replace by renderer solution when available (https://github.com/angular/angular/issues/15674)
|
|
84
225
|
this.overlayEl.nativeElement.focus();
|
|
85
226
|
// bind late (only, when needed) to dragleave event to avoid heavy processing on every drag event
|
|
86
|
-
this.dragLeaveListener = this.renderer.listen(this.overlayEl.nativeElement, 'dragleave', (
|
|
227
|
+
this.dragLeaveListener = this.renderer.listen(this.overlayEl.nativeElement, 'dragleave', () => {
|
|
87
228
|
this.dragEventCount--;
|
|
88
229
|
if (this.dragEventCount === 0) {
|
|
89
230
|
this.close();
|
|
@@ -128,6 +269,8 @@ export class UploadOverlayComponent {
|
|
|
128
269
|
event.stopPropagation();
|
|
129
270
|
}
|
|
130
271
|
onFilesDropped(fileItems) {
|
|
272
|
+
this.getFolder();
|
|
273
|
+
this.getCachedAccordionState();
|
|
131
274
|
// clear queue when new files are added
|
|
132
275
|
// todo: remove in future releases to support collective file adding
|
|
133
276
|
this.queue = [];
|
|
@@ -153,12 +296,14 @@ export class UploadOverlayComponent {
|
|
|
153
296
|
*/
|
|
154
297
|
validateUploadTargets() {
|
|
155
298
|
this.hasValidUploadTargets = true;
|
|
299
|
+
this.getFolder();
|
|
156
300
|
observableForkJoin(this.uploadTargets.map(t => this.validateUploadTarget(t)))
|
|
157
301
|
.subscribe((res) => {
|
|
158
302
|
this.validUploadTargets = res.filter(r => r.valid).map(filtered => filtered.target).reverse().sort((a, b) => {
|
|
159
303
|
return a.type === 'context' ? -1 : b.type === 'context' ? 1 : 0; // Context should be on top
|
|
160
304
|
});
|
|
161
|
-
|
|
305
|
+
this.validUploadTargets = [...this.validUploadTargets, ...this.folderFavorites, ...this.lastOpenedFolder];
|
|
306
|
+
}, () => {
|
|
162
307
|
this.validUploadTargets = [];
|
|
163
308
|
}, () => {
|
|
164
309
|
this.hasValidUploadTargets = this.validUploadTargets.length > 0;
|
|
@@ -177,7 +322,7 @@ export class UploadOverlayComponent {
|
|
|
177
322
|
valid = this.queue.length > 0 && res.types.length > 0;
|
|
178
323
|
o.next({ target: target, valid: valid });
|
|
179
324
|
o.complete();
|
|
180
|
-
},
|
|
325
|
+
}, () => {
|
|
181
326
|
o.next({ target: target, valid: false });
|
|
182
327
|
o.complete();
|
|
183
328
|
});
|
|
@@ -208,7 +353,7 @@ export class UploadOverlayComponent {
|
|
|
208
353
|
}
|
|
209
354
|
o.next({ target: target, valid: valid });
|
|
210
355
|
o.complete();
|
|
211
|
-
},
|
|
356
|
+
}, () => {
|
|
212
357
|
o.next({ target: target, valid: false });
|
|
213
358
|
o.complete();
|
|
214
359
|
});
|
|
@@ -219,55 +364,9 @@ export class UploadOverlayComponent {
|
|
|
219
364
|
}
|
|
220
365
|
});
|
|
221
366
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
*/
|
|
226
|
-
removeFileItem(fileItem) {
|
|
227
|
-
this.queue = this.queue.filter((f) => f.id !== fileItem.id);
|
|
228
|
-
if (!this.queue.length) {
|
|
229
|
-
this.close();
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
// update available upload targets because their validity
|
|
233
|
-
// may be based on the queue size
|
|
234
|
-
this.validateUploadTargets();
|
|
235
|
-
this.setQueueSize();
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Proceed upload with a selected upload target.
|
|
240
|
-
* @param uploadTarget - the target to upload files to
|
|
241
|
-
*/
|
|
242
|
-
proceedWithUpload(uploadTarget) {
|
|
243
|
-
if (uploadTarget.type !== UploadTarget.CUSTOM && this.queue.length > 1) {
|
|
244
|
-
// For more than one file to be uploaded to a none custom target, we let the user decide if
|
|
245
|
-
// batch upload should be used or not ...
|
|
246
|
-
this.selectedUploadTarget = uploadTarget;
|
|
247
|
-
}
|
|
248
|
-
else if (uploadTarget.type === UploadTarget.OBJECT) {
|
|
249
|
-
// ... otherwise upload is started immediately
|
|
250
|
-
this.startUpload(uploadTarget, [null, this.getStateRoute()]);
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
this.startUpload(uploadTarget, [null, '/prepare']);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Proceed upload using the selected upload target.
|
|
258
|
-
* @param useBatchUpload - flag indicating whether or not to use batch upload
|
|
259
|
-
*/
|
|
260
|
-
proceedWithSelectedTarget(useBatchUpload) {
|
|
261
|
-
this.startUpload(this.selectedUploadTarget, [useBatchUpload, '/prepare']);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Resets the selected upload target.
|
|
265
|
-
*/
|
|
266
|
-
resetSelectedUploadTarget() {
|
|
267
|
-
this.selectedUploadTarget = null;
|
|
268
|
-
}
|
|
269
|
-
getStateRoute() {
|
|
270
|
-
return this.router.url;
|
|
367
|
+
getCachedAccordionState() {
|
|
368
|
+
this.agentAccSelected = JSON.parse(this.storageService.getItem(this.cacheKey + 'agent-folder'));
|
|
369
|
+
this.favoritesAccSelected = JSON.parse(this.storageService.getItem(this.cacheKey + 'favorite-folder'));
|
|
271
370
|
}
|
|
272
371
|
successfulUpload(target, uploadTarget) {
|
|
273
372
|
this.eventService.trigger(EnaioEvent.DMS_OBJECT_UPDATED, uploadTarget.referenceObject);
|
|
@@ -318,18 +417,6 @@ export class UploadOverlayComponent {
|
|
|
318
417
|
}
|
|
319
418
|
this.queueSize = s;
|
|
320
419
|
}
|
|
321
|
-
/**
|
|
322
|
-
* Close the upload overlay and release all bound resources.
|
|
323
|
-
*/
|
|
324
|
-
close() {
|
|
325
|
-
// unbind bound event listener, when they are not needed anymore
|
|
326
|
-
this.unbindListeners();
|
|
327
|
-
// clear upload queue
|
|
328
|
-
this.queue = [];
|
|
329
|
-
// hide the overlay
|
|
330
|
-
this.setFileOver(false);
|
|
331
|
-
this.invalidInput = false;
|
|
332
|
-
}
|
|
333
420
|
setFileOver(value) {
|
|
334
421
|
this.fileOver = value;
|
|
335
422
|
this.uploadRegistry.setOverlayActive(value);
|
|
@@ -368,30 +455,14 @@ export class UploadOverlayComponent {
|
|
|
368
455
|
pasteContainsFiles(event) {
|
|
369
456
|
return Array.from(event.clipboardData.items || []).filter(i => i.kind === 'file').length;
|
|
370
457
|
}
|
|
371
|
-
|
|
372
|
-
targetTrackByFn(index, item) {
|
|
373
|
-
return item.id;
|
|
374
|
-
}
|
|
375
|
-
// ngFor tracking function for file items
|
|
376
|
-
trackByFn(index, item) {
|
|
377
|
-
return index;
|
|
378
|
-
}
|
|
379
|
-
ngOnInit() {
|
|
380
|
-
this.init();
|
|
381
|
-
}
|
|
382
|
-
ngOnDestroy() {
|
|
383
|
-
if (this.dragEnterListener) {
|
|
384
|
-
this.dragEnterListener();
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: UploadOverlayComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i2.PrepareService }, { token: i2.TranslateService }, { token: i2.SystemService }, { token: i2.EventService }, { token: i2.UploadRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: UploadOverlayComponent, selector: "eo-upload-overlay", viewQueries: [{ propertyName: "overlayEl", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{hasFiles: queue.length, invalid: invalidInput, singleFile: queue.length === 1, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <h1 translate>eo.upload.global.headline</h1>\n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\" translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <!-- list of available upload targets -->\n <div class=\"targets\">\n\n <div class=\"target-list\">\n\n <div class=\"upload-target\" *ngFor=\"let t of validUploadTargets; trackBy: targetTrackByFn\"\n (click)=\"proceedWithUpload(t)\"\n [ngSwitch]=\"t.type\">\n\n <!-- upload to root -->\n <ng-container *ngSwitchCase=\"'root'\" >\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document.svg'\"></eo-icon>\n <div class=\"upload-target-general\">\n <div class=\"name\" translate>eo.upload.global.root.title</div>\n <div class=\"description\" translate>eo.upload.global.root.description</div>\n </div>\n </ng-container>\n\n <!-- replace file of a specific dms object -->\n <ng-container *ngSwitchCase=\"'object'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_document_file.svg'\"></eo-icon>\n <div class=\"upload-target-replace\">\n <div class=\"name\" translate>eo.upload.global.object.title</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n\n <!-- add new files to a context folder -->\n <ng-container *ngSwitchCase=\"'context'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document_in_folder.svg'\"></eo-icon>\n <div class=\"upload-target-context\">\n <div class=\"name\">{{'eo.upload.global.context.title'|translate:({context:t.referenceObject.type.label})}}</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n\n <!-- add new files to a context folder structure tree entry -->\n <ng-container *ngSwitchCase=\"'contexttree'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document_in_folder.svg'\"></eo-icon>\n <div class=\"upload-target-contexttree\">\n <div class=\"name\">{{'eo.add.title.location.subfolder'|translate: ({folder: t.subFolder.name})}}</div>\n </div>\n </ng-container>\n\n <!-- custom upload target (e.g. from plugin component) -->\n <ng-container *ngSwitchCase=\"'custom'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n <div class=\"upload-target-custom\">\n <div class=\"name\">{{t.name}}</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n </div>\n\n </div>\n\n </div>\n\n <!-- list of files dragged to the component -->\n <div class=\"files\">\n <div class=\"files-list\">\n <div class=\"file-item\" *ngFor=\"let i of queue; trackBy: trackByFn\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span><span class=\"desc-text\"> {{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"loading\" *ngIf=\"isUploading\"><eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner></div>\n\n\n</div>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:auto}:host #eo-upload-overlay h1{font-size:4em;font-weight:300;color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;max-height:100%;margin:var(--app-pane-padding)}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead)}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{order:0;padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;flex-flow:row nowrap;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.hasFiles .uploady{display:none}:host #eo-upload-overlay.hasFiles .count{display:flex}:host #eo-upload-overlay.hasFiles .contents{display:flex}:host #eo-upload-overlay.singleFile .contents{flex-flow:column}:host #eo-upload-overlay.singleFile .contents .files{padding:0;order:1}:host #eo-upload-overlay.singleFile .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i6.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.FileSizePipe, name: "fileSize" }] }); }
|
|
458
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: UploadOverlayComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i2.PrepareService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i3.AgentService }, { token: i2.SystemService }, { token: i2.EventService }, { token: i2.LocalStorageService }, { token: i2.UploadRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
459
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: UploadOverlayComponent, selector: "eo-upload-overlay", viewQueries: [{ propertyName: "overlayEl", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n @for (i of queue; track $index) {\n <div class=\"file-item\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\"> {{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:hidden}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center;overflow:hidden;align-content:center;flex-wrap:wrap}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i7.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i8.SimpleAccordionComponent, selector: "eo-simple-accordion", inputs: ["header", "item", "styles", "headerClass", "selected"], outputs: ["selectChange"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.FileSizePipe, name: "fileSize" }] }); }
|
|
389
460
|
}
|
|
390
461
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: UploadOverlayComponent, decorators: [{
|
|
391
462
|
type: Component,
|
|
392
|
-
args: [{ selector: 'eo-upload-overlay', template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{hasFiles: queue.length, invalid: invalidInput, singleFile: queue.length === 1, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <h1 translate>eo.upload.global.headline</h1>\n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\" translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <!-- list of available upload targets -->\n <div class=\"targets\">\n\n <div class=\"target-list\">\n\n <div class=\"upload-target\" *ngFor=\"let t of validUploadTargets; trackBy: targetTrackByFn\"\n (click)=\"proceedWithUpload(t)\"\n [ngSwitch]=\"t.type\">\n\n <!-- upload to root -->\n <ng-container *ngSwitchCase=\"'root'\" >\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document.svg'\"></eo-icon>\n <div class=\"upload-target-general\">\n <div class=\"name\" translate>eo.upload.global.root.title</div>\n <div class=\"description\" translate>eo.upload.global.root.description</div>\n </div>\n </ng-container>\n\n <!-- replace file of a specific dms object -->\n <ng-container *ngSwitchCase=\"'object'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_document_file.svg'\"></eo-icon>\n <div class=\"upload-target-replace\">\n <div class=\"name\" translate>eo.upload.global.object.title</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n\n <!-- add new files to a context folder -->\n <ng-container *ngSwitchCase=\"'context'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document_in_folder.svg'\"></eo-icon>\n <div class=\"upload-target-context\">\n <div class=\"name\">{{'eo.upload.global.context.title'|translate:({context:t.referenceObject.type.label})}}</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n\n <!-- add new files to a context folder structure tree entry -->\n <ng-container *ngSwitchCase=\"'contexttree'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_document_in_folder.svg'\"></eo-icon>\n <div class=\"upload-target-contexttree\">\n <div class=\"name\">{{'eo.add.title.location.subfolder'|translate: ({folder: t.subFolder.name})}}</div>\n </div>\n </ng-container>\n\n <!-- custom upload target (e.g. from plugin component) -->\n <ng-container *ngSwitchCase=\"'custom'\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n <div class=\"upload-target-custom\">\n <div class=\"name\">{{t.name}}</div>\n <div class=\"description\">{{t.description}}</div>\n </div>\n </ng-container>\n </div>\n\n </div>\n\n </div>\n\n <!-- list of files dragged to the component -->\n <div class=\"files\">\n <div class=\"files-list\">\n <div class=\"file-item\" *ngFor=\"let i of queue; trackBy: trackByFn\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span><span class=\"desc-text\"> {{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"loading\" *ngIf=\"isUploading\"><eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner></div>\n\n\n</div>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:auto}:host #eo-upload-overlay h1{font-size:4em;font-weight:300;color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;max-height:100%;margin:var(--app-pane-padding)}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead)}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{order:0;padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;flex-flow:row nowrap;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.hasFiles .uploady{display:none}:host #eo-upload-overlay.hasFiles .count{display:flex}:host #eo-upload-overlay.hasFiles .contents{display:flex}:host #eo-upload-overlay.singleFile .contents{flex-flow:column}:host #eo-upload-overlay.singleFile .contents .files{padding:0;order:1}:host #eo-upload-overlay.singleFile .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}\n"] }]
|
|
393
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i2.PrepareService }, { type: i2.TranslateService }, { type: i2.SystemService }, { type: i2.EventService }, { type: i2.UploadRegistryService }], propDecorators: { overlayEl: [{
|
|
463
|
+
args: [{ selector: 'eo-upload-overlay', template: "<div id=\"eo-upload-overlay\" #overlay class=\"dark\" *ngIf=\"fileOver\" tabindex=\"1\"\n [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"close()\"></eo-icon>\n\n <div class=\"count\">\n <div>{{queue.length}}</div>\n <div class=\"queueSize\">{{queueSize | fileSize}}</div>\n </div>\n\n <div class=\"headline\">\n <h1 translate>eo.upload.global.headline</h1>\n </div>\n \n <eo-icon class=\"uploady\" [iconSrc]=\"'assets/_default/svg/ic_upload.svg'\"></eo-icon>\n\n <!-- batch upload dialog -->\n <div class=\"batch-dialog\" *ngIf=\"!invalidInput && selectedUploadTarget && !isUploading\">\n\n <h2 translate>eo.upload.global.choose.title</h2>\n <p translate>eo.upload.global.choose.message</p>\n <div class=\"actions\">\n <button (click)=\"resetSelectedUploadTarget()\" translate>eo.cta.button.cancel</button>\n <button (click)=\"proceedWithSelectedTarget(false)\" class=\"primary\"\n translate>eo.upload.global.choose.single</button>\n <button (click)=\"proceedWithSelectedTarget(true)\" class=\"primary\" translate>eo.upload.global.choose.multi</button>\n </div>\n </div>\n\n <!-- invalid input dialog -->\n <div class=\"batch-dialog\" *ngIf=\"hasValidUploadTargets && invalidInput\">\n\n <h2 translate>eo.upload.global.invalid.title</h2>\n <p translate>eo.upload.global.invalid.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <!-- no upload targets available -->\n <div class=\"batch-dialog\" *ngIf=\"!hasValidUploadTargets\">\n\n <h2 translate>eo.upload.global.notarget.title</h2>\n <p translate>eo.upload.global.notarget.message</p>\n <div class=\"actions\">\n <button (click)=\"close()\" translate>eo.upload.global.close</button>\n </div>\n </div>\n\n <div class=\"contents\" *ngIf=\"hasValidUploadTargets && !invalidInput && !selectedUploadTarget && !isUploading\">\n\n <div class=\"section\">\n <!-- list of available upload targets -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (targetType of targetTypes; track targetType.type) {\n @for (t of validUploadTargets; track t.id) {\n @if (t.type === targetType.type) {\n <ng-container *ngTemplateOutlet=\"uploadTargetTemplate; context: {\n iconSrc: targetType.iconSrc,\n targetClass: targetType.targetClass,\n name: targetType.type === 'custom' ? t.name : (targetType.type === 'context' ? (targetType.name | translate : { context: t.referenceObject.type.label }) : (targetType. name | translate)),\n description: targetType.type === 'custom' || targetType.type === 'object' || targetType. type === 'context' ? t.description : (targetType.description | translate),\n targets: t\n }\">\n </ng-container>\n }\n }\n }\n </div>\n </div>\n\n <!-- upload to favorite -->\n @if (folderFavorites.length > 0) {\n <eo-simple-accordion [selected]=\"favoritesAccSelected\" [header]=\"'eo.upload.global.context.favorite' | translate\"\n (selectChange)=\"onFavoriteToggle($event)\">\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'favorite') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-favorite\">\n <div class=\"name\">{{t.title}}\n <div class=\"description\">{{t.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n\n @if(lastOpenedFolder.length > 0){\n <eo-simple-accordion [selected]=\"agentAccSelected\" [header]=\"'eo.upload.global.context.agent' | translate\"\n (selectChange)=\"onAgentToggle($event)\">\n <!-- upload to last opened folder -->\n <div class=\"targets\">\n <div class=\"target-list\">\n @for (t of validUploadTargets; track $index) {\n @if (t.type === 'agent') {\n <div class=\"upload-target\" (click)=\"proceedWithUpload(t)\">\n <ng-container>\n <eo-icon [iconId]=\"t.iconId\"></eo-icon>\n <div class=\"upload-target-agent\">\n <div class=\"name\">{{t?.title}}\n <div class=\"description\">{{t?.description}}</div>\n </div>\n </div>\n </ng-container>\n </div>\n }\n }\n </div>\n </div>\n </eo-simple-accordion>\n }\n </div>\n <!-- list of files dragged to the component -->\n <div class=\"files\" [ngClass]=\"{file: queue.length, invalid: invalidInput, uploading: isUploading}\">\n <div class=\"files-list\">\n @for (i of queue; track $index) {\n <div class=\"file-item\">\n <div>\n <div class=\"name\">{{i.name}}</div>\n <div class=\"desc\"><span class=\"size\">{{i.size | fileSize}}</span>\n <span class=\"desc-text\"> {{i.type}}</span></div>\n </div>\n <eo-icon class=\"button white\" (click)=\"removeFileItem(i)\"\n [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (isUploading) {\n <div class=\"loading\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n }\n</div>\n\n<ng-template #uploadTargetTemplate let-iconSrc=\"iconSrc\" let-targetClass=\"targetClass\" let-name=\"name\"\n let-description=\"description\" let-targets=\"targets\">\n <div class=\"upload-target\" (click)=\"proceedWithUpload(targets)\">\n <ng-container>\n <eo-icon [iconSrc]=\"iconSrc\"></eo-icon>\n <div [ngClass]=\"targetClass\">\n <div class=\"name\">{{ name }}</div>\n <div class=\"description\">{{ description }}</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host #eo-upload-overlay{position:absolute;inset:0;z-index:9900;background-color:rgba(var(--color-black-rgb),.85);animation:eoFadeIn var(--app-default-transition-duration);display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-white);overflow:hidden}:host #eo-upload-overlay .headline{display:flex;width:100%;min-width:200px;justify-content:center;overflow:hidden;align-content:center;flex-wrap:wrap}:host #eo-upload-overlay .headline h1{font-size:4em;font-weight:var(--font-weight-light);color:rgba(var(--color-white-rgb),.5);animation:eoFadeInDown var(--app-default-transition-duration);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .uploady{animation:uploady 2s linear infinite;width:20vw;height:20vw;display:block}:host #eo-upload-overlay .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding)}:host #eo-upload-overlay .count{position:absolute;display:none;right:calc(var(--app-pane-padding) * 3);top:calc(var(--app-pane-padding) * 3);font-size:10vh;flex-flow:column;align-items:flex-end;line-height:1em;animation:eoFadeInDown var(--app-default-transition-duration)}:host #eo-upload-overlay .count .queueSize{font-size:var(--font-caption);line-height:var(--font-caption);margin-top:calc(var(--app-pane-padding) / 2);border-radius:2px;padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .batch-dialog{max-width:350px}:host #eo-upload-overlay .batch-dialog .actions{display:flex;padding-top:var(--app-pane-padding);justify-content:flex-end}:host #eo-upload-overlay .batch-dialog .actions button{margin:0 calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .contents{display:none;flex-flow:row wrap;margin:var(--app-pane-padding);max-width:100%;max-height:100%;width:100%;height:100%}:host #eo-upload-overlay .targets{order:1;margin:0 calc(var(--app-pane-padding) / 2);display:flex;flex-flow:column;justify-content:center;position:relative}:host #eo-upload-overlay .targets .target-list{animation:eoFadeInRight var(--app-default-transition-duration);overflow-y:auto}:host #eo-upload-overlay .targets .target-list h2{font-size:var(--font-subhead);font-weight:400}:host #eo-upload-overlay .targets .target-list .upload-target{background:rgba(var(--color-accent),.6);border:1px solid rgba(var(--color-white-rgb),.4);margin:calc(var(--app-pane-padding) / 2) 0;padding:calc(var(--app-pane-padding) / 2);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;cursor:pointer;flex-flow:row nowrap;align-items:center}:host #eo-upload-overlay .targets .target-list .upload-target eo-icon{flex:0 0 auto;margin:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div{flex:1 1 auto;margin:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay .targets .target-list .upload-target>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .targets .target-list .upload-target>div .description{width:100%;max-width:250px;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-caption);opacity:.7}:host #eo-upload-overlay .targets .target-list .upload-target:hover{background-color:var(--color-accent)}:host #eo-upload-overlay .files{padding:calc(var(--app-pane-padding) / 4);margin:0 calc(var(--app-pane-padding) / 2);overflow-y:auto;border-radius:2px;max-width:150px;width:95%;min-width:25%;animation:eoFadeInLeft var(--app-default-transition-duration);display:flex;flex-flow:column;justify-content:center}:host #eo-upload-overlay .files .files-list{height:100%;width:100%}:host #eo-upload-overlay .files .files-list .file-item{display:flex;align-items:center;cursor:default;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 4);margin-bottom:calc(var(--app-pane-padding) / 4);background-color:rgba(var(--color-white-rgb),.1);-webkit-user-select:none;user-select:none}:host #eo-upload-overlay .files .files-list .file-item>div{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .name{font-size:var(--font-subhead);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}:host #eo-upload-overlay .files .files-list .file-item>div .desc{color:rgba(var(--color-white-rgb),.75);font-size:var(--font-hint);margin-top:calc(var(--app-pane-padding) / 4)}:host #eo-upload-overlay .files .files-list .file-item>div .size{border-radius:2px;display:inline-block;padding:0 4px;background-color:rgba(var(--color-white-rgb),.2)}:host #eo-upload-overlay .files .files-list .file-item eo-icon{flex:0 0 auto;width:18px;height:18px;padding:calc(var(--app-pane-padding) / 2)}:host #eo-upload-overlay.invalid>h1,:host #eo-upload-overlay.invalid .uploady{display:none}:host #eo-upload-overlay.file .uploady{display:none}:host #eo-upload-overlay.file .contents{flex-flow:row-reverse;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex:1 1;flex-direction:row-reverse}:host #eo-upload-overlay.file .contents .section{display:flow-root;width:25%;min-width:200px;flex:0 0 auto;max-height:fit-content;overflow:hidden;box-sizing:content-box}:host #eo-upload-overlay.file .contents .targets{order:0;margin-bottom:var(--app-pane-padding)}:host #eo-upload-overlay.uploading h1,:host #eo-upload-overlay.uploading .close{display:none}@keyframes uploady{0%{transform:translateY(0);opacity:.1}50%{transform:translateY(-40px);opacity:.3}to{transform:translateY(0);opacity:.1}}::ng-deep eo-simple-accordion{display:flex;flex-flow:column;flex:0 0 auto}::ng-deep eo-simple-accordion:not(.selected){margin-bottom:var(--app-pane-padding)}::ng-deep eo-simple-accordion>section{min-height:50px;max-height:190px;overflow-y:auto;overflow-x:hidden}\n"] }]
|
|
464
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i2.PrepareService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i3.AgentService }, { type: i2.SystemService }, { type: i2.EventService }, { type: i2.LocalStorageService }, { type: i2.UploadRegistryService }], propDecorators: { overlayEl: [{
|
|
394
465
|
type: ViewChild,
|
|
395
466
|
args: ['overlay']
|
|
396
467
|
}] } });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQXNDLE1BQU0sZUFBZSxDQUFDO0FBRTNHLE9BQU8sRUFHTCxVQUFVLEVBRVYsWUFBWSxFQUNaLGNBQWMsRUFFZCxLQUFLLEVBRUwsZ0JBQWdCLEVBQ2pCLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7QUFPdEIsTUFBTSxPQUFPLHNCQUFzQjtJQXNCakMsWUFBb0IsTUFBYyxFQUNkLFFBQW1CLEVBQ25CLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGNBQXFDO1FBTnJDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUF4QnpELFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBTTdCLHVCQUFrQixHQUFtQixFQUFFLENBQUM7UUFHaEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBT25DLG1CQUFj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Q25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7OEdBemJVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLCtKQ3JCbkMscTBLQTRIQTs7MkZEdkdhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxtQkFBbUI7MFBBTVAsU0FBUztzQkFBOUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtvZiBhcyBvYnNlcnZhYmxlT2YsIGZvcmtKb2luIGFzIG9ic2VydmFibGVGb3JrSm9pbiwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBPYmplY3RUeXBlLFxuICBFdmVudFNlcnZpY2UsXG4gIEVuYWlvRXZlbnQsXG4gIFVwbG9hZFJlZ2lzdHJ5U2VydmljZSxcbiAgVXBsb2FkVGFyZ2V0LFxuICBVcGxvYWRGaWxlSXRlbSxcbiAgUHJlcGFyZVNlcnZpY2UsXG4gIFV0aWxzLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBFbnZpcm9ubWVudEVuYWlvLCBTeXN0ZW1TZXJ2aWNlXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLXVwbG9hZC1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXknKSBvdmVybGF5RWw6IEVsZW1lbnRSZWY7XG5cbiAgcXVldWU6IFVwbG9hZEZpbGVJdGVtW10gPSBbXTtcbiAgZmlsZU92ZXI6IGJvb2xlYW47XG4gIGlzVXBsb2FkaW5nOiBib29sZWFuO1xuICBoYXNWYWxpZFVwbG9hZFRhcmdldHM6IGJvb2xlYW47XG4gIGludmFsaWRJbnB1dDogYm9vbGVhbjtcbiAgcXVldWVTaXplOiBudW1iZXI7XG4gIHZhbGlkVXBsb2FkVGFyZ2V0czogVXBsb2FkVGFyZ2V0W10gPSBbXTtcbiAgc2VsZWN0ZWRVcGxvYWRUYXJnZXQ6IFVwbG9hZFRhcmdldDtcblxuICBwcml2YXRlIHVwbG9hZFRhcmdldHM6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIHByaXZhdGUgZHJhZ0xlYXZlTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGRyb3BMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgZHJhZ092ZXJMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgZXNjS2V5TGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGRyYWdFbnRlckxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBwYXN0ZUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcmFnRXZlbnRDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAgICAgICBwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRSZWdpc3RyeTogVXBsb2FkUmVnaXN0cnlTZXJ2aWNlKSB7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG5cbiAgICAvLyBnbG9iYWwgZHJhZyZkcm9wIHVwbG9hZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIG9uIGRlc2t0b3AgKHdlYiBvciBlbGVjdHJvbilcbiAgICBpZiAoRW52aXJvbm1lbnRFbmFpby5pc01vYmlsZUVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHNcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnVwbG9hZFRhcmdldHMkLnN1YnNjcmliZSgodXBsb2FkVGFyZ2V0czogVXBsb2FkVGFyZ2V0W10pID0+IHtcbiAgICAgIHRoaXMudXBsb2FkVGFyZ2V0cyA9IHVwbG9hZFRhcmdldHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3RlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25QYXN0ZShlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0VudGVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgdGhpcy5vbkRyYWdFbnRlcihlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5maWxlT3ZlciAmJiB0aGlzLnBhc3RlQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgbGV0IHRyYW5zZmVyID0gZS5jbGlwYm9hcmREYXRhO1xuICAgICAgaWYgKCF0cmFuc2Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2Zlci5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhbnNmZXIuaXRlbXNbaV0ua2luZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICBpZiAoZmUgJiYgZmUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmludmFsaWRJbnB1dCkge1xuICAgICAgICB0aGlzLl9wcmV2ZW50QW5kU3RvcChlKTtcbiAgICAgICAgdGhpcy5zZXRGaWxlT3Zlcih0cnVlKTtcbiAgICAgICAgdGhpcy5vbkZpbGVzRHJvcHBlZChBcnJheS5mcm9tKHRyYW5zZmVyLmZpbGVzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRyYWdFbnRlcihlOiBEcmFnRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmhhc1ZhbGlkVXBsb2FkVGFyZ2V0cyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmZpbGVPdmVyICYmIHRoaXMuZHJhZ0NvbnRhaW5zRmlsZXMoZSkpIHtcbiAgICAgIHRoaXMuZHJhZ0V2ZW50Q291bnQgPSAwO1xuICAgICAgdGhpcy5zZXRGaWxlT3Zlcih0cnVlKTtcblxuXG4gICAgICAvLyB1c2UgdGltZW91dCBoZXJlIHRvIGZvcmNlIGFuZ3VsYXIgZGlnZXN0IGN5Y2xlIGJlZm9yZSBjb250aW51aW5nLCBiZWNhdXNlIHdlIGFyZSBhY2Nlc3NpbmcgZG9tIGVsZW1lbnRzXG4gICAgICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgKCpuZ0lmKSB1bnRpbCBmaWxlT3ZlciBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyB0b2RvOiByZXBsYWNlIGJ5IHJlbmRlcmVyIHNvbHV0aW9uIHdoZW4gYXZhaWxhYmxlIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTY3NClcbiAgICAgICAgdGhpcy5vdmVybGF5RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAvLyBiaW5kIGxhdGUgKG9ubHksIHdoZW4gbmVlZGVkKSB0byBkcmFnbGVhdmUgZXZlbnQgdG8gYXZvaWQgaGVhdnkgcHJvY2Vzc2luZyBvbiBldmVyeSBkcmFnIGV2ZW50XG4gICAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ2xlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgIHRoaXMuZHJhZ0V2ZW50Q291bnQtLTtcbiAgICAgICAgICBpZiAodGhpcy5kcmFnRXZlbnRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJvcCcsIChldnQpID0+IHtcbiAgICAgICAgICBsZXQgdHJhbnNmZXIgPSB0aGlzLl9nZXRUcmFuc2ZlcihldnQpO1xuICAgICAgICAgIGlmICghdHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcblxuICAgICAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXIuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgaWYgKGZlICYmIGZlLmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgIHRoaXMuaW52YWxpZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmludmFsaWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkZpbGVzRHJvcHBlZCh0cmFuc2Zlci5maWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ292ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgbGV0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZ0KTtcbiAgICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZXNEcm9wcGVkKGZpbGVJdGVtczogRmlsZVtdKSB7XG4gICAgLy8gY2xlYXIgcXVldWUgd2hlbiBuZXcgZmlsZXMgYXJlIGFkZGVkXG4gICAgLy8gdG9kbzogcmVtb3ZlIGluIGZ1dHVyZSByZWxlYXNlcyB0byBzdXBwb3J0IGNvbGxlY3RpdmUgZmlsZSBhZGRpbmdcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlSXRlbXMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChuZXcgVXBsb2FkRmlsZUl0ZW0oZmlsZSkpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgRVNDIGtleSBsaXN0ZW5lciBmb3IgY2xvc2luZyB0aGUgZGlhbG9nIGFzIGxhdGUgYXMgcG9zc2libGVcbiAgICBpZiAoIXRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSB0b3RhbCBzaXplIG9mIHF1ZXVlXG4gICAgdGhpcy5zZXRRdWV1ZVNpemUoKTtcbiAgICAvLyBmaWx0ZXIgYXZhaWxhYmxlIHRhcmdldHNcbiAgICB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHMsIHNvIG9ubHkgdmFsaWQgdGFyZ2V0cyB3aWxsIGJlIHNob3duLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldHMoKSB7XG4gICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0cnVlO1xuICAgIG9ic2VydmFibGVGb3JrSm9pbih0aGlzLnVwbG9hZFRhcmdldHMubWFwKHQgPT4gdGhpcy52YWxpZGF0ZVVwbG9hZFRhcmdldCh0KSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiB7IHRhcmdldDogVXBsb2FkVGFyZ2V0LCB2YWxpZDogYm9vbGVhbiB9W10pID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IHJlcy5maWx0ZXIociA9PiByLnZhbGlkKS5tYXAoZmlsdGVyZWQgPT4gZmlsdGVyZWQudGFyZ2V0KS5yZXZlcnNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gJ2NvbnRleHQnID8gLTEgOiBiLnR5cGUgPT09ICdjb250ZXh0JyA/IDEgOiAwOyAvLyBDb250ZXh0IHNob3VsZCBiZSBvbiB0b3BcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFtdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cy5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldCh0YXJnZXQ6IFVwbG9hZFRhcmdldCk6IE9ic2VydmFibGU8eyB0YXJnZXQ6IFVwbG9hZFRhcmdldCwgdmFsaWQ6IGJvb2xlYW4gfT4ge1xuXG4gICAgaWYgKCF0aGlzLnF1ZXVlKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHt0YXJnZXQ6IHRhcmdldCwgdmFsaWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG8gPT4ge1xuICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0YXJnZXQudHlwZSA9PT0gVXBsb2FkVGFyZ2V0LlJPT1QpIHtcblxuICAgICAgICAvLyB0b2RvOiBhcmUgdGhlcmUgb3RoZXIgcmVzdHJpY3Rpb25zIG9uIHJvb3QgdGFyZ2V0P1xuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXBhcmVDaGlsZFR5cGVzKG51bGwsIHRydWUpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXM6IHsgcGFyZW50OiBzdHJpbmcsIHR5cGVzOiBPYmplY3RUeXBlW10gfSkgPT4ge1xuICAgICAgICAgICAgICB2YWxpZCA9IHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiByZXMudHlwZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgby5uZXh0KHt0YXJnZXQ6IHRhcmdldCwgdmFsaWQ6IHZhbGlkfSk7XG4gICAgICAgICAgICAgIG8uY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5PQkpFQ1QpIHtcblxuICAgICAgICAvLyB0b2RvOiBjaGVjayBpZiB0aGUgcmVmZXJlbmNlIG9iamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gZmlsZSB0eXBlXG4gICAgICAgIHZhbGlkID0gdGFyZ2V0LnJlZmVyZW5jZU9iamVjdCAmJlxuICAgICAgICAgIHRhcmdldC5yZWZlcmVuY2VPYmplY3QudHlwZS5tYXhGaWxlcyA+IDAgJiZcbiAgICAgICAgICAhdGFyZ2V0LnJlZmVyZW5jZU9iamVjdC5sb2NrICYmXG4gICAgICAgICAgIXRhcmdldC5yZWZlcmVuY2VPYmplY3QuaXNGaW5hbGl6ZWQgJiZcbiAgICAgICAgICAodGFyZ2V0LnJlZmVyZW5jZU9iamVjdC5yaWdodHMgJiYgdGFyZ2V0LnJlZmVyZW5jZU9iamVjdC5yaWdodHMuZWRpdCkgJiZcbiAgICAgICAgICB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIHRhcmdldC5yZWZlcmVuY2VPYmplY3QuZGF0YS55dXZzaWdzdGF0dXMgIT09ICdzaWduZWQnICYmXG4gICAgICAgICAgdGFyZ2V0LnJlZmVyZW5jZU9iamVjdC5kYXRhLnl1dnNpZ3N0YXR1cyAhPT0gJ2lucHJvY2Vzcyc7XG4gICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiB2YWxpZH0pO1xuICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuQ09OVEVYVCB8fCB0YXJnZXQudHlwZSA9PT0gVXBsb2FkVGFyZ2V0LkNPTlRFWFRfVFJFRSkge1xuXG4gICAgICAgIC8vIHRvZG86IGFkZCBjaGVja3MgcmVsYXRlZCB0byB0aGUgcmVmZXJlbmNlIG9iamVjdCAoZS5nLiBhbGxvd2VkIGZpbGUgdHlwZXMpXG4gICAgICAgIHRoaXMucHJlcGFyZVNlcnZpY2UuZ2V0UHJlcGFyZUNoaWxkVHlwZXModGFyZ2V0LnJlZmVyZW5jZU9iamVjdC5pZCwgdHJ1ZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKHJlczogeyBwYXJlbnQ6IHN0cmluZywgdHlwZXM6IE9iamVjdFR5cGVbXSB9KSA9PiB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdGFyZ2V0LnJlZmVyZW5jZU9iamVjdCAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgcmVzLnR5cGVzLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgICAgLy8gZm9yIENPTlRFWFRfVFJFRSB0YXJnZXRzIGFsc28gY2hlY2sgaWYgdGhlIGRlc2lyZWQgbm9kZVxuICAgICAgICAgICAgICAvLyB0eXBlIGlzIHBhcnQgb2YgdGhlIHByZXBhcmUgY2hpbGQgdHlwZXNcbiAgICAgICAgICAgICAgaWYgKHRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuQ09OVEVYVF9UUkVFICYmIHRhcmdldC5zdWJGb2xkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJGb2xkZXI6IGFueSA9IHRhcmdldC5zdWJGb2xkZXI7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSAhIXJlcy50eXBlcy5maW5kKHQgPT4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmltcGxlbWVudHNUeXBlKHQsIHN1YkZvbGRlci5kYXRhLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiB2YWxpZH0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogZmFsc2V9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogZmFsc2V9KTtcbiAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBmaWxlIGZyb20gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYmUgdXBsb2FkZWQuXG4gICAqIEBwYXJhbSBmaWxlSXRlbSAtIHRoZSBmaWxlIGl0ZW0gdG8gYmUgcmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZUZpbGVJdGVtKGZpbGVJdGVtOiBVcGxvYWRGaWxlSXRlbSkge1xuXG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBmaWxlSXRlbS5pZCk7XG4gICAgaWYgKCF0aGlzLnF1ZXVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgYXZhaWxhYmxlIHVwbG9hZCB0YXJnZXRzIGJlY2F1c2UgdGhlaXIgdmFsaWRpdHlcbiAgICAgIC8vIG1heSBiZSBiYXNlZCBvbiB0aGUgcXVldWUgc2l6ZVxuICAgICAgdGhpcy52YWxpZGF0ZVVwbG9hZFRhcmdldHMoKTtcbiAgICAgIHRoaXMuc2V0UXVldWVTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2NlZWQgdXBsb2FkIHdpdGggYSBzZWxlY3RlZCB1cGxvYWQgdGFyZ2V0LlxuICAgKiBAcGFyYW0gdXBsb2FkVGFyZ2V0IC0gdGhlIHRhcmdldCB0byB1cGxvYWQgZmlsZXMgdG9cbiAgICovXG4gIHB1YmxpYyBwcm9jZWVkV2l0aFVwbG9hZCh1cGxvYWRUYXJnZXQ6IFVwbG9hZFRhcmdldCkge1xuXG4gICAgaWYgKHVwbG9hZFRhcmdldC50eXBlICE9PSBVcGxvYWRUYXJnZXQuQ1VTVE9NICYmIHRoaXMucXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRm9yIG1vcmUgdGhhbiBvbmUgZmlsZSB0byBiZSB1cGxvYWRlZCB0byBhIG5vbmUgY3VzdG9tIHRhcmdldCwgd2UgbGV0IHRoZSB1c2VyIGRlY2lkZSBpZlxuICAgICAgLy8gYmF0Y2ggdXBsb2FkIHNob3VsZCBiZSB1c2VkIG9yIG5vdCAuLi5cblxuXG4gICAgICB0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0ID0gdXBsb2FkVGFyZ2V0O1xuICAgIH0gZWxzZSBpZiAodXBsb2FkVGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5PQkpFQ1QpIHtcbiAgICAgIC8vIC4uLiBvdGhlcndpc2UgdXBsb2FkIGlzIHN0YXJ0ZWQgaW1tZWRpYXRlbHlcbiAgICAgIHRoaXMuc3RhcnRVcGxvYWQodXBsb2FkVGFyZ2V0LCBbbnVsbCwgdGhpcy5nZXRTdGF0ZVJvdXRlKCldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFVwbG9hZCh1cGxvYWRUYXJnZXQsIFtudWxsLCAnL3ByZXBhcmUnXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2NlZWQgdXBsb2FkIHVzaW5nIHRoZSBzZWxlY3RlZCB1cGxvYWQgdGFyZ2V0LlxuICAgKiBAcGFyYW0gdXNlQmF0Y2hVcGxvYWQgLSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gdXNlIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHVibGljIHByb2NlZWRXaXRoU2VsZWN0ZWRUYXJnZXQodXNlQmF0Y2hVcGxvYWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0YXJ0VXBsb2FkKHRoaXMuc2VsZWN0ZWRVcGxvYWRUYXJnZXQsIFt1c2VCYXRjaFVwbG9hZCwgJy9wcmVwYXJlJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRUYXJnZXQgPSBudWxsO1xuICB9XG5cbiAgZ2V0U3RhdGVSb3V0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsO1xuICB9XG5cblxuICBwcml2YXRlIHN1Y2Nlc3NmdWxVcGxvYWQodGFyZ2V0LCB1cGxvYWRUYXJnZXQpIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuRE1TX09CSkVDVF9VUERBVEVELCB1cGxvYWRUYXJnZXQucmVmZXJlbmNlT2JqZWN0KTtcbiAgICB1cGxvYWRUYXJnZXQub25VcGxvYWRTdWNjZXNzKHRhcmdldCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGFjdHVhbCB1cGxvYWQuXG4gICAqIEBwYXJhbSB1cGxvYWRUYXJnZXQgLSB0YXJnZXQgdG8gdXBsb2FkIHRoZSBmaWxlcyB0b1xuICAgKiBAcGFyYW0gdXNlQmF0Y2hVcGxvYWQgLSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gdXNlIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFVwbG9hZCh1cGxvYWRUYXJnZXQ6IFVwbG9hZFRhcmdldCwgWy4uLmFyZ3NdKSB7XG5cbiAgICBjb25zdCBbdXNlQmF0Y2hVcGxvYWQsIHRhcmdldF0gPSBhcmdzO1xuXG4gICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy51bmJpbmRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAudXBsb2FkVG9UYXJnZXQodXBsb2FkVGFyZ2V0LCB0aGlzLnF1ZXVlLCB1c2VCYXRjaFVwbG9hZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAodXBsb2FkVGFyZ2V0LnN1YkZvbGRlciAmJiB1cGxvYWRUYXJnZXQuc3ViRm9sZGVyLmRhdGEuZGF0YSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgICAgICBsZXQgb2JzID0gW107XG4gICAgICAgICAgICAgIHJlcy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgICAgIG9icy5wdXNoKHRoaXMucHJlcGFyZVNlcnZpY2UudXBkYXRlUHJlcGFyZWRJdGVtSW5kZXhEYXRhKHIuaWQsIHVwbG9hZFRhcmdldC5zdWJGb2xkZXIuZGF0YS5kYXRhKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBvYnNlcnZhYmxlRm9ya0pvaW4ob2JzKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWNjZXNzZnVsVXBsb2FkKHRhcmdldCwgdXBsb2FkVGFyZ2V0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnVwZGF0ZVByZXBhcmVkSXRlbUluZGV4RGF0YShyZXMuaWQsIHVwbG9hZFRhcmdldC5zdWJGb2xkZXIuZGF0YS5kYXRhKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWNjZXNzZnVsVXBsb2FkKHRhcmdldCwgdXBsb2FkVGFyZ2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSwgVXRpbHMudGhyb3coKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB1cGxvYWRUYXJnZXQub25VcGxvYWRGYWlsKCk7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKSlcbiAgICAgICk7XG4gICAgdGhpcy5yZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFF1ZXVlU2l6ZSgpIHtcbiAgICBsZXQgcyA9IDA7XG4gICAgZm9yIChsZXQgZiBvZiB0aGlzLnF1ZXVlKSB7XG4gICAgICBzICs9IGYuc2l6ZTtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZVNpemUgPSBzO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB1cGxvYWQgb3ZlcmxheSBhbmQgcmVsZWFzZSBhbGwgYm91bmQgcmVzb3VyY2VzLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgLy8gdW5iaW5kIGJvdW5kIGV2ZW50IGxpc3RlbmVyLCB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW55bW9yZVxuICAgIHRoaXMudW5iaW5kTGlzdGVuZXJzKCk7XG4gICAgLy8gY2xlYXIgdXBsb2FkIHF1ZXVlXG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIC8vIGhpZGUgdGhlIG92ZXJsYXlcbiAgICB0aGlzLnNldEZpbGVPdmVyKGZhbHNlKTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWxlT3Zlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmlsZU92ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnNldE92ZXJsYXlBY3RpdmUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcmFnT3Zlckxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ092ZXJMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3BMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcm9wTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJvcExpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgZHJhZyBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIGRyYWcgZXZlbnQgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBudW1iZXIgb2YgZmlsZXNcbiAgICovXG4gICBwcml2YXRlIGRyYWdDb250YWluc0ZpbGVzKGV2ZW50OiBEcmFnRXZlbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcyB8fCBbXSkuZmlsdGVyKGkgPT4gaS5raW5kID09PSAnZmlsZScpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgcGFzdGUgZXZlbnQgY29udGFpbnMgb25lIG9yIG1vcmUgZmlsZXMuXG4gICAqIEBwYXJhbSBldmVudCAtIHRoZSBwYXN0ZSBldmVudCB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIG51bWJlciBvZiBmaWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBwYXN0ZUNvbnRhaW5zRmlsZXMoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShldmVudC5jbGlwYm9hcmREYXRhLml0ZW1zIHx8IFtdKS5maWx0ZXIoaSA9PiBpLmtpbmQgPT09ICdmaWxlJykubGVuZ3RoO1xuICB9XG5cbiAgLy8gbmdGb3IgdHJhY2tpbmcgZnVuY3Rpb24gZm9yIHVwbG9hZCB0YXJnZXRzXG4gIHRhcmdldFRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgLy8gbmdGb3IgdHJhY2tpbmcgZnVuY3Rpb24gZm9yIGZpbGUgaXRlbXNcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcmFnRW50ZXJMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBpZD1cImVvLXVwbG9hZC1vdmVybGF5XCIgI292ZXJsYXkgY2xhc3M9XCJkYXJrXCIgKm5nSWY9XCJmaWxlT3ZlclwiIHRhYmluZGV4PVwiMVwiXG4gICAgIFtuZ0NsYXNzXT1cIntoYXNGaWxlczogcXVldWUubGVuZ3RoLCBpbnZhbGlkOiBpbnZhbGlkSW5wdXQsIHNpbmdsZUZpbGU6IHF1ZXVlLmxlbmd0aCA9PT0gMSwgdXBsb2FkaW5nOiBpc1VwbG9hZGluZ31cIj5cblxuICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBjbG9zZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjwvZW8taWNvbj5cblxuICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICA8ZGl2Pnt7cXVldWUubGVuZ3RofX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicXVldWVTaXplXCI+e3txdWV1ZVNpemUgfCBmaWxlU2l6ZX19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxoMSB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5oZWFkbGluZTwvaDE+XG4gIDxlby1pY29uIGNsYXNzPVwidXBsb2FkeVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuXG4gIDwhLS0gYmF0Y2ggdXBsb2FkIGRpYWxvZyAtLT5cbiAgPGRpdiBjbGFzcz1cImJhdGNoLWRpYWxvZ1wiICpuZ0lmPVwiIWludmFsaWRJbnB1dCAmJiBzZWxlY3RlZFVwbG9hZFRhcmdldCAmJiAhaXNVcGxvYWRpbmdcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5jaG9vc2UudGl0bGU8L2gyPlxuICAgIDxwIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInByb2NlZWRXaXRoU2VsZWN0ZWRUYXJnZXQoZmFsc2UpXCIgY2xhc3M9XCJwcmltYXJ5XCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2hvb3NlLnNpbmdsZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJvY2VlZFdpdGhTZWxlY3RlZFRhcmdldCh0cnVlKVwiIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tdWx0aTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIGludmFsaWQgaW5wdXQgZGlhbG9nIC0tPlxuICA8ZGl2IGNsYXNzPVwiYmF0Y2gtZGlhbG9nXCIgKm5nSWY9XCJoYXNWYWxpZFVwbG9hZFRhcmdldHMgJiYgaW52YWxpZElucHV0XCI+XG5cbiAgICA8aDIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2xvc2U8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBubyB1cGxvYWQgdGFyZ2V0cyBhdmFpbGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJiYXRjaC1kaWFsb2dcIiAqbmdJZj1cIiFoYXNWYWxpZFVwbG9hZFRhcmdldHNcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5ub3RhcmdldC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwubm90YXJnZXQubWVzc2FnZTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNsb3NlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50c1wiICpuZ0lmPVwiaGFzVmFsaWRVcGxvYWRUYXJnZXRzICYmICFpbnZhbGlkSW5wdXQgJiYgIXNlbGVjdGVkVXBsb2FkVGFyZ2V0ICYmICFpc1VwbG9hZGluZ1wiPlxuXG4gICAgPCEtLSBsaXN0IG9mIGF2YWlsYWJsZSB1cGxvYWQgdGFyZ2V0cyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiICpuZ0Zvcj1cImxldCB0IG9mIHZhbGlkVXBsb2FkVGFyZ2V0czsgdHJhY2tCeTogdGFyZ2V0VHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicHJvY2VlZFdpdGhVcGxvYWQodClcIlxuICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJ0LnR5cGVcIj5cblxuICAgICAgICAgIDwhLS0gdXBsb2FkIHRvIHJvb3QgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Jvb3QnXCIgPlxuICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY3JlYXRlX2RvY3VtZW50LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldC1nZW5lcmFsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwucm9vdC50aXRsZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5yb290LmRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gcmVwbGFjZSBmaWxlIG9mIGEgc3BlY2lmaWMgZG1zIG9iamVjdCAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb2JqZWN0J1wiPlxuICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZG9jdW1lbnRfZmlsZS5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtcmVwbGFjZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLm9iamVjdC50aXRsZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3QuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIGFkZCBuZXcgZmlsZXMgdG8gYSBjb250ZXh0IGZvbGRlciAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29udGV4dCdcIj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NyZWF0ZV9kb2N1bWVudF9pbl9mb2xkZXIuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGFyZ2V0LWNvbnRleHRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj57eydlby51cGxvYWQuZ2xvYmFsLmNvbnRleHQudGl0bGUnfHRyYW5zbGF0ZTooe2NvbnRleHQ6dC5yZWZlcmVuY2VPYmplY3QudHlwZS5sYWJlbH0pfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBhZGQgbmV3IGZpbGVzIHRvIGEgY29udGV4dCBmb2xkZXIgc3RydWN0dXJlIHRyZWUgZW50cnkgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbnRleHR0cmVlJ1wiPlxuICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY3JlYXRlX2RvY3VtZW50X2luX2ZvbGRlci5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtY29udGV4dHRyZWVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj57eydlby5hZGQudGl0bGUubG9jYXRpb24uc3ViZm9sZGVyJ3x0cmFuc2xhdGU6ICh7Zm9sZGVyOiB0LnN1YkZvbGRlci5uYW1lfSl9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIGN1c3RvbSB1cGxvYWQgdGFyZ2V0IChlLmcuIGZyb20gcGx1Z2luIGNvbXBvbmVudCkgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1c3RvbSdcIj5cbiAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3t0Lm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3QuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBsaXN0IG9mIGZpbGVzIGRyYWdnZWQgdG8gdGhlIGNvbXBvbmVudCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsZXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaSBvZiBxdWV1ZTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3tpLm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NcIj48c3BhbiBjbGFzcz1cInNpemVcIj57e2kuc2l6ZSB8IGZpbGVTaXplfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJkZXNjLXRleHRcIj4mbmJzcDt7e2kudHlwZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGVJdGVtKGkpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiICpuZ0lmPVwiaXNVcGxvYWRpbmdcIj48ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj48L2Rpdj5cblxuXG48L2Rpdj5cbiJdfQ==
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvdXBsb2FkLW92ZXJsYXkvdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUUsUUFBUSxJQUFJLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBRTdGLE9BQU8sRUFHTCxVQUFVLEVBRVYsWUFBWSxFQUNaLGNBQWMsRUFFZCxLQUFLLEVBRUwsZ0JBQWdCLEVBR2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPckUsTUFBTSxPQUFPLHNCQUFzQjtJQThEakMsWUFBb0IsTUFBYyxFQUN4QixRQUFtQixFQUNuQixjQUE4QixFQUM5QixTQUEyQixFQUMzQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUFtQyxFQUNuQyxjQUFxQztRQVQzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdB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QUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsS0FBcUI7UUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNGLENBQUM7OEdBOWdCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrSkN4Qm5DLHlxTkErSkE7OzJGRHZJYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsbUJBQW1CO2lWQU1QLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIE9iamVjdFR5cGUsXG4gIEV2ZW50U2VydmljZSxcbiAgRW5haW9FdmVudCxcbiAgVXBsb2FkUmVnaXN0cnlTZXJ2aWNlLFxuICBVcGxvYWRUYXJnZXQsXG4gIFVwbG9hZEZpbGVJdGVtLFxuICBQcmVwYXJlU2VydmljZSxcbiAgVXRpbHMsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIEVudmlyb25tZW50RW5haW8sIFN5c3RlbVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBMb2NhbFN0b3JhZ2VTZXJ2aWNlXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0FnZW50U2VydmljZSwgTG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdXBsb2FkLW92ZXJsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZE92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlFbDogRWxlbWVudFJlZjtcblxuICBxdWV1ZTogVXBsb2FkRmlsZUl0ZW1bXSA9IFtdO1xuICBmaWxlT3ZlcjogYm9vbGVhbjtcbiAgaXNVcGxvYWRpbmc6IGJvb2xlYW47XG4gIGhhc1ZhbGlkVXBsb2FkVGFyZ2V0czogYm9vbGVhbjtcbiAgaW52YWxpZElucHV0OiBib29sZWFuO1xuICBxdWV1ZVNpemU6IG51bWJlcjtcbiAgdmFsaWRVcGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBzZWxlY3RlZFVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0O1xuICBmb2xkZXJGYXZvcml0ZXM6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGxhc3RPcGVuZWRGb2xkZXI6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgYWdlbnRBY2NTZWxlY3RlZDogYm9vbGVhbjtcbiAgZmF2b3JpdGVzQWNjU2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgdGFyZ2V0VHlwZXMgPSBbXG4gICAge1xuICAgICAgdHlwZTogJ3Jvb3QnLFxuICAgICAgaWNvblNyYzogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY3JlYXRlX2RvY3VtZW50LnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtZ2VuZXJhbCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LnRpdGxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnZW8udXBsb2FkLmdsb2JhbC5yb290LmRlc2NyaXB0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19kb2N1bWVudF9maWxlLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtcmVwbGFjZScsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5vYmplY3QudGl0bGUnXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dCcsXG4gICAgICBuYW1lOiAnZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LnRpdGxlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdjb250ZXh0dHJlZScsXG4gICAgICBpY29uU3JjOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jcmVhdGVfZG9jdW1lbnRfaW5fZm9sZGVyLnN2ZycsXG4gICAgICB0YXJnZXRDbGFzczogJ3VwbG9hZC10YXJnZXQtY29udGV4dHRyZWUnLFxuICAgICAgbmFtZTogJ2VvLmFkZC50aXRsZS5sb2NhdGlvbi5zdWJmb2xkZXInXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIGljb25TcmM6ICdhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnLFxuICAgICAgdGFyZ2V0Q2xhc3M6ICd1cGxvYWQtdGFyZ2V0LWN1c3RvbScsXG4gICAgICBuYW1lOiAnJyxcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSB1cGxvYWRUYXJnZXRzOiBVcGxvYWRUYXJnZXRbXSA9IFtdO1xuICBwcml2YXRlIGRyYWdMZWF2ZUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcm9wTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGRyYWdPdmVyTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGVzY0tleUxpc3RlbmVyOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBkcmFnRW50ZXJMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgcGFzdGVMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgZHJhZ0V2ZW50Q291bnQgPSAwO1xuICBwcml2YXRlIGNhY2hlS2V5ID0gJ2FjY29yZGlvbi5zdGF0ZS0tJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGFnZW50U2VydmljZTogQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1cGxvYWRSZWdpc3RyeTogVXBsb2FkUmVnaXN0cnlTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRlUGlwZSA9IG5ldyBMb2NhbGVEYXRlUGlwZSh0cmFuc2xhdGUpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcmFnRW50ZXJMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB3aXRoIGEgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRoZSB0YXJnZXQgdG8gdXBsb2FkIGZpbGVzIHRvXG4gICAqL1xuICBwdWJsaWMgcHJvY2VlZFdpdGhVcGxvYWQodXBsb2FkVGFyZ2V0OiBVcGxvYWRUYXJnZXQpOiB2b2lkIHtcblxuICAgIGlmICh1cGxvYWRUYXJnZXQudHlwZSAhPT0gVXBsb2FkVGFyZ2V0LkNVU1RPTSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZvciBtb3JlIHRoYW4gb25lIGZpbGUgdG8gYmUgdXBsb2FkZWQgdG8gYSBub25lIGN1c3RvbSB0YXJnZXQsIHdlIGxldCB0aGUgdXNlciBkZWNpZGUgaWZcbiAgICAgIC8vIGJhdGNoIHVwbG9hZCBzaG91bGQgYmUgdXNlZCBvciBub3QgLi4uXG5cblxuICAgICAgdGhpcy5zZWxlY3RlZFVwbG9hZFRhcmdldCA9IHVwbG9hZFRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHVwbG9hZFRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG4gICAgICAvLyAuLi4gb3RoZXJ3aXNlIHVwbG9hZCBpcyBzdGFydGVkIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLnN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldCwgW251bGwsIHRoaXMuZ2V0U3RhdGVSb3V0ZSgpXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRVcGxvYWQodXBsb2FkVGFyZ2V0LCBbbnVsbCwgJy9wcmVwYXJlJ10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZWVkIHVwbG9hZCB1c2luZyB0aGUgc2VsZWN0ZWQgdXBsb2FkIHRhcmdldC5cbiAgICogQHBhcmFtIHVzZUJhdGNoVXBsb2FkIC0gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBiYXRjaCB1cGxvYWRcbiAgICovXG4gIHB1YmxpYyBwcm9jZWVkV2l0aFNlbGVjdGVkVGFyZ2V0KHVzZUJhdGNoVXBsb2FkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydFVwbG9hZCh0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0LCBbdXNlQmF0Y2hVcGxvYWQsICcvcHJlcGFyZSddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNlbGVjdGVkIHVwbG9hZCB0YXJnZXQuXG4gICAqL1xuICBwdWJsaWMgcmVzZXRTZWxlY3RlZFVwbG9hZFRhcmdldCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkVGFyZ2V0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZmlsZSBmcm9tIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiBAcGFyYW0gZmlsZUl0ZW0gLSB0aGUgZmlsZSBpdGVtIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlSXRlbShmaWxlSXRlbTogVXBsb2FkRmlsZUl0ZW0pOiB2b2lkIHtcblxuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcigoZikgPT4gZi5pZCAhPT0gZmlsZUl0ZW0uaWQpO1xuICAgIGlmICghdGhpcy5xdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlIGF2YWlsYWJsZSB1cGxvYWQgdGFyZ2V0cyBiZWNhdXNlIHRoZWlyIHZhbGlkaXR5XG4gICAgICAvLyBtYXkgYmUgYmFzZWQgb24gdGhlIHF1ZXVlIHNpemVcbiAgICAgIHRoaXMudmFsaWRhdGVVcGxvYWRUYXJnZXRzKCk7XG4gICAgICB0aGlzLnNldFF1ZXVlU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRlUm91dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsO1xuICB9XG5cbiAgb25BZ2VudFRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgb25GYXZvcml0ZVRvZ2dsZShpbmZvOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnZmF2b3JpdGUtZm9sZGVyJywgSlNPTi5zdHJpbmdpZnkoaW5mbykpO1xuICB9XG5cbiAgZ2V0Rm9sZGVyKCk6IHZvaWQge1xuICAgIC8vZm9sZGVyIGZyb20gYWdlbnRcbiAgICB0aGlzLmFnZW50U2VydmljZS5nZXRMYXN0T3BlbmVkRm9sZGVyc0luZm8oKS5zdWJzY3JpYmUoKHJlczogW10pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMubGFzdE9wZW5lZEZvbGRlciA9IHJlcy5tYXAoKGl0ZW06IHt0aXRsZTogc3RyaW5nOyBkYXRhOiB7ZGVzY3JpcHRpb246IHN0cmluZ307IGlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZ30pID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAnYWdlbnQnLFxuICAgICAgICAgIGl0ZW0/LnRpdGxlLFxuICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGl0ZW0udHlwZSkuaWNvbklkLFxuICAgICAgICAgIGl0ZW0udHlwZVxuICAgICAgICApO1xuICAgICAgICB0YXJnZXQuZGVzY3JpcHRpb24gPSBpdGVtPy5kYXRhPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sYXN0T3BlbmVkRm9sZGVyLmZvckVhY2godGFyZ2V0ID0+IHRhcmdldC5vblVwbG9hZFN1Y2Nlc3MgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcmVwYXJlJ10pKTtcbiAgICB9KTtcblxuICAgIC8vIEZvbGRlciBmcm9tIGZhdm9yaXRlXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRGYXZvcml0ZXMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgY29uc3QgZmF2b3JpdGVzRmlsdGVyZWQgPSByZXMuZmlsdGVyKChpdGVtOiB7dGFyZ2V0OiB7Zm9sZGVyOiBib29sZWFufX0pID0+IGl0ZW0udGFyZ2V0LmZvbGRlciA9PT0gdHJ1ZSk7XG4gICAgICB0aGlzLmZvbGRlckZhdm9yaXRlcyA9IGZhdm9yaXRlc0ZpbHRlcmVkLm1hcChpdGVtID0+IHtcbiAgICAgICAgbGV0IHRhcmdldCA9IG5ldyBVcGxvYWRUYXJnZXQoXG4gICAgICAgICAgaXRlbS50YXJnZXQuaWQsXG4gICAgICAgICAgJ2Zhdm9yaXRlJyxcbiAgICAgICAgICBpdGVtLnRpdGxlLFxuICAgICAgICAgIGl0ZW0udGFyZ2V0Lmljb24uaWQsXG4gICAgICAgICAgaXRlbS50YXJnZXQudHlwZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFyZ2V0LmRlc2NyaXB0aW9uID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oaXRlbS5jcmVhdGVkKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb2xkZXJGYXZvcml0ZXMuZm9yRWFjaCh0YXJnZXQgPT4gdGFyZ2V0Lm9uVXBsb2FkU3VjY2VzcyA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3ByZXBhcmUnXSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB1cGxvYWQgb3ZlcmxheSBhbmQgcmVsZWFzZSBhbGwgYm91bmQgcmVzb3VyY2VzLlxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgLy8gdW5iaW5kIGJvdW5kIGV2ZW50IGxpc3RlbmVyLCB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW55bW9yZVxuICAgIHRoaXMudW5iaW5kTGlzdGVuZXJzKCk7XG4gICAgLy8gY2xlYXIgdXBsb2FkIHF1ZXVlXG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIC8vIGhpZGUgdGhlIG92ZXJsYXlcbiAgICB0aGlzLnNldEZpbGVPdmVyKGZhbHNlKTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG5cbiAgICAvLyBnbG9iYWwgZHJhZyZkcm9wIHVwbG9hZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIG9uIGRlc2t0b3AgKHdlYiBvciBlbGVjdHJvbilcbiAgICBpZiAoRW52aXJvbm1lbnRFbmFpby5pc01vYmlsZUVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHNcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnVwbG9hZFRhcmdldHMkLnN1YnNjcmliZSgodXBsb2FkVGFyZ2V0czogVXBsb2FkVGFyZ2V0W10pID0+IHtcbiAgICAgIHRoaXMudXBsb2FkVGFyZ2V0cyA9IHVwbG9hZFRhcmdldHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhc3RlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAncGFzdGUnLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25QYXN0ZShlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ0VudGVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgdGhpcy5vbkRyYWdFbnRlcihlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25QYXN0ZShlOiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICB0aGlzLmludmFsaWRJbnB1dCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5maWxlT3ZlciAmJiB0aGlzLnBhc3RlQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgbGV0IHRyYW5zZmVyID0gZS5jbGlwYm9hcmREYXRhO1xuICAgICAgaWYgKCF0cmFuc2Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFuc2Zlci5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhbnNmZXIuaXRlbXNbaV0ua2luZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICBpZiAoZmUgJiYgZmUuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRJbnB1dCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaW52YWxpZElucHV0KSB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnRBbmRTdG9wKGUpO1xuICAgICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuICAgICAgICB0aGlzLm9uRmlsZXNEcm9wcGVkKEFycmF5LmZyb20odHJhbnNmZXIuZmlsZXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ0VudGVyKGU6IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaGFzVmFsaWRVcGxvYWRUYXJnZXRzID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZmlsZU92ZXIgJiYgdGhpcy5kcmFnQ29udGFpbnNGaWxlcyhlKSkge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCA9IDA7XG4gICAgICB0aGlzLnNldEZpbGVPdmVyKHRydWUpO1xuXG4gICAgICAvLyB1c2UgdGltZW91dCBoZXJlIHRvIGZvcmNlIGFuZ3VsYXIgZGlnZXN0IGN5Y2xlIGJlZm9yZSBjb250aW51aW5nLCBiZWNhdXNlIHdlIGFyZSBhY2Nlc3NpbmcgZG9tIGVsZW1lbnRzXG4gICAgICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgKCpuZ0lmKSB1bnRpbCBmaWxlT3ZlciBpcyBzZXQgdG8gdHJ1ZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyB0b2RvOiByZXBsYWNlIGJ5IHJlbmRlcmVyIHNvbHV0aW9uIHdoZW4gYXZhaWxhYmxlIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTY3NClcbiAgICAgICAgdGhpcy5vdmVybGF5RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAvLyBiaW5kIGxhdGUgKG9ubHksIHdoZW4gbmVlZGVkKSB0byBkcmFnbGVhdmUgZXZlbnQgdG8gYXZvaWQgaGVhdnkgcHJvY2Vzc2luZyBvbiBldmVyeSBkcmFnIGV2ZW50XG4gICAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ2xlYXZlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZHJhZ0V2ZW50Q291bnQtLTtcbiAgICAgICAgICBpZiAodGhpcy5kcmFnRXZlbnRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJvcCcsIChldnQpID0+IHtcbiAgICAgICAgICBsZXQgdHJhbnNmZXIgPSB0aGlzLl9nZXRUcmFuc2ZlcihldnQpO1xuICAgICAgICAgIGlmICghdHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcblxuICAgICAgICAgIC8vIGNoZWNrIGZvciBkaXJlY3Rvcmllc1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXIuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZlID0gdHJhbnNmZXIuaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgaWYgKGZlICYmIGZlLmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgIHRoaXMuaW52YWxpZElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmludmFsaWRJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkZpbGVzRHJvcHBlZCh0cmFuc2Zlci5maWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLm92ZXJsYXlFbC5uYXRpdmVFbGVtZW50LCAnZHJhZ292ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgbGV0IHRyYW5zZmVyID0gdGhpcy5fZ2V0VHJhbnNmZXIoZXZ0KTtcbiAgICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFnRXZlbnRDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZXNEcm9wcGVkKGZpbGVJdGVtczogRmlsZVtdKSB7XG4gICAgdGhpcy5nZXRGb2xkZXIoKTtcbiAgICB0aGlzLmdldENhY2hlZEFjY29yZGlvblN0YXRlKCk7XG4gICAgLy8gY2xlYXIgcXVldWUgd2hlbiBuZXcgZmlsZXMgYXJlIGFkZGVkXG4gICAgLy8gdG9kbzogcmVtb3ZlIGluIGZ1dHVyZSByZWxlYXNlcyB0byBzdXBwb3J0IGNvbGxlY3RpdmUgZmlsZSBhZGRpbmdcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlSXRlbXMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChuZXcgVXBsb2FkRmlsZUl0ZW0oZmlsZSkpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgRVNDIGtleSBsaXN0ZW5lciBmb3IgY2xvc2luZyB0aGUgZGlhbG9nIGFzIGxhdGUgYXMgcG9zc2libGVcbiAgICBpZiAoIXRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSB0b3RhbCBzaXplIG9mIHF1ZXVlXG4gICAgdGhpcy5zZXRRdWV1ZVNpemUoKTtcbiAgICAvLyBmaWx0ZXIgYXZhaWxhYmxlIHRhcmdldHNcbiAgICB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBsaXN0IG9mIHJlZ2lzdGVyZWQgdXBsb2FkIHRhcmdldHMsIHNvIG9ubHkgdmFsaWQgdGFyZ2V0cyB3aWxsIGJlIHNob3duLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldHMoKSB7XG4gICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0cnVlO1xuICAgIHRoaXMuZ2V0Rm9sZGVyKCk7XG4gICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRoaXMudXBsb2FkVGFyZ2V0cy5tYXAodCA9PiB0aGlzLnZhbGlkYXRlVXBsb2FkVGFyZ2V0KHQpKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IHt0YXJnZXQ6IFVwbG9hZFRhcmdldDsgdmFsaWQ6IGJvb2xlYW59W10pID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IHJlcy5maWx0ZXIociA9PiByLnZhbGlkKS5tYXAoZmlsdGVyZWQgPT4gZmlsdGVyZWQudGFyZ2V0KS5yZXZlcnNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSA9PT0gJ2NvbnRleHQnID8gLTEgOiBiLnR5cGUgPT09ICdjb250ZXh0JyA/IDEgOiAwOyAvLyBDb250ZXh0IHNob3VsZCBiZSBvbiB0b3BcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFsuLi50aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cywgLi4udGhpcy5mb2xkZXJGYXZvcml0ZXMsIC4uLnRoaXMubGFzdE9wZW5lZEZvbGRlcl07XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cyA9IFtdO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNWYWxpZFVwbG9hZFRhcmdldHMgPSB0aGlzLnZhbGlkVXBsb2FkVGFyZ2V0cy5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVwbG9hZFRhcmdldCh0YXJnZXQ6IFVwbG9hZFRhcmdldCk6IE9ic2VydmFibGU8e3RhcmdldDogVXBsb2FkVGFyZ2V0OyB2YWxpZDogYm9vbGVhbn0+IHtcblxuICAgIGlmICghdGhpcy5xdWV1ZSkge1xuICAgICAgcmV0dXJuIG9ic2VydmFibGVPZih7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvID0+IHtcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5ST09UKSB7XG5cbiAgICAgICAgLy8gdG9kbzogYXJlIHRoZXJlIG90aGVyIHJlc3RyaWN0aW9ucyBvbiByb290IHRhcmdldD9cbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmVwYXJlQ2hpbGRUeXBlcyhudWxsLCB0cnVlKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAocmVzOiB7cGFyZW50OiBzdHJpbmc7IHR5cGVzOiBPYmplY3RUeXBlW119KSA9PiB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHJlcy50eXBlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogZmFsc2V9KTtcbiAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC50eXBlID09PSBVcGxvYWRUYXJnZXQuT0JKRUNUKSB7XG5cbiAgICAgICAgLy8gdG9kbzogY2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBvYmplY3Qgc3VwcG9ydHMgdGhlIGdpdmVuIGZpbGUgdHlwZVxuICAgICAgICB2YWxpZCA9IHRhcmdldC5yZWZlcmVuY2VPYmplY3QgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LnR5cGUubWF4RmlsZXMgPiAwICYmXG4gICAgICAgICAgIXRhcmdldC5yZWZlcmVuY2VPYmplY3QubG9jayAmJlxuICAgICAgICAgICF0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmlzRmluYWxpemVkICYmXG4gICAgICAgICAgKHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzICYmIHRhcmdldC5yZWZlcmVuY2VPYmplY3QucmlnaHRzLmVkaXQpICYmXG4gICAgICAgICAgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0YXJnZXQucmVmZXJlbmNlT2JqZWN0LmRhdGEueXV2c2lnc3RhdHVzICE9PSAnc2lnbmVkJyAmJlxuICAgICAgICAgIHRhcmdldC5yZWZlcmVuY2VPYmplY3QuZGF0YS55dXZzaWdzdGF0dXMgIT09ICdpbnByb2Nlc3MnO1xuICAgICAgICBvLm5leHQoe3RhcmdldDogdGFyZ2V0LCB2YWxpZDogdmFsaWR9KTtcbiAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQudHlwZSA9PT0gVXBsb2FkVGFyZ2V0LkNPTlRFWFQgfHwgdGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUpIHtcblxuICAgICAgICAvLyB0b2RvOiBhZGQgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBvYmplY3QgKGUuZy4gYWxsb3dlZCBmaWxlIHR5cGVzKVxuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXBhcmVDaGlsZFR5cGVzKHRhcmdldC5yZWZlcmVuY2VPYmplY3QuaWQsIHRydWUpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIChyZXM6IHtwYXJlbnQ6IHN0cmluZzsgdHlwZXM6IE9iamVjdFR5cGVbXX0pID0+IHtcbiAgICAgICAgICAgICAgdmFsaWQgPSB0YXJnZXQucmVmZXJlbmNlT2JqZWN0ICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiByZXMudHlwZXMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgICAvLyBmb3IgQ09OVEVYVF9UUkVFIHRhcmdldHMgYWxzbyBjaGVjayBpZiB0aGUgZGVzaXJlZCBub2RlXG4gICAgICAgICAgICAgIC8vIHR5cGUgaXMgcGFydCBvZiB0aGUgcHJlcGFyZSBjaGlsZCB0eXBlc1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFVwbG9hZFRhcmdldC5DT05URVhUX1RSRUUgJiYgdGFyZ2V0LnN1YkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlciA9IHRhcmdldC5zdWJGb2xkZXI7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSAhIXJlcy50eXBlcy5maW5kKHQgPT4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmltcGxlbWVudHNUeXBlKHQsIHN1YkZvbGRlci5kYXRhLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiB2YWxpZH0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG8ubmV4dCh7dGFyZ2V0OiB0YXJnZXQsIHZhbGlkOiBmYWxzZX0pO1xuICAgICAgICBvLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhY2hlZEFjY29yZGlvblN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRBY2NTZWxlY3RlZCA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuY2FjaGVLZXkgKyAnYWdlbnQtZm9sZGVyJykpO1xuICAgIHRoaXMuZmF2b3JpdGVzQWNjU2VsZWN0ZWQgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLmNhY2hlS2V5ICsgJ2Zhdm9yaXRlLWZvbGRlcicpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5ETVNfT0JKRUNUX1VQREFURUQsIHVwbG9hZFRhcmdldC5yZWZlcmVuY2VPYmplY3QpO1xuICAgIHVwbG9hZFRhcmdldC5vblVwbG9hZFN1Y2Nlc3ModGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgYWN0dWFsIHVwbG9hZC5cbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCAtIHRhcmdldCB0byB1cGxvYWQgdGhlIGZpbGVzIHRvXG4gICAqIEBwYXJhbSB1c2VCYXRjaFVwbG9hZCAtIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYmF0Y2ggdXBsb2FkXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0VXBsb2FkKHVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0LCBbLi4uYXJnc10pOiB2b2lkIHtcblxuICAgIGNvbnN0IFt1c2VCYXRjaFVwbG9hZCwgdGFyZ2V0XSA9IGFyZ3M7XG5cbiAgICB0aGlzLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnVuYmluZExpc3RlbmVycygpO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRUb1RhcmdldCh1cGxvYWRUYXJnZXQsIHRoaXMucXVldWUsIHVzZUJhdGNoVXBsb2FkKVxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHVwbG9hZFRhcmdldC5zdWJGb2xkZXIgJiYgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICBsZXQgb2JzID0gW107XG4gICAgICAgICAgICByZXMuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgb2JzLnB1c2godGhpcy5wcmVwYXJlU2VydmljZS51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEoci5pZCwgdXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLmRhdGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKG9icykuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3VjY2Vzc2Z1bFVwbG9hZCh0YXJnZXQsIHVwbG9hZFRhcmdldCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgICAgIC51cGRhdGVQcmVwYXJlZEl0ZW1JbmRleERhdGEocmVzLmlkLCB1cGxvYWRUYXJnZXQuc3ViRm9sZGVyLmRhdGEuZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1Y2Nlc3NmdWxVcGxvYWQodGFyZ2V0LCB1cGxvYWRUYXJnZXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzZnVsVXBsb2FkKHRhcmdldCwgdXBsb2FkVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdXBsb2FkVGFyZ2V0Lm9uVXBsb2FkRmFpbCgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKSlcbiAgICAgICk7XG4gICAgdGhpcy5yZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFF1ZXVlU2l6ZSgpOiB2b2lkIHtcbiAgICBsZXQgcyA9IDA7XG4gICAgZm9yIChsZXQgZiBvZiB0aGlzLnF1ZXVlKSB7XG4gICAgICBzICs9IGYuc2l6ZTtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZVNpemUgPSBzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWxlT3Zlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlsZU92ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnVwbG9hZFJlZ2lzdHJ5LnNldE92ZXJsYXlBY3RpdmUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bmJpbmRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ0xlYXZlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcmFnT3Zlckxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRyYWdPdmVyTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJhZ092ZXJMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3BMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kcm9wTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZHJvcExpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXNjS2V5TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZXNjS2V5TGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgZHJhZyBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIGRyYWcgZXZlbnQgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBudW1iZXIgb2YgZmlsZXNcbiAgICovXG4gIHByaXZhdGUgZHJhZ0NvbnRhaW5zRmlsZXMoZXZlbnQ6IERyYWdFdmVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zIHx8IFtdKS5maWx0ZXIoaSA9PiBpLmtpbmQgPT09ICdmaWxlJykubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBwYXN0ZSBldmVudCBjb250YWlucyBvbmUgb3IgbW9yZSBmaWxlcy5cbiAgICogQHBhcmFtIGV2ZW50IC0gdGhlIHBhc3RlIGV2ZW50IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgbnVtYmVyIG9mIGZpbGVzXG4gICAqL1xuICBwcml2YXRlIHBhc3RlQ29udGFpbnNGaWxlcyhldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMgfHwgW10pLmZpbHRlcihpID0+IGkua2luZCA9PT0gJ2ZpbGUnKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjxkaXYgaWQ9XCJlby11cGxvYWQtb3ZlcmxheVwiICNvdmVybGF5IGNsYXNzPVwiZGFya1wiICpuZ0lmPVwiZmlsZU92ZXJcIiB0YWJpbmRleD1cIjFcIlxuICBbbmdDbGFzc109XCJ7ZmlsZTogcXVldWUubGVuZ3RoLCBpbnZhbGlkOiBpbnZhbGlkSW5wdXQsIHVwbG9hZGluZzogaXNVcGxvYWRpbmd9XCI+XG5cbiAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gd2hpdGUgY2xvc2VcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2VvLWljb24+XG5cbiAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgPGRpdj57e3F1ZXVlLmxlbmd0aH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1ZXVlU2l6ZVwiPnt7cXVldWVTaXplIHwgZmlsZVNpemV9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmVcIj5cbiAgICA8aDEgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaGVhZGxpbmU8L2gxPlxuICA8L2Rpdj5cbiAgXG4gIDxlby1pY29uIGNsYXNzPVwidXBsb2FkeVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuXG4gIDwhLS0gYmF0Y2ggdXBsb2FkIGRpYWxvZyAtLT5cbiAgPGRpdiBjbGFzcz1cImJhdGNoLWRpYWxvZ1wiICpuZ0lmPVwiIWludmFsaWRJbnB1dCAmJiBzZWxlY3RlZFVwbG9hZFRhcmdldCAmJiAhaXNVcGxvYWRpbmdcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5jaG9vc2UudGl0bGU8L2gyPlxuICAgIDxwIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldFNlbGVjdGVkVXBsb2FkVGFyZ2V0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInByb2NlZWRXaXRoU2VsZWN0ZWRUYXJnZXQoZmFsc2UpXCIgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgICAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2hvb3NlLnNpbmdsZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJvY2VlZFdpdGhTZWxlY3RlZFRhcmdldCh0cnVlKVwiIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNob29zZS5tdWx0aTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIGludmFsaWQgaW5wdXQgZGlhbG9nIC0tPlxuICA8ZGl2IGNsYXNzPVwiYmF0Y2gtZGlhbG9nXCIgKm5nSWY9XCJoYXNWYWxpZFVwbG9hZFRhcmdldHMgJiYgaW52YWxpZElucHV0XCI+XG5cbiAgICA8aDIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuaW52YWxpZC5tZXNzYWdlPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwuY2xvc2U8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBubyB1cGxvYWQgdGFyZ2V0cyBhdmFpbGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJiYXRjaC1kaWFsb2dcIiAqbmdJZj1cIiFoYXNWYWxpZFVwbG9hZFRhcmdldHNcIj5cblxuICAgIDxoMiB0cmFuc2xhdGU+ZW8udXBsb2FkLmdsb2JhbC5ub3RhcmdldC50aXRsZTwvaDI+XG4gICAgPHAgdHJhbnNsYXRlPmVvLnVwbG9hZC5nbG9iYWwubm90YXJnZXQubWVzc2FnZTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIHRyYW5zbGF0ZT5lby51cGxvYWQuZ2xvYmFsLmNsb3NlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50c1wiICpuZ0lmPVwiaGFzVmFsaWRVcGxvYWRUYXJnZXRzICYmICFpbnZhbGlkSW5wdXQgJiYgIXNlbGVjdGVkVXBsb2FkVGFyZ2V0ICYmICFpc1VwbG9hZGluZ1wiPlxuXG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdXBsb2FkIHRhcmdldHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICBAZm9yICh0YXJnZXRUeXBlIG9mIHRhcmdldFR5cGVzOyB0cmFjayB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayB0LmlkKSB7XG4gICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSB0YXJnZXRUeXBlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkVGFyZ2V0VGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNyYzogdGFyZ2V0VHlwZS5pY29uU3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDbGFzczogdGFyZ2V0VHlwZS50YXJnZXRDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyA/IHQubmFtZSA6ICh0YXJnZXRUeXBlLnR5cGUgPT09ICdjb250ZXh0JyA/ICAgICAgKHRhcmdldFR5cGUubmFtZSB8IHRyYW5zbGF0ZSA6IHsgY29udGV4dDogdC5yZWZlcmVuY2VPYmplY3QudHlwZS5sYWJlbCB9KSA6ICAgICAodGFyZ2V0VHlwZS4gbmFtZSB8IHRyYW5zbGF0ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFyZ2V0VHlwZS50eXBlID09PSAnY3VzdG9tJyB8fCB0YXJnZXRUeXBlLnR5cGUgPT09ICdvYmplY3QnIHx8ICAgIHRhcmdldFR5cGUuICB0eXBlID09PSAnY29udGV4dCcgPyB0LmRlc2NyaXB0aW9uIDogKHRhcmdldFR5cGUuZGVzY3JpcHRpb24gfCAgIHRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSB1cGxvYWQgdG8gZmF2b3JpdGUgLS0+XG4gICAgICBAaWYgKGZvbGRlckZhdm9yaXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJmYXZvcml0ZXNBY2NTZWxlY3RlZFwiIFtoZWFkZXJdPVwiJ2VvLnVwbG9hZC5nbG9iYWwuY29udGV4dC5mYXZvcml0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIm9uRmF2b3JpdGVUb2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LWxpc3RcIj5cbiAgICAgICAgICAgICAgQGZvciAodCBvZiB2YWxpZFVwbG9hZFRhcmdldHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAodC50eXBlID09PSAnZmF2b3JpdGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiIChjbGljayk9XCJwcm9jZWVkV2l0aFVwbG9hZCh0KVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidC5pY29uSWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXQtZmF2b3JpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3t0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmKGxhc3RPcGVuZWRGb2xkZXIubGVuZ3RoID4gMCl7XG4gICAgICAgIDxlby1zaW1wbGUtYWNjb3JkaW9uIFtzZWxlY3RlZF09XCJhZ2VudEFjY1NlbGVjdGVkXCIgW2hlYWRlcl09XCInZW8udXBsb2FkLmdsb2JhbC5jb250ZXh0LmFnZW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwib25BZ2VudFRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPCEtLSB1cGxvYWQgdG8gbGFzdCBvcGVuZWQgZm9sZGVyICAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdmFsaWRVcGxvYWRUYXJnZXRzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKHQudHlwZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10YXJnZXRcIiAoY2xpY2spPVwicHJvY2VlZFdpdGhVcGxvYWQodClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvbklkXT1cInQuaWNvbklkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGFyZ2V0LWFnZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7dD8udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3Q/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZW8tc2ltcGxlLWFjY29yZGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8IS0tIGxpc3Qgb2YgZmlsZXMgZHJhZ2dlZCB0byB0aGUgY29tcG9uZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiIFtuZ0NsYXNzXT1cIntmaWxlOiBxdWV1ZS5sZW5ndGgsIGludmFsaWQ6IGludmFsaWRJbnB1dCwgdXBsb2FkaW5nOiBpc1VwbG9hZGluZ31cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1saXN0XCI+XG4gICAgICAgIEBmb3IgKGkgb2YgcXVldWU7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7aS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPjxzcGFuIGNsYXNzPVwic2l6ZVwiPnt7aS5zaXplIHwgZmlsZVNpemV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzYy10ZXh0XCI+Jm5ic3A7e3tpLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGVJdGVtKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChpc1VwbG9hZGluZykge1xuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+XG4gICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkVGFyZ2V0VGVtcGxhdGUgbGV0LWljb25TcmM9XCJpY29uU3JjXCIgbGV0LXRhcmdldENsYXNzPVwidGFyZ2V0Q2xhc3NcIiBsZXQtbmFtZT1cIm5hbWVcIlxuICBsZXQtZGVzY3JpcHRpb249XCJkZXNjcmlwdGlvblwiIGxldC10YXJnZXRzPVwidGFyZ2V0c1wiPlxuICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRhcmdldFwiIChjbGljayk9XCJwcm9jZWVkV2l0aFVwbG9hZCh0YXJnZXRzKVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8ZW8taWNvbiBbaWNvblNyY109XCJpY29uU3JjXCI+PC9lby1pY29uPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ0YXJnZXRDbGFzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7IG5hbWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|