@huntsman-cancer-institute/dashboard 17.9.0 → 17.9.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.
@@ -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: 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>
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: 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>
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQXZCcEIsY0FBUyxHQUFXLGVBQWUsQ0FBQztRQUVuRCwwQkFBcUIsR0FBVyxRQUFRLENBQUM7UUFFekMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVcsUUFBUSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRTdCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUUvQyxlQUFVLEdBQVcsT0FBTyxDQUFDO1FBWTNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBdUIsRUFBRSxFQUFFO1lBQzFFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtDQUFrQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRTtZQUNwRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWlCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7YUFvQks7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQXdDLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFFBQWlCO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFpQjtRQUMzQixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQXNCLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ3RFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ1AsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO3lCQUN2QyxJQUFJLENBQUMsVUFBVSxPQUFPO3dCQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUN0QixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQzt3QkFDaEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7d0JBQ2xCLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO3dCQUNsQixFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLFVBQVUsS0FBSzt3QkFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDN0MsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLElBQUksU0FBUyxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7UUFDM0MsU0FBUyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDeEIsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUM3QyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ3hFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLE9BQU87UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQzdELElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDcEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0ExTFUsa0JBQWtCO2tHQUFsQixrQkFBa0IseUZBSmxCO1lBQ1QsZ0JBQWdCO1NBQ2pCLG9LQWtCYSx3QkFBd0IsMkJBQVUsVUFBVSw2QkEvVGhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySFQsKzFEQUNXO1lBQ1YsT0FBTyxDQUFDLG1CQUFtQixFQUN6QjtnQkFDRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztvQkFDbkIsS0FBSyxFQUFFLE1BQU07aUJBQ2QsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO29CQUNsQixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFDLENBQ0Y7WUFDRCxPQUFPLENBQUMsbUJBQW1CLEVBQ3pCO2dCQUNFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO29CQUNuQixPQUFPLEVBQUUsR0FBRztvQkFDWixLQUFLLEVBQUUsSUFBSTtpQkFDWixDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxHQUFHO29CQUNaLEtBQUssRUFBRSxLQUFLO2lCQUNiLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUMsQ0FDRjtZQUNELE9BQU8sQ0FBQyxrQkFBa0IsRUFDeEI7Z0JBQ0UsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxHQUFHO29CQUNaLE1BQU0sRUFBRSxRQUFRO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxHQUFHO29CQUNaLE1BQU0sRUFBRSxNQUFNO2lCQUNmLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzdDLENBQ0Y7WUFDRDs7Ozs7Ozs7O2lCQVNLO1lBQ0wsT0FBTyxDQUFDLG9CQUFvQixFQUFFO2dCQUM1QixLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztvQkFDcEIsU0FBUyxFQUFFLEdBQUc7b0JBQ2QsWUFBWSxFQUFFLFFBQVE7aUJBQ3ZCLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztvQkFDcEIsU0FBUyxFQUFFLEdBQUc7b0JBQ2QsWUFBWSxFQUFFLFNBQVM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzdDLENBQUM7WUFDRixPQUFPLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ25DLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO29CQUNwQixTQUFTLEVBQUUsTUFBTTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO29CQUNwQixTQUFTLEVBQUUsTUFBTTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUNILFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdkQsQ0FBQztTQUNIOzsyRkEwR1Usa0JBQWtCO2tCQWpUOUIsU0FBUzsrQkFDRSxXQUFXLFlBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJIVCxjQUNXO3dCQUNWLE9BQU8sQ0FBQyxtQkFBbUIsRUFDekI7NEJBQ0UsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Z0NBQ25CLEtBQUssRUFBRSxNQUFNOzZCQUNkLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztnQ0FDbEIsS0FBSyxFQUFFLEtBQUs7NkJBQ2IsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDMUMsQ0FDRjt3QkFDRCxPQUFPLENBQUMsbUJBQW1CLEVBQ3pCOzRCQUNFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2dDQUNuQixPQUFPLEVBQUUsR0FBRztnQ0FDWixLQUFLLEVBQUUsSUFBSTs2QkFDWixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7Z0NBQ2xCLE9BQU8sRUFBRSxHQUFHO2dDQUNaLEtBQUssRUFBRSxLQUFLOzZCQUNiLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDekMsVUFBVSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzFDLENBQ0Y7d0JBQ0QsT0FBTyxDQUFDLGtCQUFrQixFQUN4Qjs0QkFDRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLEdBQUc7Z0NBQ1osTUFBTSxFQUFFLFFBQVE7NkJBQ2pCLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLEdBQUc7Z0NBQ1osTUFBTSxFQUFFLE1BQU07NkJBQ2YsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdDLENBQ0Y7d0JBQ0Q7Ozs7Ozs7Ozs2QkFTSzt3QkFDTCxPQUFPLENBQUMsb0JBQW9CLEVBQUU7NEJBQzVCLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsR0FBRztnQ0FDZCxZQUFZLEVBQUUsUUFBUTs2QkFDdkIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsR0FBRztnQ0FDZCxZQUFZLEVBQUUsU0FBUzs2QkFDeEIsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdDLENBQUM7d0JBQ0YsT0FBTyxDQUFDLDJCQUEyQixFQUFFOzRCQUNuQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsU0FBUyxFQUFFLE1BQU07NkJBQ2xCLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsU0FBUyxFQUFFLE1BQU07NkJBQ2xCLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3lCQUN2RCxDQUFDO3FCQUNILGFBc0dVO3dCQUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XG4gKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGlzRGV2TW9kZSwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcbmltcG9ydCBkb210b2ltYWdlIGZyb20gXCJkb20tdG8taW1hZ2VcIjtcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuXG5pbXBvcnQge0Rhc2hib2FyZCwgV2lkZ2V0SW5zdGFuY2V9IGZyb20gXCIuL21vZGVsL21vZGVsXCI7XG5pbXBvcnQge0Rhc2hib2FyZFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XG5pbXBvcnQge1dpZGdldENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSBcIi4vd2lkZ2V0L3dpZGdldC1jb250YWluZXIuY29tcG9uZW50XCI7XG5pbXBvcnQge0Rhc2hib2FyZEdsb2JhbFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC1nbG9iYWwuc2VydmljZVwiO1xuXG4vKipcbiAqIERhc2hib2FyZCAod2l0aGluIGEgY2FyZC1ncm91cCkgaXRlcmF0ZXMgb3ZlciBjb25maWd1cmVkIHdpZGdldHMgdG8gcHJvZHVjZSBlYWNoIG9uZSBpbiBhIGNhcmQuICBUaGUgd2lkZ2V0cyBjYW5cbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxuICogaW5kZXBlbmRlbnQuXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbmZpcm1EaWFsb2cgbGV0LWM9XCJjbG9zZVwiIGxldC1kPVwiZGlzbWlzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkRlbGV0ZTwvaDU+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==
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaXNEZXZNb2RlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiwgVmlld0NoaWxkLFxyXG4gIEhvc3RCaW5kaW5nXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcclxuaW1wb3J0IGRvbXRvaW1hZ2UgZnJvbSBcImRvbS10by1pbWFnZVwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7RGFzaGJvYXJkLCBXaWRnZXRJbnN0YW5jZX0gZnJvbSBcIi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7V2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tIFwiLi93aWRnZXQvd2lkZ2V0LWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQtZ2xvYmFsLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBEYXNoYm9hcmQgKHdpdGhpbiBhIGNhcmQtZ3JvdXApIGl0ZXJhdGVzIG92ZXIgY29uZmlndXJlZCB3aWRnZXRzIHRvIHByb2R1Y2UgZWFjaCBvbmUgaW4gYSBjYXJkLiAgVGhlIHdpZGdldHMgY2FuXHJcbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxyXG4gKiBpbmRlcGVuZGVudC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtRGlhbG9nIGxldC1jPVwiY2xvc2VcIiBsZXQtZD1cImRpc21pc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RGVsZXRlPC9oNT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPHA+QXJlIHlvdSBzdXJlPzwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjKCdZZXMnKVwiPlllczwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZCgnTm8nKVwiPk5vPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8d2lkZ2V0LWFkZCBbZGFzaGJvYXJkSW5kZXhdPVwic2VsZWN0ZWRJbmRleFwiPjwvd2lkZ2V0LWFkZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC1tb2RlLWhlYWRlclwiXHJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyXT1cImVkaXRNb2RlXCJcclxuICAgICAgICAgW0BvcGVuRWRpdE1vZGVIZWFkZXJEaXNwbGF5XT1cImVkaXRNb2RlXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkV2lkZ2V0KClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJjb25maWdNb2RlID09PSAndHJ1ZSdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSByZWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVXaWRnZXQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGFzaGJvYXJkKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEYXNoYm9hcmQoY29uZmlybURpYWxvZylcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS0yeFwiPjwvaT5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8c3Bhbj5EYXNoYm9hcmQ8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSBncmVlblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEVkaXRNb2RlKGZhbHNlKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRvbmU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gSXRlcmF0ZSBvdmVyIGFsbCBkYXNoYm9hcmRzLiAgU2hvdyBub24gc2VsZWN0ZWQgZGFzaGJvYXJkcyBvZmYgc2NyZWVuLiAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJzZWxlY3RlZEluZGV4ICE9PSBkYXNoYm9hcmRJbmRleCA/ICcxMDB2dycgOiAnaW5oZXJpdCdcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXHJcbiAgICAgICAgICAgICBbQG9wZW5Db25maWdDb250ZW50XT1cImNvbmZpZ01vZGVcIj5cclxuICAgICAgICAgIDx3aWRnZXQtY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxyXG4gICAgICAgICAgICAgIFtkYXNoYm9hcmRJbmRleF09XCJkYXNoYm9hcmRJbmRleFwiPlxyXG4gICAgICAgICAgPC93aWRnZXQtY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsZXQtY29sdW1uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgaGVpZ2h0OiAxMDAlOyBwYWRkaW5nOiAycHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4OyBtYXJnaW4tbGVmdDogYXV0bztcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1wdXJlLWdyZWVuKTtcIiAoY2xpY2spPVwic2F2ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1wdXJlLXJlZCk7XCIgKGNsaWNrKT1cImNhbmNlbENvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDx3aWRnZXQtY29uZmlndXJlICN3aWRnZXRDb25maWd1cmU+PC93aWRnZXQtY29uZmlndXJlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXNoYm9hcmRzPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtbmF2LXRyaWdnZXJcIj5cclxuICAgICAgICA8c3BhbiAobW91c2VlbnRlcik9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnb3BlbmVkJ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGggZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtbmF2XCJcclxuICAgICAgICAgICBbQG9wZW5EYXNoYm9hcmROYXZdPVwib3BlbkRhc2hib2FyZE5hdlN0YXRlXCJcclxuICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg1MHZ3IC0gJyArIGRhc2hib2FyZHM/Lmxlbmd0aCAqIDUwICsgJ3B4KSdcIlxyXG4gICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZSA9ICdjbG9zZWQnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGFzaGJvYXJkIG9mIGRhc2hib2FyZHM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgIDxkaXYgW2lkXT1cIidkYXNoLWltYWdlLScgKyBpXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJpID09PSBzZWxlY3RlZEluZGV4ID8gJ3NlbGVjdGVkJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhc2hib2FyZChpKVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlbHBNb2RlXCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJoZWxwUGFyZW50XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImhlbHBDaGlsZFwiPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDtcIj5cclxuICAgICAgICAgICAgPGg0PkhlbHA8L2g0PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMDsgbWFyZ2luLWxlZnQ6IGF1dG87IGNvbG9yOiB2YXIoLS1wdXJlLXJlZCk7XCIgKGNsaWNrKT1cInNldEhlbHBNb2RlKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIFRoZSBkYXNoYm9hcmQgaXMgYSBjb2xsZWN0aW9uIG9mIHdpZGdldHMgdGhhdCB5b3UgY2FuIGN1c3RvbWl6ZSB0byB5b3VyIG93biBuZWVkcy4gIEluIHRoaXMgZWRpdCBtb2RlLCB5b3VcclxuICAgICAgICAgICAgY2FuIGRyYWcgYW5kIGRyb3Agd2lkZ2V0cyB0byBjaGFuZ2UgdGhlIG9yZGVyIGFuZCBkb3VibGUgY2xpY2sgYSB3aWRnZXQgdG8gY2hhbmdlIGl0cyBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgYCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ0NvbnRlbnRcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiZmFsc2VcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwidHJ1ZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICB3aWR0aDogXCI4MCVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwiZmFsc2UgPT4gdHJ1ZVwiLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgICAgXVxyXG4gICAgKSxcclxuICAgIHRyaWdnZXIoXCJvcGVuQ29uZmlnU2lkZWJhclwiLFxyXG4gICAgICBbXHJcbiAgICAgICAgc3RhdGUoXCJmYWxzZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcclxuICAgICAgICAgIHdpZHRoOiBcIjAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxyXG4gICAgICAgICAgd2lkdGg6IFwiMjAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImZhbHNlID0+IHRydWVcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwidHJ1ZSA9PiBmYWxzZVwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkRhc2hib2FyZE5hdlwiLFxyXG4gICAgICBbXHJcbiAgICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIwXCIsXHJcbiAgICAgICAgICBib3R0b206IFwiLTE1MHB4XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIxXCIsXHJcbiAgICAgICAgICBib3R0b206IFwiNDBweFwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMjUwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgxMDApKVxyXG4gICAgICBdXHJcbiAgICApLFxyXG4gICAgLyp0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyQ29udGVudFwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcInBhZGRpbmctdG9wXCI6IFwiMHB4XCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjkxcHhcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgIF0pLCovXHJcbiAgICB0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyXCIsIFtcclxuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwib3BhY2l0eVwiOiBcIjBcIixcclxuICAgICAgICBcIm92ZXJmbG93LXlcIjogXCJoaWRkZW5cIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcclxuICAgICAgICBcIm9wYWNpdHlcIjogXCIxXCIsXHJcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwidmlzaWJsZVwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgzMDApKVxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyRGlzcGxheVwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcImRpc3BsYXlcIjogXCJub25lXCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwiZmxleFwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcclxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZShcIjEwMG1zIDEwMG1zXCIpKVxyXG4gICAgXSlcclxuICBdLFxyXG4gIHN0eWxlczogW2BcclxuXHJcbiAgICAjaGVscFBhcmVudCB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgd2lkdGg6IDEwMHZ3O1xyXG4gICAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHotaW5kZXg6IDk5OTtcclxuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAgIH1cclxuXHJcbiAgICAjaGVscENoaWxkIHtcclxuICAgICAgd2lkdGg6IDc1JTtcclxuICAgICAgaGVpZ2h0OiA3NSU7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xyXG4gICAgICBib3gtc2hhZG93OiAycHggMnB4IGJsYWNrO1xyXG4gICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLXdpZGdldC1jb25maWcge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkZGRkO1xyXG4gICAgICBib3JkZXItbGVmdDogZ3JheSAxcHggc29saWQ7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDAlO1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIge1xyXG4gICAgICBib3JkZXItYm90dG9tOiBibGFjayAxcHggZGFzaGVkO1xyXG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuXHJcbiAgICAuZWRpdC1tb2RlLWhlYWRlciBidXR0b24ge1xyXG4gICAgICBwYWRkaW5nOiAuMnJlbSAuNXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuLXNwYWNlIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4ucmVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2LXRyaWdnZXIge1xyXG4gICAgICBib3R0b206IDQwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlLCB3aGl0ZSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2IHtcclxuICAgICAgYm90dG9tOiAtMTUwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAxO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC53aWRnZXQtaW1hZ2Uge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDEwMHB4O1xyXG4gICAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgICBtaW4taGVpZ2h0OiAxMDBweDtcclxuICAgICAgbWF4LXdpZHRoOiAxMDBweDtcclxuICAgICAgd2lkdGg6IDEwMHB4O1xyXG4gICAgICBtaW4td2lkdGg6IDEwMHB4O1xyXG4gICAgICBib3JkZXI6IGJsYWNrIDFweCBzb2xpZDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcclxuICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xyXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgLndpZGdldC1pbWFnZS5zZWxlY3RlZCB7XHJcbiAgICAgIGJvcmRlcjogcmVkIDJweCBzb2xpZDtcclxuICAgIH1cclxuICBgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIERhc2hib2FyZFNlcnZpY2VcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQge1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwib3V0bGV0LWNvbHVtblwiO1xyXG5cclxuICBwdWJsaWMgb3BlbkRhc2hib2FyZE5hdlN0YXRlOiBzdHJpbmcgPSBcImNsb3NlZFwiO1xyXG5cclxuICBwdWJsaWMgaGVscE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZWRpdE1vZGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xyXG5cclxuICBwdWJsaWMgZGFzaGJvYXJkczogRGFzaGJvYXJkW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNob3dXaWRnZXRDb250YWluZXJOYXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uZmlnTW9kZTogc3RyaW5nID0gXCJmYWxzZVwiO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFdpZGdldENvbnRhaW5lckNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHdpZGdldENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIndpZGdldENvbmZpZ3VyZVwiLCB7c3RhdGljOiBmYWxzZX0pIHdpZGdldENvbmZpZ3VyZTogV2lkZ2V0Q29uZmlndXJlQ29tcG9uZW50O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZGFzaGJvYXJkR2xvYmFsU2VydmljZTogRGFzaGJvYXJkR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkcyA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXREYXNoYm9hcmRzKCk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRhc2hib2FyZHNTdGF0ZS5zdWJzY3JpYmUoKGRhc2hib2FyZHM6IERhc2hib2FyZFtdKSA9PiB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkcyA9IGRhc2hib2FyZHM7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xyXG4gICAgICBpZiAod2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ01vZGUgPSBcInRydWVcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ01vZGUgPSBcImZhbHNlXCI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRFZGl0TW9kZSgpLnN1YnNjcmliZSgoZWRpdE1vZGU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiZ2V0RWRpdE1vZGUgXCIgKyBlZGl0TW9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGUgPSBcIm9wZW5lZFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGUgPSBcImNsb3NlZFwiO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKmxldCBiYWcgPSB0aGlzLmRyYWd1bGFTZXJ2aWNlLmZpbmQoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiKTtcclxuICAgIGlmIChiYWcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLmRlc3Ryb3koXCJhdHRyaWJ1dGUtY2hvaWNlc1wiKTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuY3JlYXRlR3JvdXAoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiLCB7XHJcbiAgICAgIGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxyXG4gICAgICBtb3ZlczogZnVuY3Rpb24gKGVsOiBhbnksIGNvbnRhaW5lcjogYW55LCBoYW5kbGU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpXHJcbiAgICAgIC5kcmFrZVxyXG4gICAgICAuY29udGFpbmVyc1xyXG4gICAgICAucHVzaCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2F0dHJpYnV0ZS1jaG9pY2VzXCIpKTtcclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZHJvcChcIlwiKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgbGV0IG46IG51bWJlciA9IDE7XHJcblxyXG4gICAgICBmb3IgKGxldCBlbCBvZiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwid2lkZ2V0LWhvc3RcIikpIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZVdpZGdldFNvcnRPcmRlcih0aGlzLnNlbGVjdGVkSW5kZXgsICtlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSwgbisrKTtcclxuICAgICAgfVxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLnNldEFjdGl2ZURhc2hib2FyZFNlcnZpY2UodGhpcy5kYXNoYm9hcmRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5jaGFuZ2VzLnN1YnNjcmliZSgod2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0IDxFbGVtZW50UmVmPikgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlckRhc2hib2FyZE5hdkltYWdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkR2xvYmFsU2VydmljZS5zZXRBY3RpdmVEYXNoYm9hcmRTZXJ2aWNlKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3REYXNoYm9hcmQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmZvcm1zIGRhc2hib2FyZFNlcnZpY2Ugb2YgZWRpdE1vZGUgY2hhbmdlLiAgV2lkZ2V0IGhvc3RzIHdpbGwgbGlzdGVuIGZvciB0aGlzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBlZGl0TW9kZVxyXG4gICAqL1xyXG4gIHNldEVkaXRNb2RlKGVkaXRNb2RlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2V0RWRpdE1vZGUoZWRpdE1vZGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVscE1vZGUoaGVscE1vZGU6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJzZXRIZWxwTW9kZSBcIiArIGhlbHBNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhlbHBNb2RlID0gaGVscE1vZGU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIGRvbS10by1pbWFnZSB0byByZW5kZXIgZWFjaCB3aWRnZXRDb250YWluZXIgYXMgYW4gaW1hZ2UuICBBZGQgYW4gaW1hZ2UgZm9yIGVhY2ggd2lkZ2V0Q29udGFpbmVyXHJcbiAgICogdG8gdGhlIGRhc2hib2FyZE5hdiB2aWV3LlxyXG4gICAqL1xyXG4gIHJlbmRlckRhc2hib2FyZE5hdkltYWdlcygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5mb3JFYWNoKChlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIGVsID0gc2VsZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNkYXNoLWltYWdlLVwiICsgaW5kZXgpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgZG9tdG9pbWFnZS50b1BuZyhlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgIGltZy53aWR0aCA9IDEwMDtcclxuICAgICAgICAgICAgICBpbWcuc3JjID0gZGF0YVVybDtcclxuICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgICAgICAgc2VsZi5zaG93V2lkZ2V0Q29udGFpbmVyTmF2ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXaWRnZXQgSW1hZ2UgRXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyB0cmlnZ2VyIHRvIGRhc2hib2FyZFNlcnZpY2UgdG8gb3BlbiB0aGUgd2lkZ2V0IGFkZCBjb21wb25lbnQuICBUaGF0IGNvbXBvbmVudCBsaXN0ZW5zIGZvclxyXG4gICAqIHRoaXMgdHJpZ2dlci5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5nZXRWYWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbldpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25XaWRnZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxzIGRhc2hib2FyZFNlcnZpY2UgdG8gYWRkIGEgZGFzaGJvYXJkLiAgQWRkIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxyXG4gICAqIHRoaXMgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgdGhlIHByb2Nlc3Mgd2hpY2ggcmV0dXJucyB0aGUgbmV3IHNlbGVjdGVkSW5kZXggKHdoaWNoIGlzIHRoZSBsYXN0IGRhc2hib2FyZCkuXHJcbiAgICovXHJcbiAgYWRkRGFzaGJvYXJkKCkge1xyXG4gICAgbGV0IGRhc2hib2FyZDogRGFzaGJvYXJkID0gbmV3IERhc2hib2FyZCgpO1xyXG4gICAgZGFzaGJvYXJkLm5hbWUgPSBcIlRlbXBcIjtcclxuICAgIGRhc2hib2FyZC5zb3J0T3JkZXIgPSB0aGlzLmRhc2hib2FyZHMubGVuZ3RoO1xyXG4gICAgZGFzaGJvYXJkLndpZGdldEluc3RhbmNlcyA9IFtdO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZERhc2hib2FyZChkYXNoYm9hcmQpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBkZWxldGUgZGFzaGJvYXJkLiAgRGVsZXRlIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxyXG4gICAqIHRoaXMgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgdGhlIHByb2Nlc3Mgd2hpY2ggcmV0dXJucyB0aGUgbmV3IHNlbGVjdGVkSW5kZXguXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29udGVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZURhc2hib2FyZChjb250ZW50KSB7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQpLnJlc3VsdC50aGVuKChyZXN1bHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlllc1wiKSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZURhc2hib2FyZCh0aGlzLnNlbGVjdGVkSW5kZXgpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19