@messaia/cdk 13.3.0-rc06 → 13.3.0-rc07

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.
@@ -68,7 +68,7 @@ export class GenericListComponent extends BaseComponent {
68
68
  /**
69
69
  * If true, show the menu 'Delete'
70
70
  */
71
- this.deleteable = true;
71
+ this.deletable = true;
72
72
  /**
73
73
  * If true, show the menu 'Download'
74
74
  */
@@ -93,6 +93,10 @@ export class GenericListComponent extends BaseComponent {
93
93
  * Toolbar menu items
94
94
  */
95
95
  this.toolbarMenus = [];
96
+ /**
97
+ * List menu items
98
+ */
99
+ this.listActionMenus = [];
96
100
  /**
97
101
  * Table row menu items
98
102
  */
@@ -367,6 +371,20 @@ export class GenericListComponent extends BaseComponent {
367
371
  include(...inc) {
368
372
  inc?.forEach(x => this.includes.push(x));
369
373
  }
374
+ /**
375
+ * Add list menu items
376
+ */
377
+ addListMenuItems() {
378
+ /* Add 'Delete selected' menu item */
379
+ if (this.deletable) {
380
+ this.listActionMenus.push({
381
+ title: $localize `:@@deleteSelected:Delete selected`,
382
+ icon: 'delete_forever',
383
+ event: () => this.deleteItems(),
384
+ disable: () => !this.dataSource || !this.dataSource.selectionModel?.hasValue()
385
+ });
386
+ }
387
+ }
370
388
  /**
371
389
  * Add row menu items
372
390
  */
@@ -398,7 +416,7 @@ export class GenericListComponent extends BaseComponent {
398
416
  });
399
417
  }
400
418
  /* Add delete menu */
401
- if (this.deleteable) {
419
+ if (this.deletable) {
402
420
  this.toolbarMenus.unshift({
403
421
  title: $localize `:@@deleteSelected:Delete selected`,
404
422
  icon: 'delete_forever',
@@ -421,7 +439,7 @@ export class GenericListComponent extends BaseComponent {
421
439
  }
422
440
  }
423
441
  /**
424
- * Check if the item is deleteable
442
+ * Check if the item is deletable
425
443
  */
426
444
  canDeleteItem(row) { return true; }
427
445
  /**
@@ -490,4 +508,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
490
508
  type: HostListener,
491
509
  args: ['document:keydown', ['$event']]
492
510
  }] } });
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpEOztHQUVHO0FBQ0gsV0FBVztBQUVYLE1BQU0sT0FBZ0Isb0JBQThGLFNBQVEsYUFBYTtJQWlJeEk7OztPQUdHO0lBQ0gsWUFDUSxPQUFp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b0JBQW9CO2tCQUR6QyxTQUFTOytLQVdGLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9sQyxJQUFJO3NCQURWLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkErQzdCLFlBQVk7c0JBRGxCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQTRkcEQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBnZXRFbmRwb2ludCB9IGZyb20gJy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQXBwU3RvcmFnZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9oZWxwZXJzL2FwcC1zdG9yYWdlJztcclxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZW50aXR5JztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IFZkRHluYW1pY1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFibGUvY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vdGFibGUvZW51bXMvdGFibGUtY29sdW1uLXR5cGUnO1xyXG5pbXBvcnQgeyBnZXRUYWJsZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi90YWJsZS9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtY29sdW1uJztcclxuaW1wb3J0IHsgVGFibGVNZW51SXRlbSB9IGZyb20gJy4uLy4uL3RhYmxlL21vZGVscy90YWJsZS1tZW51LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS5kYXRhLXNvdXJjZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgbGlzdCBjb21wb25lbnQgZm9yIGNvbXBvbmVudHMgd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnRcclxuICovXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0xpc3RDb21wb25lbnQ8VEVudGl0eSBleHRlbmRzIElFbnRpdHkgfCBhbnksIFRTZXJ2aWNlIGV4dGVuZHMgR2VuZXJpY1NlcnZpY2U8VEVudGl0eT4+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblx0LyoqXHJcblx0ICogTGlzdCB0aXRsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJ0aXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kUGFnaW5hdG9yIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIHNvcnQ6IE1hdFNvcnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhZ2Ugc2l6ZSBvcHRpb25zXHJcblx0ICovXHJcblx0cHVibGljIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hdmlnYXRpb25zIHRvIGluY2x1ZGVzXHJcblx0ICovXHJcblx0cHVibGljIGluY2x1ZGVzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBwYXJhbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgcXVlcnk6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRhLXRhYmxlIGRhdGFzb3VyY2VcclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPiB8IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgc29ydCBjb2x1bW5cclxuXHQgKi9cclxuXHRwdWJsaWMgc29ydEFjdGl2ZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgZGlyZWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnREaXJlY3Rpb246IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZSB0aGUgdGFibGUgZm9yXHJcblx0ICovXHJcblx0cHVibGljIGNsYXNzSW5zdGFuY2U6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogY29sdW1uczogVGFibGVDb2x1bW5bXSBcclxuXHQgKi9cclxuXHRwdWJsaWMgY29sdW1uczogKFRhYmxlQ29sdW1uIHwgc3RyaW5nKVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmZXJlbmNlIHRvIE1kU29ydCBhdHRyaWJ1dGVcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFZkRHluYW1pY1RhYmxlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBkeW5hbWljVGFibGU6IFZkRHluYW1pY1RhYmxlQ29tcG9uZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgdHlwZSBvZiB0aGUgZGlhbG9nIGZvciBjcmVhdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGREaWFsb2dUeXBlOiBhbnkgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyB0aGUgY29sdW1uICdDaGVja2JveCdcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIGJ1dHRvbiAnQWRkJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRWRpdCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEZWxldGUnXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEb3dubG9hZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0R1cGxpY2F0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiByb3dOZ0NsYXNzOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dOZ0NsYXNzOiBGdW5jdGlvbiA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd0NsaWNrOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dDbGljazogRnVuY3Rpb24gPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBkZXRhaWxzVGVtcGxhdGU6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGRldGFpbHNUZW1wbGF0ZTogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogVG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51czogVGFibGVNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhYmxlIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGFjdGlvbk1lbnVzOiBUYWJsZU1lbnVJdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YUxvYWRlZCBldmVudCBzdWJzY3JpcHRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGF0YUxvYWRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBzZXJ2aWNlIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHNlcnZpY2U6IFRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwdWJsaWMgY2xhc3NUeXBlPzogeyBuZXcoKTogVEVudGl0eSB9XHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG5cdFx0LyogUmVhZCBzb21lIHBhcmFtcyBmcm9tIHJvdXRpbmcgZGF0YSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5xdWVyeSwgZGF0YS5xdWVyeSB8fCB7fSk7XHJcblx0XHRcdHRoaXMuY2xhc3NUeXBlIHx8PSBkYXRhLmNsYXNzVHlwZTtcclxuXHJcblx0XHRcdGlmIChkYXRhLmNvbHVtbnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4uKGRhdGEuY29sdW1ucyB8fCBbXSldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5lbmRwb2ludCkge1xyXG5cdFx0XHRcdHRoaXMuc2VydmljZS5lbmRwb2ludCA9IGRhdGEuZW5kcG9pbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChkYXRhLmluY2x1ZGVzKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNsdWRlcyA9IGRhdGEuaW5jbHVkZXM7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoeCkgJiYgeCAhPSAnY29sdW1ucycpIHtcclxuXHRcdFx0XHRcdHRoaXNbeF0gPSBkYXRhW3hdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBHZXQgY29sdW1ucyBmcm9tIGNsYXNzICovXHJcblx0XHRpZiAodGhpcy5jbGFzc1R5cGUpIHtcclxuXHRcdFx0dGhpcy5jbGFzc0luc3RhbmNlID0gbmV3IHRoaXMuY2xhc3NUeXBlKCk7XHJcblxyXG5cdFx0XHQvKiBHZXQgdGFibGUgZGVmaW5pdGlvbiAqL1xyXG5cdFx0XHR2YXIgdGFibGVEZWZpbml0aW9uID0gZ2V0VGFibGVEZWZpbml0aW9uKHRoaXMuY2xhc3NJbnN0YW5jZSk7XHJcblxyXG5cdFx0XHRPYmplY3Qua2V5cyh0YWJsZURlZmluaXRpb24gfHwge30pLmZvckVhY2goeCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoeCkpIHtcclxuXHRcdFx0XHRcdHRoaXNbeF0gPSB0YWJsZURlZmluaXRpb25beF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIEdldCBlbmRwb2ludCAqL1xyXG5cdFx0XHRjb25zdCBlbmRwb2ludCA9IChnZXRFbmRwb2ludCh0aGlzLmNsYXNzSW5zdGFuY2UpIHx8IHRhYmxlRGVmaW5pdGlvbj8uZW5kcG9pbnQpO1xyXG5cdFx0XHRpZiAoZW5kcG9pbnQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogU29ydCB0aGUgY29sdW1ucyBieSBpbmRleCAqL1xyXG5cdFx0XHRVdGlscy5zb3J0QXJyYXkodGFibGVEZWZpbml0aW9uLmNvbHVtbnMsICdpbmRleCcpO1xyXG5cclxuXHRcdFx0LyogU29ydCB0aGUgY29sdW1ucyBieSBpbmRleCAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4udGFibGVEZWZpbml0aW9uLmNvbHVtbnNdO1xyXG5cclxuXHRcdFx0LyogSGFuZGxlIGV2ZW50cyAqL1xyXG5cdFx0XHR0aGlzLmNvbHVtbnM/LmZvckVhY2goKHg6IFRhYmxlQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB4LmV2ZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdFx0bGV0IGV2ZW50TmFtZTogc3RyaW5nID0gKCh4LmV2ZW50KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdFx0eC5ldmVudCA9IChyb3c6IGFueSkgPT4gKHguZXZlbnRBcmdzID8gdGhpc1tldmVudE5hbWVdKHJvdywgeC5ldmVudEFyZ3MpIDogdGhpc1tldmVudE5hbWVdKHJvdykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBIaWRlIGNvbHVtbnMgdXNpbmcgcm91dGUgZGF0YSAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeDogVGFibGVDb2x1bW4pID0+ICF4LmhpZGUgfHwgIXguaGlkZShkYXRhKSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmR5bmFtaWNUYWJsZSkge1xyXG5cdFx0XHQvKiBBZGQgbWVudSBpdGVtcyBmb3IgZWFjaCByb3cgKi9cclxuXHRcdFx0dGhpcy5hZGRSb3dNZW51SXRlbXMoKTtcclxuXHJcblx0XHRcdC8qIENoZWNrIGlmIHRoZSBhY3Rpb24gY29sdW1uIGFscmVhZHkgZXhpc3RzICovXHJcblx0XHRcdHZhciBhY3Rpb25Db2xtdW4gPSAodGhpcy5jb2x1bW5zIGFzIFRhYmxlQ29sdW1uW10pPy5maW5kKHggPT4geC5uYW1lID09ICdhY3Rpb24nKTtcclxuXHJcblx0XHRcdC8qIElmIHNvLCBqdXN0IGFkZCB0aGUgbWVudSBpdGVtcyB0byBpdCAqL1xyXG5cdFx0XHRpZiAoYWN0aW9uQ29sbXVuICE9IG51bGwpIHtcclxuXHRcdFx0XHRhY3Rpb25Db2xtdW4uYWN0aW9uTWVudXMgPSBhY3Rpb25Db2xtdW4uYWN0aW9uTWVudXMgfHwgW107XHJcblx0XHRcdFx0dGhpcy5hY3Rpb25NZW51cy5mb3JFYWNoKHkgPT4gYWN0aW9uQ29sbXVuLmFjdGlvbk1lbnVzLnVuc2hpZnQoeSkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBPdGhlcndpc2UgYWRkIGEgbmV3IG9uZSAqL1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMucHVzaChuZXcgVGFibGVDb2x1bW4oe1xyXG5cdFx0XHRcdFx0aW5kZXg6IDIwMDAsXHJcblx0XHRcdFx0XHRuYW1lOiAnYWN0aW9uJyxcclxuXHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdGFjdGlvbk1lbnVzOiB0aGlzLmFjdGlvbk1lbnVzXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHF1ZXJ5IHBhcmFtcyBpbnRvIHF1ZXJ5IG9iamVjdCAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiBPYmplY3QuYXNzaWduKHRoaXMucXVlcnksIHggfHwge30sIHsgcmV0dXJuVXJsOiBudWxsIH0pKTtcclxuXHJcblx0XHQvKiBJbml0aWxpYWxpemUgdGhlIGRhdGEgc291cmNlIHdpdGggdGhlIGN1cnJlbnQgc2VydmljZSwgcGFnaW5hdG9yIGFuZCBzb3J0ICovXHJcblx0XHR0aGlzLnNvcnQgPSB0aGlzLmR5bmFtaWNUYWJsZT8ubWF0U29ydCB8fCAodGhpcy5zb3J0ID8gdGhpcy5zb3J0IDogbmV3IE1hdFNvcnQoKSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UgPSBuZXcgVGFibGVEYXRhU291cmNlPFRFbnRpdHksIFRTZXJ2aWNlPih0aGlzLnNlcnZpY2UhLCB0aGlzLnBhZ2luYXRvciwgdGhpcy5zb3J0KTtcclxuXHJcblx0XHQvKiBTZXQgaW5jbHVkZXMgKi9cclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5pbmNsdWRlcyA9IHRoaXMuaW5jbHVkZXM7XHJcblxyXG5cdFx0LyogTG9hZCBxdWVyeSBmcm9tIGJyb3dzZXIgc3RvcmFnZSAqL1xyXG5cdFx0dmFyIHN0b3JyZWRRdWVyeSA9IEFwcFN0b3JhZ2UuZ2V0T2JqZWN0KGAke3RoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZX0uJHt0aGlzLnJvdXRlci51cmx9YCk7XHJcblx0XHRpZiAoc3RvcnJlZFF1ZXJ5KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5maWVsZEZpbHRlcnMgPSB0aGlzLmNsZWFuKHN0b3JyZWRRdWVyeS5maWVsZEZpbHRlcnMpIHx8IHt9O1xyXG5cdFx0XHR0aGlzLnNvcnRBY3RpdmUgPSBzdG9ycmVkUXVlcnkuc29ydEJ5O1xyXG5cdFx0XHR0aGlzLnNvcnREaXJlY3Rpb24gPSBzdG9ycmVkUXVlcnkuc29ydERpcmVjdGlvbjtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnBhZ2VTaXplID0gc3RvcnJlZFF1ZXJ5LnBhZ2VTaXplO1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UucGFnZUluZGV4ID0gc3RvcnJlZFF1ZXJ5LnBhZ2VJbmRleDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgc29tZSBmaWx0ZXIgZnJvbSByb3V0ZXIgKi9cclxuXHRcdGlmICh0aGlzLnF1ZXJ5KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5zdGF0aWNGaWVsZEZpbHRlcnMgPSB0aGlzLnF1ZXJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJlbWVtYmVyIHRoZSBmaWx0ZXJzICovXHJcblx0XHR0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTb3VyY2Uub25EYXRhTG9hZGVkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblx0XHRcdGlmIChyZXN1bHQpIHtcclxuXHRcdFx0XHRBcHBTdG9yYWdlLnNldE9iamVjdChgJHt0aGlzLmFwcFNldHRpbmcucHJvamVjdE5hbWV9LiR7dGhpcy5yb3V0ZXIudXJsfWAsIHtcclxuXHRcdFx0XHRcdGZpZWxkRmlsdGVyczogdGhpcy5kYXRhU291cmNlLmZpZWxkRmlsdGVycyxcclxuXHRcdFx0XHRcdHNvcnRCeTogdGhpcy5zb3J0LmFjdGl2ZSxcclxuXHRcdFx0XHRcdHNvcnREaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcblx0XHRcdFx0XHRwYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIGxvYWRMaXN0KHJlc2V0U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlLnJlbG9hZChyZXNldFNlbGVjdGlvbik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZWFyY2hcclxuXHQgKiBAcGFyYW0gZmlsdGVyIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWFyY2goZmlsdGVyOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGFkZCBwYWdlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5hZGREaWFsb2dUeXBlKSB7XHJcblx0XHRcdHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuYWRkRGlhbG9nVHlwZSwgeyB3aWR0aDogJzY1MHB4JywgZGF0YTogdGhpcy5jbGFzc0luc3RhbmNlIH0pXHJcblx0XHRcdFx0LmFmdGVyQ2xvc2VkKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZExpc3QoZmFsc2UpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9L2FkZGBdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgZWRpdCBwYWdlLlxyXG5cdCAqIEBwYXJhbSBpdGVtIFRoZSBpZCBvZiB0aGUgaXRlbVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0KGl0ZW06IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9L2VkaXQvJHsoaXRlbSBhcyBJRW50aXR5KS5pZH1gXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlczogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLl9wYXRjaChpZCwgZmllbGRzLCB2YWx1ZSwgaW5jbHVkZXMsIF8gPT4gdGhpcy5sb2FkTGlzdCgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhdGNoZXMgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGVudGl0eVxyXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBwYXRjaFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgKG9wdGlvbmFsKSB2YWx1ZSB0byBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gaW5jbHVkZXMgSW5jbHVkZXMgc29tZSBuYXZpZ2F0aW9uc1xyXG5cdCAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiB0byBlIGNhbGxlZCBvbiBzdWNjZXNzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIF9wYXRjaChpZDogbnVtYmVyLCBmaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBhbnksIGluY2x1ZGVzOiBhbnksIHN1Y2Nlc3NDYWxsYmFjazogRnVuY3Rpb24gPSBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHQvKiBHZXQgZW50aXR5IGJ5IElEICovXHJcblx0XHRsZXQgZW50aXR5ID0gdGhpcy5kYXRhU291cmNlLml0ZW1zPy5maWx0ZXIoeCA9PiAoPGFueT54KS5pZCA9PT0gaWQpWzBdO1xyXG5cdFx0aWYgKGVudGl0eSkge1xyXG5cdFx0XHQvKiBCdWlsZCBwYXRjaCBtZXRob2RzICovXHJcblx0XHRcdGxldCBwYXRjaGVzID0gZmllbGRzLm1hcCh4ID0+IHsgcmV0dXJuIHsgb3A6ICdyZXBsYWNlJywgcGF0aDogYC8ke3h9YCwgdmFsdWU6IHZhbHVlICE9IHVuZGVmaW5lZCA/IHZhbHVlIDogZW50aXR5W3hdIH07IH0pO1xyXG5cclxuXHRcdFx0LyogU2VuZCByZXF1ZXN0ICovXHJcblx0XHRcdHRoaXMuc2VydmljZVxyXG5cdFx0XHRcdC5wYXRjaChpZCwgcGF0Y2hlcywgbnVsbCwgeyBoZWFkZXJzOiB7ICdTaG93LU1lc3NhZ2UnOiAnWWVzJyB9LCBwYXJhbXM6IGluY2x1ZGVzID8gVXRpbHMudG9IdHRwUGFyYW1zKHsgaW5jbHVkZXM6IGluY2x1ZGVzIH0pIDogbnVsbCB9KVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0LyogSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uLCBpZiBhbnkgKi9cclxuXHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0c3VjY2Vzc0NhbGxiYWNrKHgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR9LCBfID0+IHRoaXMuaXNTYXZpbmcgPSBmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgZGF0YWJhc2UuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZUl0ZW0oaXRlbTogVEVudGl0eSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaG93RGVsZXRlSXRlbURpYWxvZygpXHJcblx0XHRcdC5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2VydmljZS5kZWxldGUoKGl0ZW0gYXMgSUVudGl0eSkuaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZExpc3QodHJ1ZSk7XHJcblx0XHRcdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZGVidWcoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgYW4gaXRlbSBmcm9tIHRoZSBkYXRhYmFzZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlSXRlbXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbk1vZGVsLmhhc1ZhbHVlKCkpIHtcclxuXHRcdFx0dGhpcy5zaG93RGVsZXRlSXRlbXNEaWFsb2coKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlTGlzdCh0aGlzLmRhdGFTb3VyY2UuZ2V0U2VsZWN0ZWQoKSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KHRydWUpO1xyXG5cdFx0XHRcdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhlcnJvcik7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVG9nZ2xlcyBhIHByb3BlcnR5XHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICogQHBhcmFtIHByb3BlcnR5XHJcblx0ICovXHJcblx0cHVibGljIHRvZ2dsZShpdGVtOiBURW50aXR5LCBwcm9wZXJ0eTogc3RyaW5nID0gJ2VuYWJsZWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0LnBhdGNoKCg8YW55Pml0ZW0pLmlkLCBbeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgLyR7cHJvcGVydHl9YCwgdmFsdWU6IGl0ZW1bcHJvcGVydHldIH1dKVxyXG5cdFx0XHQuc3Vic2NyaWJlKHggPT4gdGhpcy5sb2FkTGlzdCgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwbG9hZHMgdGFybnNmZXJzIGNzdiBmaWxlc1xyXG5cdCAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHVwbG9hZFxyXG5cdCAqIEBwYXJhbSByZWxvYWQgSWYgdHJ1ZSwgcmVsb2FkIGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHVwbG9hZChmaWxlOiBGaWxlLCByZWxvYWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UudXBsb2FkKGZpbGUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdHJlc3BvbnNlID0gcmVzcG9uc2UuanNvbigpO1xyXG5cclxuXHRcdFx0LyogUmVsb2FkIGxpc3QgKi9cclxuXHRcdFx0aWYgKHJlbG9hZCkge1xyXG5cdFx0XHRcdHRoaXMubG9hZExpc3QoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSwgZXJyb3IgPT4geyB9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvd25sb2FkcyBhIGRvY3VtZW50XHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICovXHJcblx0cHVibGljIGRvd25sb2FkKGl0ZW06IFRFbnRpdHksIHBhdGg6IHN0cmluZyA9ICdkb3dubG9hZCcpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VydmljZS5kb3dubG9hZChgJHtwYXRofS8keyhpdGVtIGFzIElFbnRpdHkpLmlkfWApLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0c2F2ZUFzKG5ldyBCbG9iKFt4LmRhdGFdLCB7fSksIHguZmlsZW5hbWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEdXBsaWNhdGVzIGEgcmVjb3JkXHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICovXHJcblx0cHVibGljIGR1cGxpY2F0ZShpdGVtOiBURW50aXR5KSB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZHVwbGljYXRlKChpdGVtIGFzIElFbnRpdHkpLmlkKS5zdWJzY3JpYmUoXyA9PiB0aGlzLmxvYWRMaXN0KCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBpbmZvcm1zIHRoZSB0YWJsZSBob3cgdG8gdW5pcXVlbHkgaWRlbnRpZnkgcm93cyB0byBcclxuXHQgKiB0cmFjayBob3cgdGhlIGRhdGEgY2hhbmdlcyB3aXRoIGVhY2ggdXBkYXRlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gaXRlbS5pZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gaW5jIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKC4uLmluYzogc3RyaW5nW10pIHtcclxuXHRcdGluYz8uZm9yRWFjaCh4ID0+IHRoaXMuaW5jbHVkZXMucHVzaCh4KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgcm93IG1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkUm93TWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0LyogQWRkIGNoZWNrYm94IGNvbHVtbiAqL1xyXG5cdFx0aWYgKHRoaXMuc2VsZWN0YWJsZSkge1xyXG5cdFx0XHR0aGlzLmNvbHVtbnMudW5zaGlmdCh7XHJcblx0XHRcdFx0bmFtZTogJ3NlbGVjdCcsXHJcblx0XHRcdFx0dHlwZTogVGFibGVDb2x1bW5UeXBlLkNoZWNrYm94LFxyXG5cdFx0XHRcdGRpc2FibGU6IChyb3c6IFRFbnRpdHkpID0+ICF0aGlzLnNlbGVjdGFibGVJdGVtKHJvdyksXHJcblx0XHRcdFx0Y2VsbE5nQ2xhc3M6IChyb3c6IFRFbnRpdHkpID0+IHRoaXMuc2VsZWN0Q29sdW1uTmdDbGFzcyhyb3cpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEFkZCBkdXBsaWNhdGUgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZHVwbGljYWJsZSkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZHVwbGljYXRlOkR1cGxpY2F0ZWAsXHJcblx0XHRcdFx0aWNvbjogJ2ZpbGVfY29weScsXHJcblx0XHRcdFx0ZXZlbnQ6IChyb3c6IGFueSkgPT4gdGhpcy5kdXBsaWNhdGUocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZG93bmxvYWQgbWVudSAqL1xyXG5cdFx0aWYgKHRoaXMuZG93bmxvYWRhYmxlKSB7XHJcblx0XHRcdHRoaXMuYWN0aW9uTWVudXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkb3dubG9hZDpEb3dubG9hZGAsXHJcblx0XHRcdFx0aWNvbjogJ2ZpbGVfZG93bmxvYWQnLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZG93bmxvYWQocm93KSxcclxuXHRcdFx0XHRoaWRlOiAocm93OiBURW50aXR5KSA9PiAhdGhpcy5jYW5Eb3dubG9hZEl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZGVsZXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0ZWFibGUpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGVTZWxlY3RlZDpEZWxldGUgc2VsZWN0ZWRgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0ZXZlbnQ6IChfOiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbXMoKVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHRoaXMuYWN0aW9uTWVudXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbShyb3cpLFxyXG5cdFx0XHRcdGhpZGU6IChyb3c6IFRFbnRpdHkpID0+ICF0aGlzLmNhbkRlbGV0ZUl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZWRpdCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5lZGl0YWJsZSkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZWRpdDpFZGl0YCxcclxuXHRcdFx0XHRpY29uOiAnZWRpdF9ub3RlJyxcclxuXHRcdFx0XHRldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmVkaXQocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0ZWFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRGVsZXRlSXRlbShyb3c6IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRydWUgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0aGUgaXRlbSBpcyBkb3dubG9hZGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2FuRG93bmxvYWRJdGVtKHJvdzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZSB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIHNlbGVjdGFibGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2VsZWN0YWJsZUl0ZW0ocm93OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiB0cnVlIH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBOZ0NsYXNzIG9iamVjdCBmb3Igc2VsZWN0IGNvbHVtblxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RDb2x1bW5OZ0NsYXNzKHJvdzogVEVudGl0eSk6IGFueSB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzcG9uZHMgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzXHJcblx0ICogQHBhcmFtIGV2ZW50IFxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG5cdGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBhZGQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ2EnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuYWRkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZVVwJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xyXG5cdFx0XHRcdGNhc2UgJ1BhZ2VEb3duJzpcclxuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLm5leHRQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQSBjYWxsYmFjayB1c2VkIGZvciBhbnkgY3VzdG9tIGNsZWFudXAgdGhhdCBuZWVkcyB0byBvY2N1ciBcclxuXHQgKiB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMuZGF0YUxvYWRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufSJdfQ==
511
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Jhc2UvY29tcG9uZW50cy9nZW5lcmljLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpEOztHQUVHO0FBQ0gsV0FBVztBQUVYLE1BQU0sT0FBZ0Isb0JBQThGLFNBQVEsYUFBYTtJQXNJeEk7OztPQUdHO0lBQ0gsWUFDUSxPQUFp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R0FBRyxFQUFFO2dCQUNsQiwrQkFBK0I7Z0JBQy9CLEtBQUssUUFBUTtvQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM5QixNQUFNO2dCQUVQLDJCQUEyQjtnQkFDM0IsS0FBSyxVQUFVO29CQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzFCLE1BQU07YUFDUDtTQUNEO0lBQ0YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7SUFDRixDQUFDOzt1SkE3a0JvQixvQkFBb0I7MklBQXBCLG9CQUFvQixpSkFTOUIsWUFBWSxxRkFNWixPQUFPLDZGQThDUCx1QkFBdUI7MkZBN0RiLG9CQUFvQjtrQkFEekMsU0FBUzsrS0FXRixTQUFTO3NCQURmLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPbEMsSUFBSTtzQkFEVixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBK0M3QixZQUFZO3NCQURsQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFnZnBELG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZ2V0RW5kcG9pbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IEFwcFN0b3JhZ2UgfSBmcm9tICcuLi8uLi9jb21tb24vaGVscGVycy9hcHAtc3RvcmFnZSc7XHJcbmltcG9ydCB7IElFbnRpdHkgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2VudGl0eSc7XHJcbmltcG9ydCB7IEdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWZER5bmFtaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RhYmxlL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL3RhYmxlL2VudW1zL3RhYmxlLWNvbHVtbi10eXBlJztcclxuaW1wb3J0IHsgZ2V0VGFibGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vdGFibGUvZnVuY3Rpb25zL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvbW9kZWxzL3RhYmxlLWNvbHVtbic7XHJcbmltcG9ydCB7IFRhYmxlTWVudUl0ZW0gfSBmcm9tICcuLi8uLi90YWJsZS9tb2RlbHMvdGFibGUtbWVudS1pdGVtJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUvdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0XHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNMaXN0Q29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5IHwgYW55LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cdC8qKlxyXG5cdCAqIExpc3QgdGl0bGVcclxuXHQgKi9cclxuXHRwdWJsaWMgc3VidGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFBhZ2luYXRvciBlbGVtZW50XHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pXHJcblx0cHVibGljIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFNvcnQgYXR0cmlidXRlXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBzb3J0OiBNYXRTb3J0O1xyXG5cclxuXHQvKipcclxuXHQgKiBQYWdlIHNpemUgb3B0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDE1LCAyMCwgMzAsIDUwLCAxMDAsIDIwMF07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBuYXZpZ2F0aW9ucyB0byBpbmNsdWRlc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNsdWRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YS10YWJsZSBkYXRhc291cmNlXHJcblx0ICovXHJcblx0cHVibGljIGRhdGFTb3VyY2U6IFRhYmxlRGF0YVNvdXJjZTxURW50aXR5LCBUU2VydmljZT4gfCBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHNvcnQgY29sdW1uXHJcblx0ICovXHJcblx0cHVibGljIHNvcnRBY3RpdmU6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQ3VycmVudCBzb3J0IGRpcmVjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzb3J0RGlyZWN0aW9uOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB0byBjcmVhdGUgdGhlIHRhYmxlIGZvclxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjbGFzc0luc3RhbmNlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gXHJcblx0ICovXHJcblx0cHVibGljIGNvbHVtbnM6IChUYWJsZUNvbHVtbiB8IHN0cmluZylbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHJlZmVyZW5jZSB0byBNZFNvcnQgYXR0cmlidXRlXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChWZER5bmFtaWNUYWJsZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgZHluYW1pY1RhYmxlOiBWZER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHR5cGUgb2YgdGhlIGRpYWxvZyBmb3IgY3JlYXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkRGlhbG9nVHlwZTogYW55ID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgdGhlIGNvbHVtbiAnQ2hlY2tib3gnXHJcblx0ICovXHJcblx0cHVibGljIHNlbGVjdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBidXR0b24gJ0FkZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0VkaXQnXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvdyB0aGUgbWVudSAnRGVsZXRlJ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzaG93IHRoZSBtZW51ICdEb3dubG9hZCdcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3cgdGhlIG1lbnUgJ0R1cGxpY2F0ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiByb3dOZ0NsYXNzOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dOZ0NsYXNzOiBGdW5jdGlvbiA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJvd0NsaWNrOiBGdW5jdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3dDbGljazogRnVuY3Rpb24gPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiBkZXRhaWxzVGVtcGxhdGU6IEZ1bmN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGRldGFpbHNUZW1wbGF0ZTogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogVG9vbGJhciBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51czogVGFibGVNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpc3QgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBsaXN0QWN0aW9uTWVudXM6IFRhYmxlTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUYWJsZSByb3cgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhY3Rpb25NZW51czogVGFibGVNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGFMb2FkZWQgZXZlbnQgc3Vic2NyaXB0aW9uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRhdGFMb2FkZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0gc2VydmljZSBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBzZXJ2aWNlOiBUU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcblx0XHRwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHVibGljIGNsYXNzVHlwZT86IHsgbmV3KCk6IFRFbnRpdHkgfVxyXG5cdCkge1xyXG5cdFx0c3VwZXIocm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBcclxuXHQgKiBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuXHRcdC8qIFJlYWQgc29tZSBwYXJhbXMgZnJvbSByb3V0aW5nIGRhdGEgKi9cclxuXHRcdHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG5cdFx0XHRPYmplY3QuYXNzaWduKHRoaXMucXVlcnksIGRhdGEucXVlcnkgfHwge30pO1xyXG5cdFx0XHR0aGlzLmNsYXNzVHlwZSB8fD0gZGF0YS5jbGFzc1R5cGU7XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5jb2x1bW5zKSB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zID0gWy4uLihkYXRhLmNvbHVtbnMgfHwgW10pXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGRhdGEuZW5kcG9pbnQpIHtcclxuXHRcdFx0XHR0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSBkYXRhLmVuZHBvaW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZGF0YS5pbmNsdWRlcykge1xyXG5cdFx0XHRcdHRoaXMuaW5jbHVkZXMgPSBkYXRhLmluY2x1ZGVzO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpICYmIHggIT0gJ2NvbHVtbnMnKSB7XHJcblx0XHRcdFx0XHR0aGlzW3hdID0gZGF0YVt4XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogR2V0IGNvbHVtbnMgZnJvbSBjbGFzcyAqL1xyXG5cdFx0aWYgKHRoaXMuY2xhc3NUeXBlKSB7XHJcblx0XHRcdHRoaXMuY2xhc3NJbnN0YW5jZSA9IG5ldyB0aGlzLmNsYXNzVHlwZSgpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRhYmxlIGRlZmluaXRpb24gKi9cclxuXHRcdFx0dmFyIHRhYmxlRGVmaW5pdGlvbiA9IGdldFRhYmxlRGVmaW5pdGlvbih0aGlzLmNsYXNzSW5zdGFuY2UpO1xyXG5cclxuXHRcdFx0T2JqZWN0LmtleXModGFibGVEZWZpbml0aW9uIHx8IHt9KS5mb3JFYWNoKHggPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KHgpKSB7XHJcblx0XHRcdFx0XHR0aGlzW3hdID0gdGFibGVEZWZpbml0aW9uW3hdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKiBHZXQgZW5kcG9pbnQgKi9cclxuXHRcdFx0Y29uc3QgZW5kcG9pbnQgPSAoZ2V0RW5kcG9pbnQodGhpcy5jbGFzc0luc3RhbmNlKSB8fCB0YWJsZURlZmluaXRpb24/LmVuZHBvaW50KTtcclxuXHRcdFx0aWYgKGVuZHBvaW50KSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFx0VXRpbHMuc29ydEFycmF5KHRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zLCAnaW5kZXgnKTtcclxuXHJcblx0XHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFx0dGhpcy5jb2x1bW5zID0gWy4uLnRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zXTtcclxuXHJcblx0XHRcdC8qIEhhbmRsZSBldmVudHMgKi9cclxuXHRcdFx0dGhpcy5jb2x1bW5zPy5mb3JFYWNoKCh4OiBUYWJsZUNvbHVtbikgPT4ge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgeC5ldmVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRcdGxldCBldmVudE5hbWU6IHN0cmluZyA9ICgoeC5ldmVudCkgYXMgc3RyaW5nKTtcclxuXHRcdFx0XHRcdHguZXZlbnQgPSAocm93OiBhbnkpID0+ICh4LmV2ZW50QXJncyA/IHRoaXNbZXZlbnROYW1lXShyb3csIHguZXZlbnRBcmdzKSA6IHRoaXNbZXZlbnROYW1lXShyb3cpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0LyogSGlkZSBjb2x1bW5zIHVzaW5nIHJvdXRlIGRhdGEgKi9cclxuXHRcdFx0dGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHg6IFRhYmxlQ29sdW1uKSA9PiAheC5oaWRlIHx8ICF4LmhpZGUoZGF0YSkpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5keW5hbWljVGFibGUpIHtcclxuXHRcdFx0LyogQWRkIG1lbnUgaXRlbXMgZm9yIGVhY2ggcm93ICovXHJcblx0XHRcdHRoaXMuYWRkUm93TWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0XHQvKiBDaGVjayBpZiB0aGUgYWN0aW9uIGNvbHVtbiBhbHJlYWR5IGV4aXN0cyAqL1xyXG5cdFx0XHR2YXIgYWN0aW9uQ29sbXVuID0gKHRoaXMuY29sdW1ucyBhcyBUYWJsZUNvbHVtbltdKT8uZmluZCh4ID0+IHgubmFtZSA9PSAnYWN0aW9uJyk7XHJcblxyXG5cdFx0XHQvKiBJZiBzbywganVzdCBhZGQgdGhlIG1lbnUgaXRlbXMgdG8gaXQgKi9cclxuXHRcdFx0aWYgKGFjdGlvbkNvbG11biAhPSBudWxsKSB7XHJcblx0XHRcdFx0YWN0aW9uQ29sbXVuLmFjdGlvbk1lbnVzID0gYWN0aW9uQ29sbXVuLmFjdGlvbk1lbnVzIHx8IFtdO1xyXG5cdFx0XHRcdHRoaXMuYWN0aW9uTWVudXMuZm9yRWFjaCh5ID0+IGFjdGlvbkNvbG11bi5hY3Rpb25NZW51cy51bnNoaWZ0KHkpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogT3RoZXJ3aXNlIGFkZCBhIG5ldyBvbmUgKi9cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5zLnB1c2gobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRcdGluZGV4OiAyMDAwLFxyXG5cdFx0XHRcdFx0bmFtZTogJ2FjdGlvbicsXHJcblx0XHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQWN0aW9uLFxyXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcblx0XHRcdFx0XHRhY3Rpb25NZW51czogdGhpcy5hY3Rpb25NZW51c1xyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBxdWVyeSBwYXJhbXMgaW50byBxdWVyeSBvYmplY3QgKi9cclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHggPT4gT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LCB4IHx8IHt9LCB7IHJldHVyblVybDogbnVsbCB9KSk7XHJcblxyXG5cdFx0LyogSW5pdGlsaWFsaXplIHRoZSBkYXRhIHNvdXJjZSB3aXRoIHRoZSBjdXJyZW50IHNlcnZpY2UsIHBhZ2luYXRvciBhbmQgc29ydCAqL1xyXG5cdFx0dGhpcy5zb3J0ID0gdGhpcy5keW5hbWljVGFibGU/Lm1hdFNvcnQgfHwgKHRoaXMuc29ydCA/IHRoaXMuc29ydCA6IG5ldyBNYXRTb3J0KCkpO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlID0gbmV3IFRhYmxlRGF0YVNvdXJjZTxURW50aXR5LCBUU2VydmljZT4odGhpcy5zZXJ2aWNlISwgdGhpcy5wYWdpbmF0b3IsIHRoaXMuc29ydCk7XHJcblxyXG5cdFx0LyogU2V0IGluY2x1ZGVzICovXHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuaW5jbHVkZXMgPSB0aGlzLmluY2x1ZGVzO1xyXG5cclxuXHRcdC8qIExvYWQgcXVlcnkgZnJvbSBicm93c2VyIHN0b3JhZ2UgKi9cclxuXHRcdHZhciBzdG9ycmVkUXVlcnkgPSBBcHBTdG9yYWdlLmdldE9iamVjdChgJHt0aGlzLmFwcFNldHRpbmcucHJvamVjdE5hbWV9LiR7dGhpcy5yb3V0ZXIudXJsfWApO1xyXG5cdFx0aWYgKHN0b3JyZWRRdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2UuZmllbGRGaWx0ZXJzID0gdGhpcy5jbGVhbihzdG9ycmVkUXVlcnkuZmllbGRGaWx0ZXJzKSB8fCB7fTtcclxuXHRcdFx0dGhpcy5zb3J0QWN0aXZlID0gc3RvcnJlZFF1ZXJ5LnNvcnRCeTtcclxuXHRcdFx0dGhpcy5zb3J0RGlyZWN0aW9uID0gc3RvcnJlZFF1ZXJ5LnNvcnREaXJlY3Rpb247XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdlU2l6ZSA9IHN0b3JyZWRRdWVyeS5wYWdlU2l6ZTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlLnBhZ2VJbmRleCA9IHN0b3JyZWRRdWVyeS5wYWdlSW5kZXg7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIHNvbWUgZmlsdGVyIGZyb20gcm91dGVyICovXHJcblx0XHRpZiAodGhpcy5xdWVyeSkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc3RhdGljRmllbGRGaWx0ZXJzID0gdGhpcy5xdWVyeTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBSZW1lbWJlciB0aGUgZmlsdGVycyAqL1xyXG5cdFx0dGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU291cmNlLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0KSB7XHJcblx0XHRcdFx0QXBwU3RvcmFnZS5zZXRPYmplY3QoYCR7dGhpcy5hcHBTZXR0aW5nLnByb2plY3ROYW1lfS4ke3RoaXMucm91dGVyLnVybH1gLCB7XHJcblx0XHRcdFx0XHRmaWVsZEZpbHRlcnM6IHRoaXMuZGF0YVNvdXJjZS5maWVsZEZpbHRlcnMsXHJcblx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydC5hY3RpdmUsXHJcblx0XHRcdFx0XHRzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG5cdFx0XHRcdFx0cGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG5cdFx0XHRcdFx0cGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVsb2FkcyBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkTGlzdChyZXNldFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5yZWxvYWQocmVzZXRTZWxlY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoXHJcblx0ICogQHBhcmFtIGZpbHRlciBcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VhcmNoKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBhZGQgcGFnZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgYWRkKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuYWRkRGlhbG9nVHlwZSkge1xyXG5cdFx0XHR0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmFkZERpYWxvZ1R5cGUsIHsgd2lkdGg6ICc2NTBweCcsIGRhdGE6IHRoaXMuY2xhc3NJbnN0YW5jZSB9KVxyXG5cdFx0XHRcdC5hZnRlckNsb3NlZCgpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWRMaXN0KGZhbHNlKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfS9hZGRgXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGVkaXQgcGFnZS5cclxuXHQgKiBAcGFyYW0gaXRlbSBUaGUgaWQgb2YgdGhlIGl0ZW1cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdChpdGVtOiBURW50aXR5KTogdm9pZCB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfS9lZGl0LyR7KGl0ZW0gYXMgSUVudGl0eSkuaWR9YF0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogUGF0Y2hlcyB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50aXR5XHJcblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSAob3B0aW9uYWwpIHZhbHVlIHRvIGNoYW5nZVxyXG5cdCAqIEBwYXJhbSBpbmNsdWRlcyBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoKGlkOiBudW1iZXIsIGZpZWxkczogQXJyYXk8c3RyaW5nPiwgdmFsdWU6IGFueSwgaW5jbHVkZXM6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcGF0Y2goaWQsIGZpZWxkcywgdmFsdWUsIGluY2x1ZGVzLCBfID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRpdHlcclxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIChvcHRpb25hbCkgdmFsdWUgdG8gY2hhbmdlXHJcblx0ICogQHBhcmFtIGluY2x1ZGVzIEluY2x1ZGVzIHNvbWUgbmF2aWdhdGlvbnNcclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZSBjYWxsZWQgb24gc3VjY2Vzc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBfcGF0Y2goaWQ6IG51bWJlciwgZmllbGRzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZTogYW55LCBpbmNsdWRlczogYW55LCBzdWNjZXNzQ2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0LyogR2V0IGVudGl0eSBieSBJRCAqL1xyXG5cdFx0bGV0IGVudGl0eSA9IHRoaXMuZGF0YVNvdXJjZS5pdGVtcz8uZmlsdGVyKHggPT4gKDxhbnk+eCkuaWQgPT09IGlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLnNlcnZpY2VcclxuXHRcdFx0XHQucGF0Y2goaWQsIHBhdGNoZXMsIG51bGwsIHsgaGVhZGVyczogeyAnU2hvdy1NZXNzYWdlJzogJ1llcycgfSwgcGFyYW1zOiBpbmNsdWRlcyA/IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiBpbmNsdWRlcyB9KSA6IG51bGwgfSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdC8qIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiwgaWYgYW55ICovXHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fSwgXyA9PiB0aGlzLmlzU2F2aW5nID0gZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGRhdGFiYXNlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGVJdGVtKGl0ZW06IFRFbnRpdHkpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnNlcnZpY2UuZGVsZXRlKChpdGVtIGFzIElFbnRpdHkpLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRMaXN0KHRydWUpO1xyXG5cdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgZGF0YWJhc2UuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpKSB7XHJcblx0XHRcdHRoaXMuc2hvd0RlbGV0ZUl0ZW1zRGlhbG9nKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZUxpc3QodGhpcy5kYXRhU291cmNlLmdldFNlbGVjdGVkKCkpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkTGlzdCh0cnVlKTtcclxuXHRcdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZGVidWcoZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvZ2dsZXMgYSBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b2dnbGUoaXRlbTogVEVudGl0eSwgcHJvcGVydHk6IHN0cmluZyA9ICdlbmFibGVkJyk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlXHJcblx0XHRcdC5wYXRjaCgoPGFueT5pdGVtKS5pZCwgW3sgb3A6ICdyZXBsYWNlJywgcGF0aDogYC8ke3Byb3BlcnR5fWAsIHZhbHVlOiBpdGVtW3Byb3BlcnR5XSB9XSlcclxuXHRcdFx0LnN1YnNjcmliZSh4ID0+IHRoaXMubG9hZExpc3QoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIHRhcm5zZmVycyBjc3YgZmlsZXNcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcmVsb2FkIElmIHRydWUsIHJlbG9hZCBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLnVwbG9hZChmaWxlKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRyZXNwb25zZSA9IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdC8qIFJlbG9hZCBsaXN0ICovXHJcblx0XHRcdGlmIChyZWxvYWQpIHtcclxuXHRcdFx0XHR0aGlzLmxvYWRMaXN0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0sIGVycm9yID0+IHsgfSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb3dubG9hZHMgYSBkb2N1bWVudFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkb3dubG9hZChpdGVtOiBURW50aXR5LCBwYXRoOiBzdHJpbmcgPSAnZG93bmxvYWQnKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlcnZpY2UuZG93bmxvYWQoYCR7cGF0aH0vJHsoaXRlbSBhcyBJRW50aXR5KS5pZH1gKS5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdHNhdmVBcyhuZXcgQmxvYihbeC5kYXRhXSwge30pLCB4LmZpbGVuYW1lKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRHVwbGljYXRlcyBhIHJlY29yZFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkdXBsaWNhdGUoaXRlbTogVEVudGl0eSkge1xyXG5cdFx0dGhpcy5zZXJ2aWNlLmR1cGxpY2F0ZSgoaXRlbSBhcyBJRW50aXR5KS5pZCkuc3Vic2NyaWJlKF8gPT4gdGhpcy5sb2FkTGlzdCgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoaXMgaW5mb3JtcyB0aGUgdGFibGUgaG93IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHJvd3MgdG8gXHJcblx0ICogdHJhY2sgaG93IHRoZSBkYXRhIGNoYW5nZXMgd2l0aCBlYWNoIHVwZGF0ZS5cclxuXHQgKiBAcGFyYW0gaW5kZXggXHJcblx0ICogQHBhcmFtIGl0ZW0gXHJcblx0ICovXHJcblx0cHVibGljIHRyYWNrQnlJZChfOiBudW1iZXIsIGl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuIGl0ZW0uaWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNsdWRlcyBzb21lIG5hdmlnYXRpb25zXHJcblx0ICogQHBhcmFtIGluYyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5jbHVkZSguLi5pbmM6IHN0cmluZ1tdKSB7XHJcblx0XHRpbmM/LmZvckVhY2goeCA9PiB0aGlzLmluY2x1ZGVzLnB1c2goeCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIGxpc3QgbWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBhZGRMaXN0TWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0LyogQWRkICdEZWxldGUgc2VsZWN0ZWQnIG1lbnUgaXRlbSAqL1xyXG5cdFx0aWYgKHRoaXMuZGVsZXRhYmxlKSB7XHJcblx0XHRcdHRoaXMubGlzdEFjdGlvbk1lbnVzLnB1c2goe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGVsZXRlU2VsZWN0ZWQ6RGVsZXRlIHNlbGVjdGVkYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZUl0ZW1zKCksXHJcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gIXRoaXMuZGF0YVNvdXJjZSB8fCAhdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbk1vZGVsPy5oYXNWYWx1ZSgpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHJvdyBtZW51IGl0ZW1zXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFkZFJvd01lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCBjaGVja2JveCBjb2x1bW4gKi9cclxuXHRcdGlmICh0aGlzLnNlbGVjdGFibGUpIHtcclxuXHRcdFx0dGhpcy5jb2x1bW5zLnVuc2hpZnQoe1xyXG5cdFx0XHRcdG5hbWU6ICdzZWxlY3QnLFxyXG5cdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5DaGVja2JveCxcclxuXHRcdFx0XHRkaXNhYmxlOiAocm93OiBURW50aXR5KSA9PiAhdGhpcy5zZWxlY3RhYmxlSXRlbShyb3cpLFxyXG5cdFx0XHRcdGNlbGxOZ0NsYXNzOiAocm93OiBURW50aXR5KSA9PiB0aGlzLnNlbGVjdENvbHVtbk5nQ2xhc3Mocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZHVwbGljYXRlIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmR1cGxpY2FibGUpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb25NZW51cy51bnNoaWZ0KHtcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGR1cGxpY2F0ZTpEdXBsaWNhdGVgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2NvcHknLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZHVwbGljYXRlKHJvdylcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGRvd25sb2FkIG1lbnUgKi9cclxuXHRcdGlmICh0aGlzLmRvd25sb2FkYWJsZSkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZG93bmxvYWQ6RG93bmxvYWRgLFxyXG5cdFx0XHRcdGljb246ICdmaWxlX2Rvd25sb2FkJyxcclxuXHRcdFx0XHRldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmRvd25sb2FkKHJvdyksXHJcblx0XHRcdFx0aGlkZTogKHJvdzogVEVudGl0eSkgPT4gIXRoaXMuY2FuRG93bmxvYWRJdGVtKHJvdylcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQWRkIGRlbGV0ZSBtZW51ICovXHJcblx0XHRpZiAodGhpcy5kZWxldGFibGUpIHtcclxuXHRcdFx0dGhpcy50b29sYmFyTWVudXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGVTZWxlY3RlZDpEZWxldGUgc2VsZWN0ZWRgLFxyXG5cdFx0XHRcdGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcblx0XHRcdFx0ZXZlbnQ6IChfOiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbXMoKVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHRoaXMuYWN0aW9uTWVudXMudW5zaGlmdCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGV2ZW50OiAocm93OiBhbnkpID0+IHRoaXMuZGVsZXRlSXRlbShyb3cpLFxyXG5cdFx0XHRcdGhpZGU6IChyb3c6IFRFbnRpdHkpID0+ICF0aGlzLmNhbkRlbGV0ZUl0ZW0ocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBBZGQgZWRpdCBtZW51ICovXHJcblx0XHRpZiAodGhpcy5lZGl0YWJsZSkge1xyXG5cdFx0XHR0aGlzLmFjdGlvbk1lbnVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZWRpdDpFZGl0YCxcclxuXHRcdFx0XHRpY29uOiAnZWRpdF9ub3RlJyxcclxuXHRcdFx0XHRldmVudDogKHJvdzogYW55KSA9PiB0aGlzLmVkaXQocm93KVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGVJdGVtKHJvdzogVEVudGl0eSk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZSB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGRvd25sb2FkYWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5Eb3dubG9hZEl0ZW0ocm93OiBURW50aXR5KTogYm9vbGVhbiB7IHJldHVybiB0cnVlIH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGhlIGl0ZW0gaXMgc2VsZWN0YWJsZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RhYmxlSXRlbShyb3c6IFRFbnRpdHkpOiBib29sZWFuIHsgcmV0dXJuIHRydWUgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIE5nQ2xhc3Mgb2JqZWN0IGZvciBzZWxlY3QgY29sdW1uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNlbGVjdENvbHVtbk5nQ2xhc3Mocm93OiBURW50aXR5KTogYW55IHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXNwb25kcyB0byB1c2VyLWluaXRpYXRlZCBldmVudHNcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIGFkZCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnYSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5hZGQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdC8qIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuXHRcdFx0XHRjYXNlICdQYWdlVXAnOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IucHJldmlvdXNQYWdlKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0LyogTmF2aWdhdGUgdG8gbmV4dCBwYWdlICovXHJcblx0XHRcdFx0Y2FzZSAnUGFnZURvd24nOlxyXG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIFxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmRhdGFMb2FkZWRTdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5kYXRhTG9hZGVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19