@huntsman-cancer-institute/dashboard 17.3.4 → 17.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -190,129 +190,129 @@ export class DashboardComponent {
|
|
|
190
190
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DashboardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.DashboardService }, { token: i2.DashboardGlobalService }, { token: i3.DragulaService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
191
191
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: DashboardComponent, selector: "dashboard", host: { properties: { "class": "this.classList" } }, providers: [
|
|
192
192
|
DashboardService
|
|
193
|
-
], viewQueries: [{ propertyName: "widgetConfigure", first: true, predicate: ["widgetConfigure"], descendants: true }, { propertyName: "widgetContainers", predicate: WidgetContainerComponent, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
194
|
-
<ng-template #confirmDialog let-c="close" let-d="dismiss">
|
|
195
|
-
<div class="modal-header">
|
|
196
|
-
<h5 class="modal-title">Delete</h5>
|
|
197
|
-
</div>
|
|
198
|
-
<div class="modal-body">
|
|
199
|
-
<p>Are you sure?</p>
|
|
200
|
-
</div>
|
|
201
|
-
<div class="modal-footer">
|
|
202
|
-
<button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
|
|
203
|
-
<button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
|
|
204
|
-
</div>
|
|
205
|
-
</ng-template>
|
|
206
|
-
|
|
207
|
-
<widget-add [dashboardIndex]="selectedIndex"></widget-add>
|
|
208
|
-
|
|
209
|
-
<div class="edit-mode-header"
|
|
210
|
-
[@openEditModeHeader]="editMode"
|
|
211
|
-
[@openEditModeHeaderDisplay]="editMode">
|
|
212
|
-
<button class="btn btn-primary btn-space"
|
|
213
|
-
(click)="addWidget()">
|
|
214
|
-
<i class="fas fa-plus fa-2x"></i>
|
|
215
|
-
<br />
|
|
216
|
-
<span>Widget</span>
|
|
217
|
-
</button>
|
|
218
|
-
<button *ngIf="configMode === 'true'"
|
|
219
|
-
class="btn btn-primary btn-space red"
|
|
220
|
-
(click)="deleteWidget()">
|
|
221
|
-
<i class="fas fa-times fa-2x"></i>
|
|
222
|
-
<br />
|
|
223
|
-
<span>Widget</span>
|
|
224
|
-
</button>
|
|
225
|
-
<button class="btn btn-primary btn-space"
|
|
226
|
-
(click)="addDashboard()">
|
|
227
|
-
<i class="fas fa-plus fa-2x"></i>
|
|
228
|
-
<br />
|
|
229
|
-
<span>Dashboard</span>
|
|
230
|
-
</button>
|
|
231
|
-
<button class="btn btn-primary btn-space red"
|
|
232
|
-
*ngIf="dashboards.length > 1"
|
|
233
|
-
(click)="deleteDashboard(confirmDialog)">
|
|
234
|
-
<i class="fas fa-times fa-2x"></i>
|
|
235
|
-
<br />
|
|
236
|
-
<span>Dashboard</span>
|
|
237
|
-
</button>
|
|
238
|
-
<button class="btn btn-primary btn-space green"
|
|
239
|
-
(click)="setEditMode(false)">
|
|
240
|
-
<i class="fas fa-check fa-2x"></i>
|
|
241
|
-
<br />
|
|
242
|
-
<span>Done</span>
|
|
243
|
-
</button>
|
|
244
|
-
</div>
|
|
245
|
-
|
|
246
|
-
<div class="outlet-row">
|
|
247
|
-
|
|
248
|
-
<!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
|
|
249
|
-
<ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
|
|
250
|
-
<div class="d-flex"
|
|
251
|
-
[style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
|
|
252
|
-
[style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
|
|
253
|
-
[@openConfigContent]="configMode">
|
|
254
|
-
<widget-container
|
|
255
|
-
[dashboard]="dashboard"
|
|
256
|
-
[dashboardIndex]="dashboardIndex">
|
|
257
|
-
</widget-container>
|
|
258
|
-
</div>
|
|
259
|
-
</ng-template>
|
|
260
|
-
|
|
261
|
-
<div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
|
|
262
|
-
<div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
|
|
263
|
-
<div class="d-flex flex-nowrap">
|
|
264
|
-
<div><h4>Settings</h4></div>
|
|
265
|
-
<div style="margin-right: 0px; margin-left: auto;">
|
|
266
|
-
<span style="color: green;" (click)="saveConfiguration()">
|
|
267
|
-
<i class="fas fa-check-circle fa-2x"></i>
|
|
268
|
-
</span>
|
|
269
|
-
<span style="color: red;" (click)="cancelConfiguration()">
|
|
270
|
-
<i class="fas fa-times-circle fa-2x"></i>
|
|
271
|
-
</span>
|
|
272
|
-
</div>
|
|
273
|
-
</div>
|
|
274
|
-
<widget-configure #widgetConfigure></widget-configure>
|
|
275
|
-
</div>
|
|
276
|
-
</div>
|
|
277
|
-
</div>
|
|
278
|
-
|
|
279
|
-
<ng-container *ngIf="dashboards?.length > 1">
|
|
280
|
-
<div class="dashboard-nav-trigger">
|
|
281
|
-
<span (mouseenter)="openDashboardNavState = 'opened'">
|
|
282
|
-
<i class="fas fa-th fa-2x"></i>
|
|
283
|
-
</span>
|
|
284
|
-
</div>
|
|
285
|
-
|
|
286
|
-
<div class="dashboard-nav"
|
|
287
|
-
[@openDashboardNav]="openDashboardNavState"
|
|
288
|
-
[style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
|
|
289
|
-
(mouseleave)="openDashboardNavState = 'closed'">
|
|
290
|
-
<ng-container *ngFor="let dashboard of dashboards; index as i">
|
|
291
|
-
<div [id]="'dash-image-' + i"
|
|
292
|
-
class="widget-image"
|
|
293
|
-
[ngClass]="i === selectedIndex ? 'selected' : ''"
|
|
294
|
-
(click)="selectDashboard(i)">
|
|
295
|
-
</div>
|
|
296
|
-
</ng-container>
|
|
297
|
-
</div>
|
|
298
|
-
</ng-container>
|
|
299
|
-
|
|
300
|
-
<ng-container *ngIf="helpMode">
|
|
301
|
-
<div id="helpParent">
|
|
302
|
-
<div id="helpChild">
|
|
303
|
-
<div style="width: 100%; display: inline-flex;">
|
|
304
|
-
<h4>Help</h4>
|
|
305
|
-
<span style="margin-right: 0; margin-left: auto; color: red;" (click)="setHelpMode(false)">
|
|
306
|
-
<i class="fas fa-times fa-lg"></i>
|
|
307
|
-
</span>
|
|
308
|
-
</div>
|
|
309
|
-
<div>
|
|
310
|
-
The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
|
|
311
|
-
can drag and drop widgets to change the order and double click a widget to change its configuration.
|
|
312
|
-
</div>
|
|
313
|
-
</div>
|
|
314
|
-
</div>
|
|
315
|
-
</ng-container>
|
|
193
|
+
], viewQueries: [{ propertyName: "widgetConfigure", first: true, predicate: ["widgetConfigure"], descendants: true }, { propertyName: "widgetContainers", predicate: WidgetContainerComponent, descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
194
|
+
<ng-template #confirmDialog let-c="close" let-d="dismiss">
|
|
195
|
+
<div class="modal-header">
|
|
196
|
+
<h5 class="modal-title">Delete</h5>
|
|
197
|
+
</div>
|
|
198
|
+
<div class="modal-body">
|
|
199
|
+
<p>Are you sure?</p>
|
|
200
|
+
</div>
|
|
201
|
+
<div class="modal-footer">
|
|
202
|
+
<button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
|
|
203
|
+
<button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
|
|
204
|
+
</div>
|
|
205
|
+
</ng-template>
|
|
206
|
+
|
|
207
|
+
<widget-add [dashboardIndex]="selectedIndex"></widget-add>
|
|
208
|
+
|
|
209
|
+
<div class="edit-mode-header"
|
|
210
|
+
[@openEditModeHeader]="editMode"
|
|
211
|
+
[@openEditModeHeaderDisplay]="editMode">
|
|
212
|
+
<button class="btn btn-primary btn-space"
|
|
213
|
+
(click)="addWidget()">
|
|
214
|
+
<i class="fas fa-plus fa-2x"></i>
|
|
215
|
+
<br />
|
|
216
|
+
<span>Widget</span>
|
|
217
|
+
</button>
|
|
218
|
+
<button *ngIf="configMode === 'true'"
|
|
219
|
+
class="btn btn-primary btn-space red"
|
|
220
|
+
(click)="deleteWidget()">
|
|
221
|
+
<i class="fas fa-times fa-2x"></i>
|
|
222
|
+
<br />
|
|
223
|
+
<span>Widget</span>
|
|
224
|
+
</button>
|
|
225
|
+
<button class="btn btn-primary btn-space"
|
|
226
|
+
(click)="addDashboard()">
|
|
227
|
+
<i class="fas fa-plus fa-2x"></i>
|
|
228
|
+
<br />
|
|
229
|
+
<span>Dashboard</span>
|
|
230
|
+
</button>
|
|
231
|
+
<button class="btn btn-primary btn-space red"
|
|
232
|
+
*ngIf="dashboards.length > 1"
|
|
233
|
+
(click)="deleteDashboard(confirmDialog)">
|
|
234
|
+
<i class="fas fa-times fa-2x"></i>
|
|
235
|
+
<br />
|
|
236
|
+
<span>Dashboard</span>
|
|
237
|
+
</button>
|
|
238
|
+
<button class="btn btn-primary btn-space green"
|
|
239
|
+
(click)="setEditMode(false)">
|
|
240
|
+
<i class="fas fa-check fa-2x"></i>
|
|
241
|
+
<br />
|
|
242
|
+
<span>Done</span>
|
|
243
|
+
</button>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<div class="outlet-row">
|
|
247
|
+
|
|
248
|
+
<!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
|
|
249
|
+
<ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
|
|
250
|
+
<div class="d-flex"
|
|
251
|
+
[style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
|
|
252
|
+
[style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
|
|
253
|
+
[@openConfigContent]="configMode">
|
|
254
|
+
<widget-container
|
|
255
|
+
[dashboard]="dashboard"
|
|
256
|
+
[dashboardIndex]="dashboardIndex">
|
|
257
|
+
</widget-container>
|
|
258
|
+
</div>
|
|
259
|
+
</ng-template>
|
|
260
|
+
|
|
261
|
+
<div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
|
|
262
|
+
<div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
|
|
263
|
+
<div class="d-flex flex-nowrap">
|
|
264
|
+
<div><h4>Settings</h4></div>
|
|
265
|
+
<div style="margin-right: 0px; margin-left: auto;">
|
|
266
|
+
<span style="color: var(--pure-green);" (click)="saveConfiguration()">
|
|
267
|
+
<i class="fas fa-check-circle fa-2x"></i>
|
|
268
|
+
</span>
|
|
269
|
+
<span style="color: var(--pure-red);" (click)="cancelConfiguration()">
|
|
270
|
+
<i class="fas fa-times-circle fa-2x"></i>
|
|
271
|
+
</span>
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
<widget-configure #widgetConfigure></widget-configure>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
<ng-container *ngIf="dashboards?.length > 1">
|
|
280
|
+
<div class="dashboard-nav-trigger">
|
|
281
|
+
<span (mouseenter)="openDashboardNavState = 'opened'">
|
|
282
|
+
<i class="fas fa-th fa-2x"></i>
|
|
283
|
+
</span>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
<div class="dashboard-nav"
|
|
287
|
+
[@openDashboardNav]="openDashboardNavState"
|
|
288
|
+
[style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
|
|
289
|
+
(mouseleave)="openDashboardNavState = 'closed'">
|
|
290
|
+
<ng-container *ngFor="let dashboard of dashboards; index as i">
|
|
291
|
+
<div [id]="'dash-image-' + i"
|
|
292
|
+
class="widget-image"
|
|
293
|
+
[ngClass]="i === selectedIndex ? 'selected' : ''"
|
|
294
|
+
(click)="selectDashboard(i)">
|
|
295
|
+
</div>
|
|
296
|
+
</ng-container>
|
|
297
|
+
</div>
|
|
298
|
+
</ng-container>
|
|
299
|
+
|
|
300
|
+
<ng-container *ngIf="helpMode">
|
|
301
|
+
<div id="helpParent">
|
|
302
|
+
<div id="helpChild">
|
|
303
|
+
<div style="width: 100%; display: inline-flex;">
|
|
304
|
+
<h4>Help</h4>
|
|
305
|
+
<span style="margin-right: 0; margin-left: auto; color: var(--pure-red);" (click)="setHelpMode(false)">
|
|
306
|
+
<i class="fas fa-times fa-lg"></i>
|
|
307
|
+
</span>
|
|
308
|
+
</div>
|
|
309
|
+
<div>
|
|
310
|
+
The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
|
|
311
|
+
can drag and drop widgets to change the order and double click a widget to change its configuration.
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
</ng-container>
|
|
316
316
|
`, isInline: true, styles: ["#helpParent{position:fixed;display:flex;width:100vw;height:100vh;left:0;top:0;z-index:999;background:#00000040}#helpChild{width:75%;height:75%;margin:auto;background:#fff;border-radius:25px;box-shadow:2px 2px #000;padding:20px}.sidebar-widget-config{background-color:#fdd;border-left:gray 1px solid;padding:10px 0 10px 10px;opacity:0;width:0%}.modal{background-color:#00000040}.edit-mode-header{border-bottom:black 1px dashed;padding-top:10px;padding-bottom:10px;z-index:10;background-color:#fff}.edit-mode-header button{padding:.2rem .5rem}.btn-space{margin-left:10px}.btn.green{background-color:green}.btn.red{background-color:red}.dashboard-nav-trigger{bottom:40px;position:fixed;z-index:100;display:inline-block;width:100%;text-align:center;padding-top:15px;background:#fff;background:linear-gradient(0deg,white,white,transparent)}.dashboard-nav{bottom:-150px;position:fixed;z-index:101;display:inline-block;background-color:#fff}.widget-image{display:inline-block;max-height:100px;height:100px;min-height:100px;max-width:100px;width:100px;min-width:100px;border:black 1px solid;vertical-align:bottom;overflow-y:hidden;overflow-x:hidden}.widget-image.selected{border:red 2px solid}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.WidgetContainerComponent, selector: "widget-container", inputs: ["dashboard", "dashboardIndex"] }, { kind: "component", type: i7.WidgetAddComponent, selector: "widget-add", inputs: ["dashboardIndex"] }, { kind: "component", type: i8.WidgetConfigureComponent, selector: "widget-configure" }], animations: [
|
|
317
317
|
trigger("openConfigContent", [
|
|
318
318
|
state("false", style({
|
|
@@ -384,129 +384,129 @@ export class DashboardComponent {
|
|
|
384
384
|
}
|
|
385
385
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
386
386
|
type: Component,
|
|
387
|
-
args: [{ selector: "dashboard", template: `
|
|
388
|
-
<ng-template #confirmDialog let-c="close" let-d="dismiss">
|
|
389
|
-
<div class="modal-header">
|
|
390
|
-
<h5 class="modal-title">Delete</h5>
|
|
391
|
-
</div>
|
|
392
|
-
<div class="modal-body">
|
|
393
|
-
<p>Are you sure?</p>
|
|
394
|
-
</div>
|
|
395
|
-
<div class="modal-footer">
|
|
396
|
-
<button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
|
|
397
|
-
<button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
|
|
398
|
-
</div>
|
|
399
|
-
</ng-template>
|
|
400
|
-
|
|
401
|
-
<widget-add [dashboardIndex]="selectedIndex"></widget-add>
|
|
402
|
-
|
|
403
|
-
<div class="edit-mode-header"
|
|
404
|
-
[@openEditModeHeader]="editMode"
|
|
405
|
-
[@openEditModeHeaderDisplay]="editMode">
|
|
406
|
-
<button class="btn btn-primary btn-space"
|
|
407
|
-
(click)="addWidget()">
|
|
408
|
-
<i class="fas fa-plus fa-2x"></i>
|
|
409
|
-
<br />
|
|
410
|
-
<span>Widget</span>
|
|
411
|
-
</button>
|
|
412
|
-
<button *ngIf="configMode === 'true'"
|
|
413
|
-
class="btn btn-primary btn-space red"
|
|
414
|
-
(click)="deleteWidget()">
|
|
415
|
-
<i class="fas fa-times fa-2x"></i>
|
|
416
|
-
<br />
|
|
417
|
-
<span>Widget</span>
|
|
418
|
-
</button>
|
|
419
|
-
<button class="btn btn-primary btn-space"
|
|
420
|
-
(click)="addDashboard()">
|
|
421
|
-
<i class="fas fa-plus fa-2x"></i>
|
|
422
|
-
<br />
|
|
423
|
-
<span>Dashboard</span>
|
|
424
|
-
</button>
|
|
425
|
-
<button class="btn btn-primary btn-space red"
|
|
426
|
-
*ngIf="dashboards.length > 1"
|
|
427
|
-
(click)="deleteDashboard(confirmDialog)">
|
|
428
|
-
<i class="fas fa-times fa-2x"></i>
|
|
429
|
-
<br />
|
|
430
|
-
<span>Dashboard</span>
|
|
431
|
-
</button>
|
|
432
|
-
<button class="btn btn-primary btn-space green"
|
|
433
|
-
(click)="setEditMode(false)">
|
|
434
|
-
<i class="fas fa-check fa-2x"></i>
|
|
435
|
-
<br />
|
|
436
|
-
<span>Done</span>
|
|
437
|
-
</button>
|
|
438
|
-
</div>
|
|
439
|
-
|
|
440
|
-
<div class="outlet-row">
|
|
441
|
-
|
|
442
|
-
<!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
|
|
443
|
-
<ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
|
|
444
|
-
<div class="d-flex"
|
|
445
|
-
[style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
|
|
446
|
-
[style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
|
|
447
|
-
[@openConfigContent]="configMode">
|
|
448
|
-
<widget-container
|
|
449
|
-
[dashboard]="dashboard"
|
|
450
|
-
[dashboardIndex]="dashboardIndex">
|
|
451
|
-
</widget-container>
|
|
452
|
-
</div>
|
|
453
|
-
</ng-template>
|
|
454
|
-
|
|
455
|
-
<div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
|
|
456
|
-
<div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
|
|
457
|
-
<div class="d-flex flex-nowrap">
|
|
458
|
-
<div><h4>Settings</h4></div>
|
|
459
|
-
<div style="margin-right: 0px; margin-left: auto;">
|
|
460
|
-
<span style="color: green;" (click)="saveConfiguration()">
|
|
461
|
-
<i class="fas fa-check-circle fa-2x"></i>
|
|
462
|
-
</span>
|
|
463
|
-
<span style="color: red;" (click)="cancelConfiguration()">
|
|
464
|
-
<i class="fas fa-times-circle fa-2x"></i>
|
|
465
|
-
</span>
|
|
466
|
-
</div>
|
|
467
|
-
</div>
|
|
468
|
-
<widget-configure #widgetConfigure></widget-configure>
|
|
469
|
-
</div>
|
|
470
|
-
</div>
|
|
471
|
-
</div>
|
|
472
|
-
|
|
473
|
-
<ng-container *ngIf="dashboards?.length > 1">
|
|
474
|
-
<div class="dashboard-nav-trigger">
|
|
475
|
-
<span (mouseenter)="openDashboardNavState = 'opened'">
|
|
476
|
-
<i class="fas fa-th fa-2x"></i>
|
|
477
|
-
</span>
|
|
478
|
-
</div>
|
|
479
|
-
|
|
480
|
-
<div class="dashboard-nav"
|
|
481
|
-
[@openDashboardNav]="openDashboardNavState"
|
|
482
|
-
[style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
|
|
483
|
-
(mouseleave)="openDashboardNavState = 'closed'">
|
|
484
|
-
<ng-container *ngFor="let dashboard of dashboards; index as i">
|
|
485
|
-
<div [id]="'dash-image-' + i"
|
|
486
|
-
class="widget-image"
|
|
487
|
-
[ngClass]="i === selectedIndex ? 'selected' : ''"
|
|
488
|
-
(click)="selectDashboard(i)">
|
|
489
|
-
</div>
|
|
490
|
-
</ng-container>
|
|
491
|
-
</div>
|
|
492
|
-
</ng-container>
|
|
493
|
-
|
|
494
|
-
<ng-container *ngIf="helpMode">
|
|
495
|
-
<div id="helpParent">
|
|
496
|
-
<div id="helpChild">
|
|
497
|
-
<div style="width: 100%; display: inline-flex;">
|
|
498
|
-
<h4>Help</h4>
|
|
499
|
-
<span style="margin-right: 0; margin-left: auto; color: red;" (click)="setHelpMode(false)">
|
|
500
|
-
<i class="fas fa-times fa-lg"></i>
|
|
501
|
-
</span>
|
|
502
|
-
</div>
|
|
503
|
-
<div>
|
|
504
|
-
The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
|
|
505
|
-
can drag and drop widgets to change the order and double click a widget to change its configuration.
|
|
506
|
-
</div>
|
|
507
|
-
</div>
|
|
508
|
-
</div>
|
|
509
|
-
</ng-container>
|
|
387
|
+
args: [{ selector: "dashboard", template: `
|
|
388
|
+
<ng-template #confirmDialog let-c="close" let-d="dismiss">
|
|
389
|
+
<div class="modal-header">
|
|
390
|
+
<h5 class="modal-title">Delete</h5>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="modal-body">
|
|
393
|
+
<p>Are you sure?</p>
|
|
394
|
+
</div>
|
|
395
|
+
<div class="modal-footer">
|
|
396
|
+
<button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
|
|
397
|
+
<button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
|
|
398
|
+
</div>
|
|
399
|
+
</ng-template>
|
|
400
|
+
|
|
401
|
+
<widget-add [dashboardIndex]="selectedIndex"></widget-add>
|
|
402
|
+
|
|
403
|
+
<div class="edit-mode-header"
|
|
404
|
+
[@openEditModeHeader]="editMode"
|
|
405
|
+
[@openEditModeHeaderDisplay]="editMode">
|
|
406
|
+
<button class="btn btn-primary btn-space"
|
|
407
|
+
(click)="addWidget()">
|
|
408
|
+
<i class="fas fa-plus fa-2x"></i>
|
|
409
|
+
<br />
|
|
410
|
+
<span>Widget</span>
|
|
411
|
+
</button>
|
|
412
|
+
<button *ngIf="configMode === 'true'"
|
|
413
|
+
class="btn btn-primary btn-space red"
|
|
414
|
+
(click)="deleteWidget()">
|
|
415
|
+
<i class="fas fa-times fa-2x"></i>
|
|
416
|
+
<br />
|
|
417
|
+
<span>Widget</span>
|
|
418
|
+
</button>
|
|
419
|
+
<button class="btn btn-primary btn-space"
|
|
420
|
+
(click)="addDashboard()">
|
|
421
|
+
<i class="fas fa-plus fa-2x"></i>
|
|
422
|
+
<br />
|
|
423
|
+
<span>Dashboard</span>
|
|
424
|
+
</button>
|
|
425
|
+
<button class="btn btn-primary btn-space red"
|
|
426
|
+
*ngIf="dashboards.length > 1"
|
|
427
|
+
(click)="deleteDashboard(confirmDialog)">
|
|
428
|
+
<i class="fas fa-times fa-2x"></i>
|
|
429
|
+
<br />
|
|
430
|
+
<span>Dashboard</span>
|
|
431
|
+
</button>
|
|
432
|
+
<button class="btn btn-primary btn-space green"
|
|
433
|
+
(click)="setEditMode(false)">
|
|
434
|
+
<i class="fas fa-check fa-2x"></i>
|
|
435
|
+
<br />
|
|
436
|
+
<span>Done</span>
|
|
437
|
+
</button>
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<div class="outlet-row">
|
|
441
|
+
|
|
442
|
+
<!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
|
|
443
|
+
<ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
|
|
444
|
+
<div class="d-flex"
|
|
445
|
+
[style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
|
|
446
|
+
[style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
|
|
447
|
+
[@openConfigContent]="configMode">
|
|
448
|
+
<widget-container
|
|
449
|
+
[dashboard]="dashboard"
|
|
450
|
+
[dashboardIndex]="dashboardIndex">
|
|
451
|
+
</widget-container>
|
|
452
|
+
</div>
|
|
453
|
+
</ng-template>
|
|
454
|
+
|
|
455
|
+
<div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
|
|
456
|
+
<div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
|
|
457
|
+
<div class="d-flex flex-nowrap">
|
|
458
|
+
<div><h4>Settings</h4></div>
|
|
459
|
+
<div style="margin-right: 0px; margin-left: auto;">
|
|
460
|
+
<span style="color: var(--pure-green);" (click)="saveConfiguration()">
|
|
461
|
+
<i class="fas fa-check-circle fa-2x"></i>
|
|
462
|
+
</span>
|
|
463
|
+
<span style="color: var(--pure-red);" (click)="cancelConfiguration()">
|
|
464
|
+
<i class="fas fa-times-circle fa-2x"></i>
|
|
465
|
+
</span>
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
<widget-configure #widgetConfigure></widget-configure>
|
|
469
|
+
</div>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
|
|
473
|
+
<ng-container *ngIf="dashboards?.length > 1">
|
|
474
|
+
<div class="dashboard-nav-trigger">
|
|
475
|
+
<span (mouseenter)="openDashboardNavState = 'opened'">
|
|
476
|
+
<i class="fas fa-th fa-2x"></i>
|
|
477
|
+
</span>
|
|
478
|
+
</div>
|
|
479
|
+
|
|
480
|
+
<div class="dashboard-nav"
|
|
481
|
+
[@openDashboardNav]="openDashboardNavState"
|
|
482
|
+
[style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
|
|
483
|
+
(mouseleave)="openDashboardNavState = 'closed'">
|
|
484
|
+
<ng-container *ngFor="let dashboard of dashboards; index as i">
|
|
485
|
+
<div [id]="'dash-image-' + i"
|
|
486
|
+
class="widget-image"
|
|
487
|
+
[ngClass]="i === selectedIndex ? 'selected' : ''"
|
|
488
|
+
(click)="selectDashboard(i)">
|
|
489
|
+
</div>
|
|
490
|
+
</ng-container>
|
|
491
|
+
</div>
|
|
492
|
+
</ng-container>
|
|
493
|
+
|
|
494
|
+
<ng-container *ngIf="helpMode">
|
|
495
|
+
<div id="helpParent">
|
|
496
|
+
<div id="helpChild">
|
|
497
|
+
<div style="width: 100%; display: inline-flex;">
|
|
498
|
+
<h4>Help</h4>
|
|
499
|
+
<span style="margin-right: 0; margin-left: auto; color: var(--pure-red);" (click)="setHelpMode(false)">
|
|
500
|
+
<i class="fas fa-times fa-lg"></i>
|
|
501
|
+
</span>
|
|
502
|
+
</div>
|
|
503
|
+
<div>
|
|
504
|
+
The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
|
|
505
|
+
can drag and drop widgets to change the order and double click a widget to change its configuration.
|
|
506
|
+
</div>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
</ng-container>
|
|
510
510
|
`, animations: [
|
|
511
511
|
trigger("openConfigContent", [
|
|
512
512
|
state("false", style({
|
|
@@ -587,4 +587,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
587
587
|
type: ViewChild,
|
|
588
588
|
args: ["widgetConfigure", { static: false }]
|
|
589
589
|
}] } });
|
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaXNEZXZNb2RlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiwgVmlld0NoaWxkLFxyXG4gIEhvc3RCaW5kaW5nXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcclxuaW1wb3J0IGRvbXRvaW1hZ2UgZnJvbSBcImRvbS10by1pbWFnZVwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7RGFzaGJvYXJkLCBXaWRnZXRJbnN0YW5jZX0gZnJvbSBcIi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7V2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tIFwiLi93aWRnZXQvd2lkZ2V0LWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQtZ2xvYmFsLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBEYXNoYm9hcmQgKHdpdGhpbiBhIGNhcmQtZ3JvdXApIGl0ZXJhdGVzIG92ZXIgY29uZmlndXJlZCB3aWRnZXRzIHRvIHByb2R1Y2UgZWFjaCBvbmUgaW4gYSBjYXJkLiAgVGhlIHdpZGdldHMgY2FuXHJcbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxyXG4gKiBpbmRlcGVuZGVudC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtRGlhbG9nIGxldC1jPVwiY2xvc2VcIiBsZXQtZD1cImRpc21pc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RGVsZXRlPC9oNT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPHA+QXJlIHlvdSBzdXJlPzwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjKCdZZXMnKVwiPlllczwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZCgnTm8nKVwiPk5vPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICBcclxuICAgIDx3aWRnZXQtYWRkIFtkYXNoYm9hcmRJbmRleF09XCJzZWxlY3RlZEluZGV4XCI+PC93aWRnZXQtYWRkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LW1vZGUtaGVhZGVyXCJcclxuICAgICAgICAgW0BvcGVuRWRpdE1vZGVIZWFkZXJdPVwiZWRpdE1vZGVcIlxyXG4gICAgICAgICBbQG9wZW5FZGl0TW9kZUhlYWRlckRpc3BsYXldPVwiZWRpdE1vZGVcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRXaWRnZXQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+V2lkZ2V0PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZ01vZGUgPT09ICd0cnVlJ1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVdpZGdldCgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+V2lkZ2V0PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGREYXNoYm9hcmQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+RGFzaGJvYXJkPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgcmVkXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZHMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhc2hib2FyZChjb25maXJtRGlhbG9nKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIGdyZWVuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RWRpdE1vZGUoZmFsc2UpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2sgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+RG9uZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gSXRlcmF0ZSBvdmVyIGFsbCBkYXNoYm9hcmRzLiAgU2hvdyBub24gc2VsZWN0ZWQgZGFzaGJvYXJkcyBvZmYgc2NyZWVuLiAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJzZWxlY3RlZEluZGV4ICE9PSBkYXNoYm9hcmRJbmRleCA/ICcxMDB2dycgOiAnaW5oZXJpdCdcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXHJcbiAgICAgICAgICAgICBbQG9wZW5Db25maWdDb250ZW50XT1cImNvbmZpZ01vZGVcIj5cclxuICAgICAgICAgIDx3aWRnZXQtY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxyXG4gICAgICAgICAgICAgIFtkYXNoYm9hcmRJbmRleF09XCJkYXNoYm9hcmRJbmRleFwiPlxyXG4gICAgICAgICAgPC93aWRnZXQtY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBcclxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsZXQtY29sdW1uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgaGVpZ2h0OiAxMDAlOyBwYWRkaW5nOiAycHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4OyBtYXJnaW4tbGVmdDogYXV0bztcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiBncmVlbjtcIiAoY2xpY2spPVwic2F2ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKGNsaWNrKT1cImNhbmNlbENvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDx3aWRnZXQtY29uZmlndXJlICN3aWRnZXRDb25maWd1cmU+PC93aWRnZXQtY29uZmlndXJlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFzaGJvYXJkcz8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdi10cmlnZ2VyXCI+XHJcbiAgICAgICAgPHNwYW4gKG1vdXNlZW50ZXIpPVwib3BlbkRhc2hib2FyZE5hdlN0YXRlID0gJ29wZW5lZCdcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRoIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdlwiXHJcbiAgICAgICAgICAgW0BvcGVuRGFzaGJvYXJkTmF2XT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZVwiXHJcbiAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiJ2NhbGMoNTB2dyAtICcgKyBkYXNoYm9hcmRzPy5sZW5ndGggKiA1MCArICdweCknXCJcclxuICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnY2xvc2VkJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhc2hib2FyZCBvZiBkYXNoYm9hcmRzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICA8ZGl2IFtpZF09XCInZGFzaC1pbWFnZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWltYWdlXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleCA/ICdzZWxlY3RlZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXNoYm9hcmQoaSlcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWxwTW9kZVwiPlxyXG4gICAgICA8ZGl2IGlkPVwiaGVscFBhcmVudFwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJoZWxwQ2hpbGRcIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWZsZXg7XCI+XHJcbiAgICAgICAgICAgIDxoND5IZWxwPC9oND5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDA7IG1hcmdpbi1sZWZ0OiBhdXRvOyBjb2xvcjogcmVkO1wiIChjbGljayk9XCJzZXRIZWxwTW9kZShmYWxzZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICBUaGUgZGFzaGJvYXJkIGlzIGEgY29sbGVjdGlvbiBvZiB3aWRnZXRzIHRoYXQgeW91IGNhbiBjdXN0b21pemUgdG8geW91ciBvd24gbmVlZHMuICBJbiB0aGlzIGVkaXQgbW9kZSwgeW91XHJcbiAgICAgICAgICAgIGNhbiBkcmFnIGFuZCBkcm9wIHdpZGdldHMgdG8gY2hhbmdlIHRoZSBvcmRlciBhbmQgZG91YmxlIGNsaWNrIGEgd2lkZ2V0IHRvIGNoYW5nZSBpdHMgY29uZmlndXJhdGlvbi5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGAsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcihcIm9wZW5Db25maWdDb250ZW50XCIsXHJcbiAgICAgIFtcclxuICAgICAgICBzdGF0ZShcImZhbHNlXCIsIHN0eWxlKHtcclxuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcInRydWVcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgd2lkdGg6IFwiODAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImZhbHNlID0+IHRydWVcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwidHJ1ZSA9PiBmYWxzZVwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ1NpZGViYXJcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiZmFsc2VcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIwXCIsXHJcbiAgICAgICAgICB3aWR0aDogXCIwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwidHJ1ZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBvcGFjaXR5OiBcIjFcIixcclxuICAgICAgICAgIHdpZHRoOiBcIjIwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcInRydWUgPT4gZmFsc2VcIiwgYW5pbWF0ZSgzMDApKVxyXG4gICAgICBdXHJcbiAgICApLFxyXG4gICAgdHJpZ2dlcihcIm9wZW5EYXNoYm9hcmROYXZcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMFwiLFxyXG4gICAgICAgICAgYm90dG9tOiBcIi0xNTBweFwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxyXG4gICAgICAgICAgYm90dG9tOiBcIjQwcHhcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDI1MCkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMTAwKSlcclxuICAgICAgXVxyXG4gICAgKSxcclxuICAgIC8qdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckNvbnRlbnRcIiwgW1xyXG4gICAgICBzdGF0ZShcImNsb3NlZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjBweFwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwicGFkZGluZy10b3BcIjogXCI5MXB4XCJcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGNsb3NlZFwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICBdKSwqL1xyXG4gICAgdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlclwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcIm9wYWNpdHlcIjogXCIwXCIsXHJcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwiaGlkZGVuXCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJvcGFjaXR5XCI6IFwiMVwiLFxyXG4gICAgICAgIFwib3ZlcmZsb3cteVwiOiBcInZpc2libGVcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckRpc3BsYXlcIiwgW1xyXG4gICAgICBzdGF0ZShcImNsb3NlZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwiZGlzcGxheVwiOiBcImZsZXhcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMTAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoXCIxMDBtcyAxMDBtc1wiKSlcclxuICAgIF0pXHJcbiAgXSxcclxuICBzdHlsZXM6IFtgXHJcbiAgICBcclxuICAgICNoZWxwUGFyZW50IHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB3aWR0aDogMTAwdnc7XHJcbiAgICAgIGhlaWdodDogMTAwdmg7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgei1pbmRleDogOTk5O1xyXG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAjaGVscENoaWxkIHtcclxuICAgICAgd2lkdGg6IDc1JTtcclxuICAgICAgaGVpZ2h0OiA3NSU7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xyXG4gICAgICBib3gtc2hhZG93OiAycHggMnB4IGJsYWNrO1xyXG4gICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAuc2lkZWJhci13aWRnZXQtY29uZmlnIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZGRkZDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IGdyYXkgMXB4IHNvbGlkO1xyXG4gICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAwJTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLm1vZGFsIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIge1xyXG4gICAgICBib3JkZXItYm90dG9tOiBibGFjayAxcHggZGFzaGVkO1xyXG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIgYnV0dG9uIHtcclxuICAgICAgcGFkZGluZzogLjJyZW0gLjVyZW07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5idG4tc3BhY2Uge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmJ0bi5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4ucmVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2LXRyaWdnZXIge1xyXG4gICAgICBib3R0b206IDQwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlLCB3aGl0ZSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2IHtcclxuICAgICAgYm90dG9tOiAtMTUwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAxO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAud2lkZ2V0LWltYWdlIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICBtYXgtaGVpZ2h0OiAxMDBweDtcclxuICAgICAgaGVpZ2h0OiAxMDBweDtcclxuICAgICAgbWluLWhlaWdodDogMTAwcHg7XHJcbiAgICAgIG1heC13aWR0aDogMTAwcHg7XHJcbiAgICAgIHdpZHRoOiAxMDBweDtcclxuICAgICAgbWluLXdpZHRoOiAxMDBweDtcclxuICAgICAgYm9yZGVyOiBibGFjayAxcHggc29saWQ7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XHJcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcclxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAud2lkZ2V0LWltYWdlLnNlbGVjdGVkIHtcclxuICAgICAgYm9yZGVyOiByZWQgMnB4IHNvbGlkO1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRGFzaGJvYXJkU2VydmljZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCB7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpIGNsYXNzTGlzdDogc3RyaW5nID0gXCJvdXRsZXQtY29sdW1uXCI7XHJcblxyXG4gIHB1YmxpYyBvcGVuRGFzaGJvYXJkTmF2U3RhdGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XHJcblxyXG4gIHB1YmxpYyBoZWxwTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlZGl0TW9kZTogc3RyaW5nID0gXCJjbG9zZWRcIjtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XHJcblxyXG4gIHB1YmxpYyBkYXNoYm9hcmRzOiBEYXNoYm9hcmRbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc2hvd1dpZGdldENvbnRhaW5lck5hdjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25maWdNb2RlOiBzdHJpbmcgPSBcImZhbHNlXCI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgd2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICBAVmlld0NoaWxkKFwid2lkZ2V0Q29uZmlndXJlXCIsIHtzdGF0aWM6IGZhbHNlfSkgd2lkZ2V0Q29uZmlndXJlOiBXaWRnZXRDb25maWd1cmVDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkYXNoYm9hcmRHbG9iYWxTZXJ2aWNlOiBEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZHJhZ3VsYVNlcnZpY2U6IERyYWd1bGFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRzID0gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldERhc2hib2FyZHMoKTtcclxuXHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGFzaGJvYXJkc1N0YXRlLnN1YnNjcmliZSgoZGFzaGJvYXJkczogRGFzaGJvYXJkW10pID0+IHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRzID0gZGFzaGJvYXJkcztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jb25maWd1cmF0aW9uV2lkZ2V0SW5zdGFuY2VTdWJqZWN0LnN1YnNjcmliZSgod2lkZ2V0SW5zdGFuY2U6IFdpZGdldEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwidHJ1ZVwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwiZmFsc2VcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEVkaXRNb2RlKCkuc3Vic2NyaWJlKChlZGl0TW9kZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJnZXRFZGl0TW9kZSBcIiArIGVkaXRNb2RlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVkaXRNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwib3BlbmVkXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwiY2xvc2VkXCI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qbGV0IGJhZyA9IHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xyXG4gICAgaWYgKGJhZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveShcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5jcmVhdGVHcm91cChcImF0dHJpYnV0ZS1jaG9pY2VzXCIsIHtcclxuICAgICAgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIsXHJcbiAgICAgIG1vdmVzOiBmdW5jdGlvbiAoZWw6IGFueSwgY29udGFpbmVyOiBhbnksIGhhbmRsZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5maW5kKFwiYXR0cmlidXRlLWNob2ljZXNcIilcclxuICAgICAgLmRyYWtlXHJcbiAgICAgIC5jb250YWluZXJzXHJcbiAgICAgIC5wdXNoKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXR0cmlidXRlLWNob2ljZXNcIikpO1xyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5kcm9wKFwiXCIpLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgbjogbnVtYmVyID0gMTtcclxuXHJcbiAgICAgIGZvciAobGV0IGVsIG9mIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ3aWRnZXQtaG9zdFwiKSkge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlV2lkZ2V0U29ydE9yZGVyKHRoaXMuc2VsZWN0ZWRJbmRleCwgK2VsLmdldEF0dHJpYnV0ZShcImlkXCIpLCBuKyspO1xyXG4gICAgICB9XHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhc2hib2FyZEdsb2JhbFNlcnZpY2Uuc2V0QWN0aXZlRGFzaGJvYXJkU2VydmljZSh0aGlzLmRhc2hib2FyZFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy53aWRnZXRDb250YWluZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCh3aWRnZXRDb250YWluZXJzOiBRdWVyeUxpc3QgPEVsZW1lbnRSZWY+KSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLnNldEFjdGl2ZURhc2hib2FyZFNlcnZpY2UoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdERhc2hib2FyZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZm9ybXMgZGFzaGJvYXJkU2VydmljZSBvZiBlZGl0TW9kZSBjaGFuZ2UuICBXaWRnZXQgaG9zdHMgd2lsbCBsaXN0ZW4gZm9yIHRoaXMgY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGVkaXRNb2RlXHJcbiAgICovXHJcbiAgc2V0RWRpdE1vZGUoZWRpdE1vZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zZXRFZGl0TW9kZShlZGl0TW9kZSk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWxwTW9kZShoZWxwTW9kZTogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcInNldEhlbHBNb2RlIFwiICsgaGVscE1vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGVscE1vZGUgPSBoZWxwTW9kZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2UgZG9tLXRvLWltYWdlIHRvIHJlbmRlciBlYWNoIHdpZGdldENvbnRhaW5lciBhcyBhbiBpbWFnZS4gIEFkZCBhbiBpbWFnZSBmb3IgZWFjaCB3aWRnZXRDb250YWluZXJcclxuICAgKiB0byB0aGUgZGFzaGJvYXJkTmF2IHZpZXcuXHJcbiAgICovXHJcbiAgcmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgdGhpcy53aWRnZXRDb250YWluZXJzLmZvckVhY2goKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICB2YXIgZWwgPSBzZWxmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2Rhc2gtaW1hZ2UtXCIgKyBpbmRleCk7XHJcbiAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICBkb210b2ltYWdlLnRvUG5nKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgaW1nLndpZHRoID0gMTAwO1xyXG4gICAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhVXJsO1xyXG4gICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgICAgICAgICAgICBzZWxmLnNob3dXaWRnZXRDb250YWluZXJOYXYgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldpZGdldCBJbWFnZSBFcnJvclwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIHRyaWdnZXIgdG8gZGFzaGJvYXJkU2VydmljZSB0byBvcGVuIHRoZSB3aWRnZXQgYWRkIGNvbXBvbmVudC4gIFRoYXQgY29tcG9uZW50IGxpc3RlbnMgZm9yXHJcbiAgICogdGhpcyB0cmlnZ2VyLlxyXG4gICAqL1xyXG4gIGFkZFdpZGdldCgpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXRTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGFzaGJvYXJkU2VydmljZS5jb25maWd1cmF0aW9uV2lkZ2V0SW5zdGFuY2VTdWJqZWN0LmdldFZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jYW5jZWxDb25maWd1cmF0aW9uV2lkZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbldpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBhZGQgYSBkYXNoYm9hcmQuICBBZGQgZGFzaGJvYXJkIHdpbGwgdXBkYXRlIGRhc2hib2FyZHMgdGhyb3VnaCBzdWJzY3JpYmUgYW5kXHJcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleCAod2hpY2ggaXMgdGhlIGxhc3QgZGFzaGJvYXJkKS5cclxuICAgKi9cclxuICBhZGREYXNoYm9hcmQoKSB7XHJcbiAgICBsZXQgZGFzaGJvYXJkOiBEYXNoYm9hcmQgPSBuZXcgRGFzaGJvYXJkKCk7XHJcbiAgICBkYXNoYm9hcmQubmFtZSA9IFwiVGVtcFwiO1xyXG4gICAgZGFzaGJvYXJkLnNvcnRPcmRlciA9IHRoaXMuZGFzaGJvYXJkcy5sZW5ndGg7XHJcbiAgICBkYXNoYm9hcmQud2lkZ2V0SW5zdGFuY2VzID0gW107XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkRGFzaGJvYXJkKGRhc2hib2FyZCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxscyBkYXNoYm9hcmRTZXJ2aWNlIHRvIGRlbGV0ZSBkYXNoYm9hcmQuICBEZWxldGUgZGFzaGJvYXJkIHdpbGwgdXBkYXRlIGRhc2hib2FyZHMgdGhyb3VnaCBzdWJzY3JpYmUgYW5kXHJcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250ZW50XHJcbiAgICovXHJcbiAgZGVsZXRlRGFzaGJvYXJkKGNvbnRlbnQpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCkucmVzdWx0LnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiWWVzXCIpIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlRGFzaGJvYXJkKHRoaXMuc2VsZWN0ZWRJbmRleCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
590
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XG4gKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGlzRGV2TW9kZSwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcbmltcG9ydCBkb210b2ltYWdlIGZyb20gXCJkb20tdG8taW1hZ2VcIjtcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuXG5pbXBvcnQge0Rhc2hib2FyZCwgV2lkZ2V0SW5zdGFuY2V9IGZyb20gXCIuL21vZGVsL21vZGVsXCI7XG5pbXBvcnQge0Rhc2hib2FyZFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XG5pbXBvcnQge1dpZGdldENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSBcIi4vd2lkZ2V0L3dpZGdldC1jb250YWluZXIuY29tcG9uZW50XCI7XG5pbXBvcnQge0Rhc2hib2FyZEdsb2JhbFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC1nbG9iYWwuc2VydmljZVwiO1xuXG4vKipcbiAqIERhc2hib2FyZCAod2l0aGluIGEgY2FyZC1ncm91cCkgaXRlcmF0ZXMgb3ZlciBjb25maWd1cmVkIHdpZGdldHMgdG8gcHJvZHVjZSBlYWNoIG9uZSBpbiBhIGNhcmQuICBUaGUgd2lkZ2V0cyBjYW5cbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxuICogaW5kZXBlbmRlbnQuXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbmZpcm1EaWFsb2cgbGV0LWM9XCJjbG9zZVwiIGxldC1kPVwiZGlzbWlzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkRlbGV0ZTwvaDU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwPkFyZSB5b3Ugc3VyZT88L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYygnWWVzJylcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJkKCdObycpXCI+Tm88L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8d2lkZ2V0LWFkZCBbZGFzaGJvYXJkSW5kZXhdPVwic2VsZWN0ZWRJbmRleFwiPjwvd2lkZ2V0LWFkZD5cblxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LW1vZGUtaGVhZGVyXCJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyXT1cImVkaXRNb2RlXCJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyRGlzcGxheV09XCJlZGl0TW9kZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkV2lkZ2V0KClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS0yeFwiPjwvaT5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZ01vZGUgPT09ICd0cnVlJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSByZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlV2lkZ2V0KClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmEtMnhcIj48L2k+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8c3Bhbj5XaWRnZXQ8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZERhc2hib2FyZCgpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8c3Bhbj5EYXNoYm9hcmQ8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhc2hib2FyZChjb25maXJtRGlhbG9nKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS0yeFwiPjwvaT5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgZ3JlZW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RWRpdE1vZGUoZmFsc2UpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIGZhLTJ4XCI+PC9pPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPHNwYW4+RG9uZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cblxuICAgICAgPCEtLSBJdGVyYXRlIG92ZXIgYWxsIGRhc2hib2FyZHMuICBTaG93IG5vbiBzZWxlY3RlZCBkYXNoYm9hcmRzIG9mZiBzY3JlZW4uIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJzEwMHZ3JyA6ICdpbmhlcml0J1wiXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXG4gICAgICAgICAgICAgW0BvcGVuQ29uZmlnQ29udGVudF09XCJjb25maWdNb2RlXCI+XG4gICAgICAgICAgPHdpZGdldC1jb250YWluZXJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxuICAgICAgICAgICAgICBbZGFzaGJvYXJkSW5kZXhdPVwiZGFzaGJvYXJkSW5kZXhcIj5cbiAgICAgICAgICA8L3dpZGdldC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3V0bGV0LWNvbHVtblwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IGhlaWdodDogMTAwJTsgcGFkZGluZzogMnB4O1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ub3dyYXBcIj5cbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDsgbWFyZ2luLWxlZnQ6IGF1dG87XCI+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLXB1cmUtZ3JlZW4pO1wiIChjbGljayk9XCJzYXZlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLXB1cmUtcmVkKTtcIiAoY2xpY2spPVwiY2FuY2VsQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8d2lkZ2V0LWNvbmZpZ3VyZSAjd2lkZ2V0Q29uZmlndXJlPjwvd2lkZ2V0LWNvbmZpZ3VyZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXNoYm9hcmRzPy5sZW5ndGggPiAxXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdi10cmlnZ2VyXCI+XG4gICAgICAgIDxzcGFuIChtb3VzZWVudGVyKT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZSA9ICdvcGVuZWQnXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGggZmEtMnhcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdlwiXG4gICAgICAgICAgIFtAb3BlbkRhc2hib2FyZE5hdl09XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGVcIlxuICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg1MHZ3IC0gJyArIGRhc2hib2FyZHM/Lmxlbmd0aCAqIDUwICsgJ3B4KSdcIlxuICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnY2xvc2VkJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXNoYm9hcmQgb2YgZGFzaGJvYXJkczsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgIDxkaXYgW2lkXT1cIidkYXNoLWltYWdlLScgKyBpXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWltYWdlXCJcbiAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImkgPT09IHNlbGVjdGVkSW5kZXggPyAnc2VsZWN0ZWQnIDogJydcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhc2hib2FyZChpKVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlbHBNb2RlXCI+XG4gICAgICA8ZGl2IGlkPVwiaGVscFBhcmVudFwiPlxuICAgICAgICA8ZGl2IGlkPVwiaGVscENoaWxkXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDtcIj5cbiAgICAgICAgICAgIDxoND5IZWxwPC9oND5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwOyBtYXJnaW4tbGVmdDogYXV0bzsgY29sb3I6IHZhcigtLXB1cmUtcmVkKTtcIiAoY2xpY2spPVwic2V0SGVscE1vZGUoZmFsc2UpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICBUaGUgZGFzaGJvYXJkIGlzIGEgY29sbGVjdGlvbiBvZiB3aWRnZXRzIHRoYXQgeW91IGNhbiBjdXN0b21pemUgdG8geW91ciBvd24gbmVlZHMuICBJbiB0aGlzIGVkaXQgbW9kZSwgeW91XG4gICAgICAgICAgICBjYW4gZHJhZyBhbmQgZHJvcCB3aWRnZXRzIHRvIGNoYW5nZSB0aGUgb3JkZXIgYW5kIGRvdWJsZSBjbGljayBhIHdpZGdldCB0byBjaGFuZ2UgaXRzIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ0NvbnRlbnRcIixcbiAgICAgIFtcbiAgICAgICAgc3RhdGUoXCJmYWxzZVwiLCBzdHlsZSh7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgIH0pKSxcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcbiAgICAgICAgICB3aWR0aDogXCI4MCVcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIHRyaWdnZXIoXCJvcGVuQ29uZmlnU2lkZWJhclwiLFxuICAgICAgW1xuICAgICAgICBzdGF0ZShcImZhbHNlXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICB3aWR0aDogXCIwJVwiXG4gICAgICAgIH0pKSxcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjFcIixcbiAgICAgICAgICB3aWR0aDogXCIyMCVcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIHRyaWdnZXIoXCJvcGVuRGFzaGJvYXJkTmF2XCIsXG4gICAgICBbXG4gICAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICBib3R0b206IFwiLTE1MHB4XCJcbiAgICAgICAgfSkpLFxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogXCIxXCIsXG4gICAgICAgICAgYm90dG9tOiBcIjQwcHhcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMjUwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMTAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIC8qdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckNvbnRlbnRcIiwgW1xuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xuICAgICAgICBcInBhZGRpbmctdG9wXCI6IFwiMHB4XCJcbiAgICAgIH0pKSxcbiAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjkxcHhcIlxuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgzMDApKSxcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcbiAgICBdKSwqL1xuICAgIHRyaWdnZXIoXCJvcGVuRWRpdE1vZGVIZWFkZXJcIiwgW1xuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xuICAgICAgICBcIm9wYWNpdHlcIjogXCIwXCIsXG4gICAgICAgIFwib3ZlcmZsb3cteVwiOiBcImhpZGRlblwiXG4gICAgICB9KSksXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgIFwib3BhY2l0eVwiOiBcIjFcIixcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwidmlzaWJsZVwiXG4gICAgICB9KSksXG4gICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDMwMCkpLFxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgzMDApKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoXCJvcGVuRWRpdE1vZGVIZWFkZXJEaXNwbGF5XCIsIFtcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXG4gICAgICB9KSksXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgIFwiZGlzcGxheVwiOiBcImZsZXhcIlxuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoXCIxMDBtcyAxMDBtc1wiKSlcbiAgICBdKVxuICBdLFxuICBzdHlsZXM6IFtgXG5cbiAgICAjaGVscFBhcmVudCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICB6LWluZGV4OiA5OTk7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgICNoZWxwQ2hpbGQge1xuICAgICAgd2lkdGg6IDc1JTtcbiAgICAgIGhlaWdodDogNzUlO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogYXV0bztcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjVweDtcbiAgICAgIGJveC1zaGFkb3c6IDJweCAycHggYmxhY2s7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cblxuICAgIC5zaWRlYmFyLXdpZGdldC1jb25maWcge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZGRkZDtcbiAgICAgIGJvcmRlci1sZWZ0OiBncmF5IDFweCBzb2xpZDtcbiAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgd2lkdGg6IDAlO1xuICAgIH1cblxuICAgIC5tb2RhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgIC5lZGl0LW1vZGUtaGVhZGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IGJsYWNrIDFweCBkYXNoZWQ7XG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAuZWRpdC1tb2RlLWhlYWRlciBidXR0b24ge1xuICAgICAgcGFkZGluZzogLjJyZW0gLjVyZW07XG4gICAgfVxuXG4gICAgLmJ0bi1zcGFjZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICB9XG5cbiAgICAuYnRuLmdyZWVuIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xuICAgIH1cblxuICAgIC5idG4ucmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbiAgICB9XG5cbiAgICAuZGFzaGJvYXJkLW5hdi10cmlnZ2VyIHtcbiAgICAgIGJvdHRvbTogNDBweDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB3aGl0ZSwgd2hpdGUsIHRyYW5zcGFyZW50KTtcbiAgICB9XG5cbiAgICAuZGFzaGJvYXJkLW5hdiB7XG4gICAgICBib3R0b206IC0xNTBweDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC53aWRnZXQtaW1hZ2Uge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWF4LWhlaWdodDogMTAwcHg7XG4gICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgbWluLWhlaWdodDogMTAwcHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMHB4O1xuICAgICAgd2lkdGg6IDEwMHB4O1xuICAgICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICAgIGJvcmRlcjogYmxhY2sgMXB4IHNvbGlkO1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAud2lkZ2V0LWltYWdlLnNlbGVjdGVkIHtcbiAgICAgIGJvcmRlcjogcmVkIDJweCBzb2xpZDtcbiAgICB9XG4gIGBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBEYXNoYm9hcmRTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29tcG9uZW50IHtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwib3V0bGV0LWNvbHVtblwiO1xuXG4gIHB1YmxpYyBvcGVuRGFzaGJvYXJkTmF2U3RhdGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XG5cbiAgcHVibGljIGhlbHBNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0TW9kZTogc3RyaW5nID0gXCJjbG9zZWRcIjtcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xuXG4gIHB1YmxpYyBkYXNoYm9hcmRzOiBEYXNoYm9hcmRbXSA9IFtdO1xuXG4gIHB1YmxpYyBzaG93V2lkZ2V0Q29udGFpbmVyTmF2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uZmlnTW9kZTogc3RyaW5nID0gXCJmYWxzZVwiO1xuXG4gIEBWaWV3Q2hpbGRyZW4oV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgd2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBWaWV3Q2hpbGQoXCJ3aWRnZXRDb25maWd1cmVcIiwge3N0YXRpYzogZmFsc2V9KSB3aWRnZXRDb25maWd1cmU6IFdpZGdldENvbmZpZ3VyZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZGFzaGJvYXJkR2xvYmFsU2VydmljZTogRGFzaGJvYXJkR2xvYmFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkcmFndWxhU2VydmljZTogRHJhZ3VsYVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xuICAgIHRoaXMuZGFzaGJvYXJkcyA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXREYXNoYm9hcmRzKCk7XG5cbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGFzaGJvYXJkc1N0YXRlLnN1YnNjcmliZSgoZGFzaGJvYXJkczogRGFzaGJvYXJkW10pID0+IHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkcyA9IGRhc2hib2FyZHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xuICAgICAgaWYgKHdpZGdldEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwidHJ1ZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWdNb2RlID0gXCJmYWxzZVwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEVkaXRNb2RlKCkuc3Vic2NyaWJlKChlZGl0TW9kZTogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcImdldEVkaXRNb2RlIFwiICsgZWRpdE1vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwib3BlbmVkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gXCJjbG9zZWRcIjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qbGV0IGJhZyA9IHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xuICAgIGlmIChiYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kcmFndWxhU2VydmljZS5kZXN0cm95KFwiYXR0cmlidXRlLWNob2ljZXNcIik7XG4gICAgfVxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuY3JlYXRlR3JvdXAoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiLCB7XG4gICAgICBkaXJlY3Rpb246IFwidmVydGljYWxcIixcbiAgICAgIG1vdmVzOiBmdW5jdGlvbiAoZWw6IGFueSwgY29udGFpbmVyOiBhbnksIGhhbmRsZTogYW55KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpXG4gICAgICAuZHJha2VcbiAgICAgIC5jb250YWluZXJzXG4gICAgICAucHVzaCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2F0dHJpYnV0ZS1jaG9pY2VzXCIpKTtcbiAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLmRyb3AoXCJcIikuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBsZXQgbjogbnVtYmVyID0gMTtcblxuICAgICAgZm9yIChsZXQgZWwgb2YgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIndpZGdldC1ob3N0XCIpKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlV2lkZ2V0U29ydE9yZGVyKHRoaXMuc2VsZWN0ZWRJbmRleCwgK2VsLmdldEF0dHJpYnV0ZShcImlkXCIpLCBuKyspO1xuICAgICAgfVxuICAgIH0pOyovXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhc2hib2FyZEdsb2JhbFNlcnZpY2Uuc2V0QWN0aXZlRGFzaGJvYXJkU2VydmljZSh0aGlzLmRhc2hib2FyZFNlcnZpY2UpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5jaGFuZ2VzLnN1YnNjcmliZSgod2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0IDxFbGVtZW50UmVmPikgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJEYXNoYm9hcmROYXZJbWFnZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGFzaGJvYXJkR2xvYmFsU2VydmljZS5zZXRBY3RpdmVEYXNoYm9hcmRTZXJ2aWNlKCk7XG4gIH1cblxuICBzZWxlY3REYXNoYm9hcmQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZm9ybXMgZGFzaGJvYXJkU2VydmljZSBvZiBlZGl0TW9kZSBjaGFuZ2UuICBXaWRnZXQgaG9zdHMgd2lsbCBsaXN0ZW4gZm9yIHRoaXMgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdE1vZGVcbiAgICovXG4gIHNldEVkaXRNb2RlKGVkaXRNb2RlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnNldEVkaXRNb2RlKGVkaXRNb2RlKTtcbiAgfVxuXG4gIHNldEhlbHBNb2RlKGhlbHBNb2RlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmluZm8oXCJzZXRIZWxwTW9kZSBcIiArIGhlbHBNb2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmhlbHBNb2RlID0gaGVscE1vZGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgZG9tLXRvLWltYWdlIHRvIHJlbmRlciBlYWNoIHdpZGdldENvbnRhaW5lciBhcyBhbiBpbWFnZS4gIEFkZCBhbiBpbWFnZSBmb3IgZWFjaCB3aWRnZXRDb250YWluZXJcbiAgICogdG8gdGhlIGRhc2hib2FyZE5hdiB2aWV3LlxuICAgKi9cbiAgcmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy53aWRnZXRDb250YWluZXJzLmZvckVhY2goKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgdmFyIGVsID0gc2VsZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNkYXNoLWltYWdlLVwiICsgaW5kZXgpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBkb210b2ltYWdlLnRvUG5nKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgaW1nLndpZHRoID0gMTAwO1xuICAgICAgICAgICAgICBpbWcuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgICAgICAgc2VsZi5zaG93V2lkZ2V0Q29udGFpbmVyTmF2ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXaWRnZXQgSW1hZ2UgRXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDIwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRyaWdnZXIgdG8gZGFzaGJvYXJkU2VydmljZSB0byBvcGVuIHRoZSB3aWRnZXQgYWRkIGNvbXBvbmVudC4gIFRoYXQgY29tcG9uZW50IGxpc3RlbnMgZm9yXG4gICAqIHRoaXMgdHJpZ2dlci5cbiAgICovXG4gIGFkZFdpZGdldCgpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0U3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgZGVsZXRlV2lkZ2V0KCkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5kZWxldGVXaWRnZXQodGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvbmZpZ3VyYXRpb25XaWRnZXRJbnN0YW5jZVN1YmplY3QuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBjYW5jZWxDb25maWd1cmF0aW9uKCkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jYW5jZWxDb25maWd1cmF0aW9uV2lkZ2V0KCk7XG4gIH1cblxuICBzYXZlQ29uZmlndXJhdGlvbigpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25XaWRnZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBkYXNoYm9hcmRTZXJ2aWNlIHRvIGFkZCBhIGRhc2hib2FyZC4gIEFkZCBkYXNoYm9hcmQgd2lsbCB1cGRhdGUgZGFzaGJvYXJkcyB0aHJvdWdoIHN1YnNjcmliZSBhbmRcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleCAod2hpY2ggaXMgdGhlIGxhc3QgZGFzaGJvYXJkKS5cbiAgICovXG4gIGFkZERhc2hib2FyZCgpIHtcbiAgICBsZXQgZGFzaGJvYXJkOiBEYXNoYm9hcmQgPSBuZXcgRGFzaGJvYXJkKCk7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBcIlRlbXBcIjtcbiAgICBkYXNoYm9hcmQuc29ydE9yZGVyID0gdGhpcy5kYXNoYm9hcmRzLmxlbmd0aDtcbiAgICBkYXNoYm9hcmQud2lkZ2V0SW5zdGFuY2VzID0gW107XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZERhc2hib2FyZChkYXNoYm9hcmQpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBkZWxldGUgZGFzaGJvYXJkLiAgRGVsZXRlIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxuICAgKiB0aGlzIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIHRoZSBwcm9jZXNzIHdoaWNoIHJldHVybnMgdGhlIG5ldyBzZWxlY3RlZEluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGVudFxuICAgKi9cbiAgZGVsZXRlRGFzaGJvYXJkKGNvbnRlbnQpIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQpLnJlc3VsdC50aGVuKChyZXN1bHQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJZZXNcIikge1xuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlRGFzaGJvYXJkKHRoaXMuc2VsZWN0ZWRJbmRleCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|