@ohioepa/oepa-ui-lib 1.2.22 → 1.2.24

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.
@@ -465,7 +465,7 @@ export class TableComponent {
465
465
  else {
466
466
  matchFilter.filterString = filter.filterString;
467
467
  }
468
- this.updateTable();
468
+ this.updateTable(true);
469
469
  }
470
470
  onSortChanged(column) {
471
471
  this.tableService.setSort(this.tableId, column);
@@ -482,13 +482,15 @@ export class TableComponent {
482
482
  this.tableService.setPage(this.tableId, pageEvent.page);
483
483
  this.updateTable();
484
484
  }
485
- updateTable() {
485
+ updateTable(clearSelctedRows = false) {
486
486
  const filteredData = this.filterData(this.data);
487
487
  const sortedData = this.sortData(filteredData);
488
488
  this.rows = this.changePage(sortedData);
489
489
  this.pageInfo.length = sortedData.length;
490
490
  this.allRowsSelected = false;
491
- this.rowSelected.emit([]);
491
+ if (clearSelctedRows) {
492
+ this.rowSelected.emit([]);
493
+ }
492
494
  this.dataHasDetails = this.checkForDetails(this.rows);
493
495
  }
494
496
  updatePage() {
@@ -683,7 +685,7 @@ export class TableComponent {
683
685
  }
684
686
  });
685
687
  this.rows.slice();
686
- // this.updateTable();
688
+ this.updateTable();
687
689
  this.rowSelected.emit(selectedRows);
688
690
  }
689
691
  prepareRowsForExport(rows) {
@@ -801,4 +803,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
801
803
  }], totalRow: [{
802
804
  type: Input
803
805
  }] } });
804
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCL0UsTUFBTSxPQUFPLGNBQWM7SUEySUU7SUFDakI7SUFDQTtJQUNBO0lBN0lILGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDL0IsVUFBVSxHQUEyQixFQUFFLENBQUM7SUFDeEMsSUFBSSxHQUF3QixFQUFFLENBQUM7SUFDL0Isa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkIsaUJBQWlCLEdBQXdCLEtBQUssQ0FBQztJQUUvQyxXQUFXLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxhQUFhLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxLQUFLLEdBQXdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQW9CLEVBQUUsQ0FBQztJQUM5QixjQUFjLEdBQTJCLENBQUM7WUFDaEQsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFLFNBQVM7U0FDcEIsQ0FBQyxDQUFDO0lBRUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRXZCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFeEIsUUFBUSxHQUFzQjtRQUNuQyxJQUFJLEVBQUUsQ0FBQztRQUNQLFlBQVksRUFBRSxFQUFFO1FBQ2hCLE9BQU8sRUFBRSxD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SztnQkF1QkcsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgT2VwYVRhYmxlIH0gZnJvbSAnLi9vZXBhLXRhYmxlJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbmZpZyB9IGZyb20gJy4vb2VwYS10YWJsZS1jb25maWcnO1xuaW1wb3J0IHsgT2VwYVRhYmxlSGVhZGVyIH0gZnJvbSAnLi9vZXBhLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVDb2x1bW4gfSBmcm9tICcuL29lcGEtdGFibGUtY29sdW1uJztcbmltcG9ydCB7IE9lcGFUYWJsZVJvdyB9IGZyb20gJy4vb2VwYS10YWJsZS1yb3cnO1xuaW1wb3J0IHsgT2VwYVRhYmxlQ2VsbCB9IGZyb20gJy4vb2VwYS10YWJsZS1jZWxsJztcbmltcG9ydCB7IE9lcGFUYWJsZUZpbHRlciB9IGZyb20gJy4vb2VwYS10YWJsZS1maWx0ZXInO1xuaW1wb3J0IHsgT2VwYVRhYmxlUGFnZUluZm8gfSBmcm9tICcuL29lcGEtdGFibGUtcGFnZS1pbmZvJztcbmltcG9ydCB7IE9lcGFUYWJsZUNlbGxDbGlja0V2ZW50IH0gZnJvbSAnLi9vZXBhLXRhYmxlLWNlbGwtY2xpY2stZXZlbnQnO1xuXG5pbXBvcnQgeyBPZXBhQWN0aW9uRXZlbnQgfSBmcm9tICcuLi9hY3Rpb24tYnRuL29lcGEtYWN0aW9uLWV2ZW50JztcblxuaW1wb3J0IHsgVGFibGVFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi90YWJsZS1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBPZXBhVGVtcGxhdGVJbmZvIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4vdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBPZXBhVGFibGVTb3J0Q3JpdGVyaW9uIH0gZnJvbSAnLi9vZXBhLXRhYmxlLXNvcnQtY3JpdGVyaW9uJztcbmltcG9ydCB7IFBhZ2VDaGFuZ2VkRXZlbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgT2VwYUZpbGVVdGlsU2VydmljZSB9IGZyb20gJy4uL29lcGEtZmlsZS11dGlscy9vZXBhLWZpbGUtdXRpbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBzaG93RmlsdGVyUm93OiBCb29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBoZWFkZXJSb3dzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+ID0gW107XG4gIHB1YmxpYyByb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uQ291bnQgPSAwO1xuICBwdWJsaWMgYWxsQ29sdW1uQ291bnQgPSAwO1xuICBwdWJsaWMgZXhwb3J0VmlzaWJsZU9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgZGF0YUNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHVibGljIGhpZGRlbkNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHVibGljIGNvbHVtbkhlYWRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHVibGljIF9kYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gIHByaXZhdGUgX2NvbmZpZzogT2VwYVRhYmxlQ29uZmlnID0ge307XG4gIHByaXZhdGUgY3VycmVudEZpbHRlcnM6IEFycmF5PE9lcGFUYWJsZUZpbHRlcj4gPSBbe1xuICAgIGZpbHRlclN0cmluZzogJycsXG4gICAgY29sdW1uSWQ6IHVuZGVmaW5lZFxuICB9XTtcblxuICBwdWJsaWMgZGF0YUhhc0RldGFpbHMgPSBmYWxzZTtcbiAgcHVibGljIHNob3dBbGxEZXRhaWxzID0gZmFsc2U7XG5cbiAgcHVibGljIGFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBwYWdlSW5mbzogT2VwYVRhYmxlUGFnZUluZm8gPSB7XG4gICAgcGFnZTogMSxcbiAgICBpdGVtc1BlclBhZ2U6IDEwLFxuICAgIG1heFNpemU6IDUsXG4gICAgbnVtUGFnZXM6IDEsXG4gICAgbGVuZ3RoOiAwXG4gIH07XG4gIHB1YmxpYyBjdXJyZW50UGFnZSA9IDE7XG4gIHB1YmxpYyBwYWdpbmF0aW9uT24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRhYmxlSWQgPSAnJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbmZpZyhjb25mOiBPZXBhVGFibGVDb25maWcpIHtcbiAgICBpZiAoIWNvbmYuY2xhc3NOYW1lKSB7XG4gICAgICBjb25mLmNsYXNzTmFtZSA9ICd0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkJztcbiAgICB9XG4gICAgaWYgKGNvbmYuY2xhc3NOYW1lcykge1xuICAgICAgY29uZi5jbGFzc05hbWUgPSBjb25mLmNsYXNzTmFtZXMuam9pbignICcpO1xuICAgIH1cbiAgICBpZiAoY29uZi5yb3dzUGVyUGFnZSkge1xuICAgICAgdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2UgPSBjb25mLnJvd3NQZXJQYWdlO1xuICAgIH1cbiAgICB0aGlzLmV4cG9ydFZpc2libGVPbmx5ID0gY29uZi5leHBvcnRWaXNpYmxlT25seTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25mO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKTogT2VwYVRhYmxlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb21wbGV4SGVhZGVyKGhkcnM6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4pIHtcbiAgICB0aGlzLnJlc2V0SGVhZGVycygpO1xuICAgIGlmIChoZHJzICYmIGhkcnMubGVuZ3RoKSB7XG4gICAgICBoZHJzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93cy5wdXNoKHRoaXMuZXh0cmFjdElubmVyQ29sdW1ucyhoZHIuY29sdW1ucykpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbHVtbkhlYWRlcnMgPSB0aGlzLmV4dHJhY3RDb2x1bW5IZWFkZXJzKHRoaXMuaGVhZGVyUm93cyk7XG4gICAgICB0aGlzLmRhdGFDb2x1bW5zID0gdGhpcy5leHRyYWN0RGF0YUNvbHVtbnModGhpcy5oZWFkZXJSb3dzKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWFkZXIoaGRyOiBPZXBhVGFibGVIZWFkZXIpIHtcbiAgICB0aGlzLnJlc2V0SGVhZGVycygpO1xuICAgIGlmIChoZHIuY29sdW1ucyAmJiBoZHIuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmhlYWRlclJvd3MucHVzaCh0aGlzLmV4dHJhY3RJbm5lckNvbHVtbnMoaGRyLmNvbHVtbnMpKTtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gdGhpcy5leHRyYWN0Q29sdW1uSGVhZGVycyh0aGlzLmhlYWRlclJvd3MpO1xuICAgIHRoaXMuZGF0YUNvbHVtbnMgPSB0aGlzLmV4dHJhY3REYXRhQ29sdW1ucyh0aGlzLmhlYWRlclJvd3MpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnMoZmFsc2UpO1xuICB9XG5cbiAgQElucHV0KCkgY3VzdG9tQnRuTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY3VzdG9tQnRuVmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjdXN0b21CdG5FbmFibGVkID0gZmFsc2U7XG5cbiAgLy8gT3V0cHV0cyAoRXZlbnRzKVxuICBAT3V0cHV0KCkgcHVibGljIGNlbGxDbGlja2VkOiBFdmVudEVtaXR0ZXI8T2VwYVRhYmxlQ2VsbENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGFjdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxPZXBhQWN0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJvd1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8QXJyYXk8T2VwYVRhYmxlUm93Pj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY3VzdG9tQnRuQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgcmVzZXRIZWFkZXJzKCkge1xuICAgIHRoaXMuaGVhZGVyUm93cyA9IFtdO1xuICAgIHRoaXMuY29sdW1uSGVhZGVycyA9IFtdO1xuICAgIHRoaXMuZGF0YUNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnMoY29tcGxleEhlYWRlcjogYm9vbGVhbikge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50ID0gMDtcbiAgICB0aGlzLmFsbENvbHVtbkNvdW50ID0gMDtcbiAgICB0aGlzLmRhdGFDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbXBsZXhIZWFkZXIgJiYgKGNvbHVtbj8uaGlkZGVuID09PSB0cnVlIHx8IGNvbHVtbj8uaGlkZGVuID09PSBmYWxzZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZGlzYWJsaW5nIGhpZGRlbiBhdHRyaWJ1dGUgZm9yIGNvbHVtbjogJyArIGNvbHVtbi5pZCArXG4gICAgICAgICAgJy4gSGlkZGVuIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGNvbXBsZXggaGVhZGVycyAoeWV0KS4nKTtcbiAgICAgICAgY29sdW1uLmhpZGRlbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1uQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50Kys7XG4gICAgICB9XG4gICAgICB0aGlzLmFsbENvbHVtbkNvdW50Kys7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2coJ3Zpc2libGVDb2x1bW5Db3VudCA9ICcgKyB0aGlzLnZpc2libGVDb2x1bW5Db3VudCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWVzOiBBcnJheTxPZXBhVGFibGVSb3c+KSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8IHRoaXMuX2RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9kYXRhID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0RGF0YSh0aGlzLnRhYmxlSWQpIHx8IFtdO1xuICAgIH1cbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZXNbaV0ucHJpdmF0ZUlkID0gaTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLmNsZWFyUGFnZUluZm8odGhpcy50YWJsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhID0gdmFsdWVzO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLnNldERhdGEodGhpcy50YWJsZUlkLCB0aGlzLl9kYXRhKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGEoKTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKHggPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpO1xuICB9XG5cbiAgQElucHV0KCkgdG90YWxSb3c6IE9lcGFUYWJsZVJvdyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHRhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFibGVFeHBvcnRTZXJ2aWNlOiBUYWJsZUV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlVXRpbFNlcnZpY2U6IE9lcGFGaWxlVXRpbFNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFnaW5hdGlvbk9uID0gIXRoaXMuX2NvbmZpZy5kaXNhYmxlUGFnaW5hdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdElubmVyQ29sdW1ucyhpbm5lcjogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPik6IE9lcGFUYWJsZUhlYWRlciB7XG4gICAgY29uc3QgaGVhZGVyOiBPZXBhVGFibGVIZWFkZXIgPSB7IGNvbHVtbnM6IFtdIH07XG4gICAgaW5uZXIuZm9yRWFjaCgodmFsdWU6IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgY29sdW1uID0gaGVhZGVyLmNvbHVtbnMuZmluZCgoY29sOiBPZXBhVGFibGVDb2x1bW4pID0+IGNvbC5pZCA9PT0gdmFsdWUuaWQpO1xuICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAvLyBvdmVyd3JpdGUgcmVwZWF0ZWQgY29sdW1uXG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWNvbHVtbikge1xuICAgICAgICBoZWFkZXIuY29sdW1ucy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Q29sdW1uSGVhZGVycyhoZWFkZXJSb3dzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgaGVhZGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGxldCByb3dJbmRleCA9IDA7XG4gICAgY29uc3QgY2hpbGRDb2x1bW5zOiBhbnkgPSB7fTtcbiAgICBoZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBsZXQgY29sSW5kZXggPSAwO1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jvd0luZGV4PScgKyByb3dJbmRleCArICcsIGNvbEluZGV4PScgKyBjb2xJbmRleCArICcsIGNvbHVtbj0nICsgSlNPTi5zdHJpbmdpZnkoY29sdW1uKSk7XG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChjb2x1bW4udGl0bGUpO1xuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3Bhbikge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8IGNvbHVtbi5jb2xzcGFuOyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgIGhlYWRlcnMucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4ucm93c3Bhbikge1xuICAgICAgICAgICAgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA9IGNvbHVtbi5yb3dzcGFuIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gJiYgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0tLTtcbiAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWRlcnNbY29sSW5kZXhdICs9ICcgJyArIGNvbHVtbi50aXRsZTtcbiAgICAgICAgICBpZiAoY29sdW1uLmNvbHNwYW4pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPCBjb2x1bW4uY29sc3BhbjsgY291bnQrKykge1xuICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICByb3dJbmRleCsrO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdoZWFkZXJzID0gJyArIEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpKTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG5cbiAgcHJpdmF0ZSBleHRyYWN0RGF0YUNvbHVtbnMoaGVhZGVyUm93czogQXJyYXk8T2VwYVRhYmxlSGVhZGVyPik6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4ge1xuICAgIGNvbnN0IGRhdGFDb2x1bW5zOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICBjb25zdCBjaGlsZENvbHVtbnM6YW55ID0ge307XG4gICAgaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgIGhkci5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3BhbiAmJiBjb2x1bW4uY29sc3BhbiA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBjb2x1bW4uY29sc3BhbjsgY291bnQrKykge1xuICAgICAgICAgICAgICBkYXRhQ29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sSW5kZXggKz0gKGNvbHVtbi5jb2xzcGFuIC0gMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucm93c3Bhbikge1xuICAgICAgICAgICAgICBjaGlsZENvbHVtbnNbY29sSW5kZXhdID0gY29sdW1uLnJvd3NwYW4gLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoY2hpbGRDb2x1bW5zW2NvbEluZGV4XSAmJiBjaGlsZENvbHVtbnNbY29sSW5kZXhdID4gMCkge1xuICAgICAgICAgICAgY2hpbGRDb2x1bW5zW2NvbEluZGV4XS0tO1xuICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5jb2xzcGFuICYmIGNvbHVtbi5jb2xzcGFuID4gMSkge1xuICAgICAgICAgICAgY29sSW5kZXggKz0gKGNvbHVtbi5jb2xzcGFuIC0gMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFDb2x1bW5zW2NvbEluZGV4XSA9IGNvbHVtbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sSW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgcm93SW5kZXgrKztcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnZGF0YUNvbHVtbnMgPSAnICsgSlNPTi5zdHJpbmdpZnkoZGF0YUNvbHVtbnMpKTtcbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgYW55IGZpbHRlcnMgYXJlIHNldFxuICAgKi9cbiAgcHVibGljIG5vRmlsdGVycygpOiBib29sZWFuIHtcbiAgICBsZXQgbm9GaWx0ZXJzID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVyU3RyaW5nICYmIGZpbHRlci5maWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBub0ZpbHRlcnMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9GaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBnbG9iYWwgZmlsdGVyIHN0cmluZyAoaWYgYW55KSBhcyBhIFJlZ0V4cFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRHbG9iYWxGaWx0ZXIoKTogUmVnRXhwIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVnRXhwOiBSZWdFeHAgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoIWZpbHRlci5jb2x1bW5JZCAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nICYmIGZpbHRlci5maWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKGZpbHRlci5maWx0ZXJTdHJpbmcsICdpJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ0V4cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZmlsdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiAoaWYgYW55KSBhcyBhIFJlZ0V4cC5cbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwcml2YXRlIGdldEZpbHRlckZvckNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogUmVnRXhwIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVnRXhwOiBSZWdFeHAgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmNvbHVtbklkID09PSBjb2x1bW5JZCAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nICYmIGZpbHRlci5maWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKGZpbHRlci5maWx0ZXJTdHJpbmcsICdpJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ0V4cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIHRhYmxlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBvciBjb2x1bW4tc3BlY2lmaWNcbiAgICogZmlsdGVycyBzZXQgaW4gdGhlIFVJLlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJEYXRhKGRhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4pOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICAvLyBkb24ndCBhdHRlbXB0IGZpbHRlcmluZyBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyBzZXRcbiAgICBpZiAodGhpcy5ub0ZpbHRlcnMoKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBmaWx0ZXJlZERhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBkYXRhO1xuICAgIGNvbnN0IHRlbXBBcnJheTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIGZpbHRlcmVkRGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgbGV0IGZsYWcgPSB0aGlzLmZpbHRlckJ5Q29sdW1uRmlsdGVycyhyb3cpO1xuICAgICAgaWYgKGZsYWcpIHtcbiAgICAgICAgZmxhZyA9IHRoaXMuZmlsdGVyQnlHbG9iYWxGaWx0ZXIocm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChmbGFnIHx8IHJvdy5pc0RpdmlkZXIpIHtcbiAgICAgICAgdGVtcEFycmF5LnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXJlZERhdGEgPSB0ZW1wQXJyYXk7XG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIHJvdyBtYXRjaGVzIGFueSBvZiB0aGUgY29sdW1ubiBmaWx0ZXJzIHRoYXQgbWF5IGJlIHNldC5cbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJCeUNvbHVtbkZpbHRlcnMocm93OiBPZXBhVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICBsZXQgZmxhZyA9IHRydWU7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IHRoaXMuZ2V0RmlsdGVyRm9yQ29sdW1uKGNlbGwuaWQpO1xuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjZWxsLmZpbHRlclZhbHVlIHx8IGNlbGwudmFsdWUgfHwgJyc7XG4gICAgICBpZiAocmVnRXhwICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmlsdGVyVmFsdWUudG9TdHJpbmcoKS5tYXRjaChyZWdFeHApO1xuICAgICAgICBmbGFnID0gZmxhZyAmJiAocmVzdWx0ICE9PSBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmxhZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIHJvdyBtYXRjaGVzIHRoZSBnbG9iYWwgZmlsdGVyXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyQnlHbG9iYWxGaWx0ZXIocm93OiBPZXBhVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICBsZXQgZmxhZyA9IHRydWU7XG4gICAgY29uc3QgcmVnRXhwID0gdGhpcy5nZXRHbG9iYWxGaWx0ZXIoKTtcbiAgICBpZiAocmVnRXhwKSB7XG4gICAgICBmbGFnID0gZmFsc2U7XG4gICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNlbGwuZmlsdGVyVmFsdWUgfHwgY2VsbC52YWx1ZTtcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaWx0ZXJWYWx1ZS50b1N0cmluZygpLm1hdGNoKHJlZ0V4cCk7XG4gICAgICAgICAgZmxhZyA9IGZsYWcgfHwgKHJlc3VsdCAhPT0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmxhZztcbiAgfVxuXG4gIHB1YmxpYyBoaWRlQ29sdW1uKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSB7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudC0tO1xuICB9XG5cbiAgcHVibGljIHVuaGlkZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaGlkZGVuQ29sczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGlmIChjb2wuaWQgIT09IGNvbHVtbklkKSB7XG4gICAgICAgIGhpZGRlbkNvbHMucHVzaChjb2wpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IGhpZGRlbkNvbHM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uQ291bnQrKztcbiAgfVxuXG4gIHByaXZhdGUgc29ydERhdGEoZGF0YTogQXJyYXk8T2VwYVRhYmxlUm93Pik6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIGxldCBzb3J0Q3JpdGVyaWE6IGFueSA9IHRoaXMudGFibGVTZXJ2aWNlLmdldFNvcnRDcml0ZXJpYSh0aGlzLnRhYmxlSWQpIHx8IFtdO1xuICAgIGlmIChzb3J0Q3JpdGVyaWEubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRDb2x1bW5Tb3J0SW5kZXhlcyhzb3J0Q3JpdGVyaWEpO1xuXG4gICAgcmV0dXJuIGRhdGEuc29ydCgocHJldmlvdXM6IE9lcGFUYWJsZVJvdywgY3VycmVudDogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBsZXQgc29ydEluZGV4ID0gMDtcbiAgICAgIGxldCBzb3J0UmVzdWx0ID0gMDtcbiAgICAgIHdoaWxlIChzb3J0SW5kZXggPCBzb3J0Q3JpdGVyaWEubGVuZ3RoICYmIHNvcnRSZXN1bHQgPT09IDApIHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLmdldFJvd1NvcnRWYWx1ZShwcmV2aW91cywgc29ydENyaXRlcmlhW3NvcnRJbmRleF0uY29sdW1uSWQpO1xuICAgICAgICBsZXQgY3VyciA9IHRoaXMuZ2V0Um93U29ydFZhbHVlKGN1cnJlbnQsIHNvcnRDcml0ZXJpYVtzb3J0SW5kZXhdLmNvbHVtbklkKTtcbiAgICAgICAgaWYgKHByZXYgPiBjdXJyKSB7XG4gICAgICAgICAgc29ydFJlc3VsdCA9ICAoc29ydENyaXRlcmlhW3NvcnRJbmRleF0uc29ydCA9PT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcmV2IDwgY3Vycikge1xuICAgICAgICAgIHNvcnRSZXN1bHQgPSAgKHNvcnRDcml0ZXJpYVtzb3J0SW5kZXhdLnNvcnQgPT09ICdhc2MnID8gLTEgOiAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzb3J0UmVzdWx0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzb3J0SW5kZXgrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3J0UmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Q29sdW1uU29ydEluZGV4ZXMoc29ydENyaXRlcmlhOiBPZXBhVGFibGVTb3J0Q3JpdGVyaW9uW10pIHtcbiAgICBpZiAoc29ydENyaXRlcmlhICYmIHNvcnRDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8c29ydENyaXRlcmlhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGF0YUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4/LmlkID09PSBzb3J0Q3JpdGVyaWFbaV0uY29sdW1uSWQpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgICAgY29sdW1uLnNvcnRJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZGlzcGxheSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNlbGwuXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93VmFsdWUocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgdmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IFJldHJpZXZlIHRoZSBzb3J0IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY2VsbCAod2lsbCBkZWZhdWx0IHRvIGRpc3BsYXkgdmFsdWUgaWYgc29ydFxuICAgKiB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkKS5cbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93U29ydFZhbHVlKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIGlmIChjZWxsLnNvcnRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNlbGwuc29ydFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFsdWUgPSBjZWxsLnNvcnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNlbGwudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFnZShkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gdGhpcy5kYXRhKTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Pbikge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUGFnZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucGFnZUluZm8ucGFnZSAtIDEpICogdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2U7XG4gICAgY29uc3QgZW5kID0gdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2UgPiAtMSA/IChzdGFydCArIHRoaXMucGFnZUluZm8uaXRlbXNQZXJQYWdlKSA6IGRhdGEubGVuZ3RoO1xuICAgIC8vIG5vdCBzdXJlIHdoeSwgYnV0IG1heFNpemUgd2FzIGdldHRpbmcgbG9zdC4gUmVzZXQgaXQgaGVyZSB0byBwcmV2ZW50IHdlaXJkbmVzcy5cbiAgICB0aGlzLnBhZ2VJbmZvLm1heFNpemUgPSA1O1xuICAgIHJldHVybiBkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBhZ2luZ2F0aW9uKCkge1xuICAgIHRoaXMucGFnaW5hdGlvbk9uID0gIXRoaXMucGFnaW5hdGlvbk9uO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbHRlckNoYW5nZWQoZmlsdGVyOiBPZXBhVGFibGVGaWx0ZXIpIHtcbiAgICBjb25zdCBtYXRjaEZpbHRlciA9IHRoaXMuY3VycmVudEZpbHRlcnMuZmluZCgoZikgPT4ge1xuICAgICAgcmV0dXJuIGYuY29sdW1uSWQgPT09IGZpbHRlci5jb2x1bW5JZDtcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoRmlsdGVyKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hGaWx0ZXIuZmlsdGVyU3RyaW5nID0gZmlsdGVyLmZpbHRlclN0cmluZztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydENoYW5nZWQoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLnRhYmxlU2VydmljZS5zZXRTb3J0KHRoaXMudGFibGVJZCwgY29sdW1uKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlQ2hhbmdlZChwYWdlRXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLnBhZ2VJbmZvID0ge1xuICAgICAgcGFnZTogcGFnZUV2ZW50LnBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2U6IHBhZ2VFdmVudC5pdGVtc1BlclBhZ2UsXG4gICAgICBtYXhTaXplOiB0aGlzLnBhZ2VJbmZvLm1heFNpemUsXG4gICAgICBsZW5ndGg6IHRoaXMucGFnZUluZm8ubGVuZ3RoLFxuICAgICAgbnVtUGFnZXM6IHRoaXMucGFnZUluZm8ubnVtUGFnZXNcbiAgICB9XG4gICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0UGFnZSh0aGlzLnRhYmxlSWQsIHBhZ2VFdmVudC5wYWdlKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLmRhdGEpO1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKGZpbHRlcmVkRGF0YSk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5jaGFuZ2VQYWdlKHNvcnRlZERhdGEpO1xuICAgIHRoaXMucGFnZUluZm8ubGVuZ3RoID0gc29ydGVkRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoW10pO1xuICAgIHRoaXMuZGF0YUhhc0RldGFpbHMgPSB0aGlzLmNoZWNrRm9yRGV0YWlscyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlKCkge1xuICAgIGNvbnN0IHNhdmVkUGFnZU51bWJlciA9IHRoaXMudGFibGVTZXJ2aWNlLmdldFBhZ2UodGhpcy50YWJsZUlkKTtcbiAgICBpZiAoc2F2ZWRQYWdlTnVtYmVyICYmIHRoaXMucGFnZUluZm8ucGFnZSAhPT0gc2F2ZWRQYWdlTnVtYmVyKSB7XG4gICAgICB0aGlzLnBhZ2VJbmZvLnBhZ2UgPSBzYXZlZFBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlSW5mby5wYWdlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JEZXRhaWxzKGRhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4pOiBib29sZWFuIHtcbiAgICBsZXQgaGFzRGV0YWlscyA9IGZhbHNlO1xuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICBkYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cuc2hvd0RldGFpbCA9PT0gdHJ1ZSB8fCByb3cuc2hvd0RldGFpbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNEZXRhaWxzO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbERldGFpbHMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3RvZ2dsZUFsbERldGFpbHMuLi4nKTtcbiAgICB0aGlzLnNob3dBbGxEZXRhaWxzID0gIXRoaXMuc2hvd0FsbERldGFpbHM7XG4gICAgLy8gY29uc29sZS5sb2coJ3Nob3dBbGxEZXRhaWxzID0gJyArIHRoaXMuc2hvd0FsbERldGFpbHMpO1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cuc2hvd0RldGFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcm93LnNob3dEZXRhaWwgPSB0aGlzLnNob3dBbGxEZXRhaWxzO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdzZXR0aW5nIGRldGFpbHMgZm9yIHJvdyB0byAnICsgdGhpcy5zaG93QWxsRGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUm93RGV0YWlsKHRvZ2dsZVJvdzogT2VwYVRhYmxlUm93KSB7XG4gICAgaWYgKHRvZ2dsZVJvdyAmJiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdURVNUOiAnICsgSlNPTi5zdHJpbmdpZnkocm93LmRhdGFTb3VyY2UpICsgJyA9PT0gJyArIEpTT04uc3RyaW5naWZ5KHRvZ2dsZVJvdy5kYXRhU291cmNlKSk7XG4gICAgICAgIGlmIChyb3cuZGF0YVNvdXJjZSA9PT0gdG9nZ2xlUm93LmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnISEhIE1BVENIICEhIScpO1xuICAgICAgICAgIHJvdy5zaG93RGV0YWlsID0gIXRvZ2dsZVJvdy5zaG93RGV0YWlsO1xuICAgICAgICAgIHRvZ2dsZVJvdy5zaG93RGV0YWlsID0gcm93LnNob3dEZXRhaWw7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Nob3cgZGV0YWlsID0gJyArIHJvdy5zaG93RGV0YWlsICsgJyBmb3Igcm93OiAnICsgSlNPTi5zdHJpbmdpZnkocm93LmRhdGFTb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YS5zcGxpY2UoMCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCd0b2dnbGVSb3dEZXRhaWwuLi4nKTtcbiAgICAvLyB0aGlzLmR1bXBEZXRhaWxSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3Rpb25Db2x1bW4oY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpc0FjdGlvbkNvbHVtbiAnICsgY29sdW1uSWQpO1xuICAgIGxldCBhY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgICB0aGlzLmhlYWRlclJvd3MuZm9yRWFjaCgoaGRyOiBPZXBhVGFibGVIZWFkZXIpID0+IHtcbiAgICAgIGhkci5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Rlc3QgYWN0aW9uIGNvbHVtbjogJyArIGNvbHVtbi5pZCArICcgLSAnICsgY29sdW1uLmFjdGlvbkNvbHVtbik7XG4gICAgICAgICAgYWN0aW9uQ29sdW1uID0gY29sdW1uLmFjdGlvbkNvbHVtbiB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGlvbkNvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBpc0NvbHVtbkhpZGRlbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coJ2lzQ29sdW1uSGlkZGVuICcgKyBjb2x1bW5JZCk7XG4gICAgbGV0IGhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGVzdCBoaWRkZW4gY29sdW1uOiAnICsgY29sdW1uLmlkICsgJyAtICcgKyBjb2x1bW4uaGlkZGVuKTtcbiAgICAgICAgICBoaWRkZW4gPSBjb2x1bW4uaGlkZGVuIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgcHVibGljIGdldEhpZGRlbkNvbHVtbnMoKTogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgY29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbENsYXNzTmFtZShyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICByZXN1bHQgPSBjZWxsLmNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldENlbGxDb2xTcGFuKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgfCB1bmRlZmluZWQgPSAxO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgcmVzdWx0ID0gY2VsbC5jb2xTcGFuIHx8IDAgPj0wID8gY2VsbC5jb2xTcGFuIDogMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldENlbGxJY29uQ2xhc3NOYW1lKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIHJlc3VsdCA9IGNlbGwuaWNvbkNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldENlbGxJbWdTcmMocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgcmVzdWx0ID0gY2VsbC5pbWdTcmM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZWxsSW5uZXJIVE1MKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIHJlc3VsdCA9IGNlbGwuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgY2VsbENsaWNrKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlKHJvdywgY29sdW1uSWQpO1xuICAgIHRoaXMuY2VsbENsaWNrZWQuZW1pdCh7IHJvdywgY29sdW1uSWQsIHZhbHVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aW9uQ2xpY2soZXZlbnQ6IE9lcGFBY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93czogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gIXRoaXMuYWxsUm93c1NlbGVjdGVkO1xuICAgIC8vIGRlc2VsZWN0IGFsbCByb3dzXG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIHIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBzZWxlY3Qgb25seSB2aXNpYmxlIHJvd3NcbiAgICB0aGlzLnJvd3MuZm9yRWFjaCgocjogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBpZiAoci5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIGlmIChyLnNlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93cy5zbGljZSgpO1xuICAgIC8vIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBPZXBhVGFibGVSb3cpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgoZHI6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5wcml2YXRlSWQgPT09IGRyLnByaXZhdGVJZCkge1xuICAgICAgICBkci5zZWxlY3RlZCA9IHJvdy5zZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIGlmIChkci5zZWxlY3RlZCkge1xuICAgICAgICBzZWxlY3RlZFJvd3MucHVzaChkcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93cy5zbGljZSgpO1xuICAgIC8vIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyBzaW5nbGVSb3dTZWxlY3Rpb24ocm93OiBPZXBhVGFibGVSb3cpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xuICAgIC8vIGFkZCByb3cgdG8gc2VsZWN0ZWQgcm93cyBpZiBpdCBpcyBzZWxlY3RlZFxuICAgIGlmIChyb3cuc2VsZWN0ZWQpIHtcbiAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIC8vIHVuc2VsZWN0IGFueSBvdGhlciByb3cgdGhhdCBtYXkgYmUgc2VsZWN0ZWRcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKGRyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGlmIChyb3cucHJpdmF0ZUlkID09PSBkci5wcml2YXRlSWQpIHtcbiAgICAgICAgZHIuc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkci5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93cy5zbGljZSgpO1xuICAgIC8vIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJvd3NGb3JFeHBvcnQocm93czogQXJyYXk8T2VwYVRhYmxlUm93Pik6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlUm93c0ZvckV4cG9ydC4uLicpO1xuICAgIC8vIHRoaXMuZHVtcERldGFpbFJvd3MoKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgcm93cy5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnc2hvd0RldGFpbCA9ICcgKyByb3cuc2hvd0RldGFpbCArICcgJyArIEpTT04uc3RyaW5naWZ5KHJvdy5jZWxscykpO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgY2VsbHM6IHJvdy5jZWxscyxcbiAgICAgICAgICBhY3Rpb25zOiByb3cuYWN0aW9ucyxcbiAgICAgICAgICBzaG93RGV0YWlsOiByb3cuc2hvd0RldGFpbCxcbiAgICAgICAgICBzdWJUYWJsZTogcm93LmRldGFpbCA/IHRoaXMuY29udmVydFRvVGFibGUocm93LmRldGFpbCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNEaXZpZGVyOiByb3cuaXNEaXZpZGVyLFxuICAgICAgICAgIGRpdmlkZXJDbGFzc05hbWU6IHJvdy5kaXZpZGVyQ2xhc3NOYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2F0aGVyVGFibGVEYXRhKHJvd3M6IE9lcGFUYWJsZVJvd1tdKTogT2VwYVRhYmxlIHtcbiAgICAvLyBjb25zb2xlLmxvZygnZ2F0aGVyVGFibGVEYXRhLi4uJyk7XG4gICAgLy8gdGhpcy5kdW1wRGV0YWlsUm93cygpO1xuICAgIGNvbnN0IG9lcGFUYWJsZTogT2VwYVRhYmxlID0ge307XG4gICAgb2VwYVRhYmxlLmhlYWRlclJvd3MgPSB0aGlzLmhlYWRlclJvd3M7XG4gICAgb2VwYVRhYmxlLmFsbERhdGFSb3dzID0gdGhpcy5wcmVwYXJlUm93c0ZvckV4cG9ydChyb3dzKTtcbiAgICBvZXBhVGFibGUuc2hvd0FsbERldGFpbHMgPSB0aGlzLnNob3dBbGxEZXRhaWxzO1xuICAgIG9lcGFUYWJsZS5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgIG9lcGFUYWJsZS52aXNpYmxlQ29sdW1uQ291bnQgPSB0aGlzLnZpc2libGVDb2x1bW5Db3VudDtcbiAgICBvZXBhVGFibGUuYWxsQ29sdW1uQ291bnQgPSB0aGlzLmFsbENvbHVtbkNvdW50O1xuICAgIHJldHVybiBvZXBhVGFibGU7XG4gIH1cblxuICBwcml2YXRlIGR1bXBEZXRhaWxSb3dzKCkge1xuICAgIGNvbnNvbGUubG9nKCdkdW1wRGV0YWlsUm93cyAtIFRvdGFsIHJvd3M6ICcgKyB0aGlzLl9kYXRhLmxlbmd0aCk7XG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5zaG93RGV0YWlsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTSE9XIERFVEFJTDogJyArIEpTT04uc3RyaW5naWZ5KHJvdy5kYXRhU291cmNlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvVGFibGUodGVtcGxhdGU6IE9lcGFUZW1wbGF0ZUluZm8pOiBPZXBhVGFibGUgfCB1bmRlZmluZWQge1xuICAgIGxldCBvZXBhVGFibGU6IE9lcGFUYWJsZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGUuY29tcG9uZW50ID09PSBUYWJsZUNvbXBvbmVudCkge1xuICAgICAgY29uc3QgdGFibGU6IFRhYmxlQ29tcG9uZW50ID0gbmV3IFRhYmxlQ29tcG9uZW50KHRoaXMuc2FuaXRpemVyLCB0aGlzLnRhYmxlU2VydmljZSwgdGhpcy50YWJsZUV4cG9ydFNlcnZpY2UsIHRoaXMuZmlsZVV0aWxTZXJ2aWNlKTtcbiAgICAgIGlmICh0ZW1wbGF0ZS5pbnB1dHMgJiYgdGVtcGxhdGUuaW5wdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGVtcGxhdGUuaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lm5hbWUgPT09ICdjb25maWcnKSB7XG4gICAgICAgICAgICB0YWJsZS5jb25maWcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0Lm5hbWUgPT09ICdjb21wbGV4SGVhZGVyJykge1xuICAgICAgICAgICAgdGFibGUuY29tcGxleEhlYWRlciA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIHRhYmxlLmhlYWRlciA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0YWJsZS5kYXRhID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb2VwYVRhYmxlID0gdGFibGUuZ2F0aGVyVGFibGVEYXRhKHRhYmxlLmRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2VwYVRhYmxlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cG9ydFZpc2libGVPbmx5KCkge1xuICAgIHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPSAhdGhpcy5leHBvcnRWaXNpYmxlT25seTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRUb0V4Y2VsKCkge1xuICAgIGNvbnN0IGV4cG9ydFRhYmxlOiBPZXBhVGFibGUgPSB0aGlzLmdhdGhlclRhYmxlRGF0YSh0aGlzLmV4cG9ydFZpc2libGVPbmx5ID8gdGhpcy5yb3dzIDogdGhpcy5fZGF0YSk7XG5cbiAgICB0aGlzLnRhYmxlRXhwb3J0U2VydmljZS5kb3dubG9hZEV4Y2VsKGV4cG9ydFRhYmxlLCB0aGlzLl9jb25maWcpLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcpO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IGNvbnNvbGUubG9nKGVycm9yKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0VG9IVE1MKCkge1xuICAgIGNvbnN0IGV4cG9ydFRhYmxlOiBPZXBhVGFibGUgPSB0aGlzLmdhdGhlclRhYmxlRGF0YSh0aGlzLmV4cG9ydFZpc2libGVPbmx5ID8gdGhpcy5yb3dzIDogdGhpcy5fZGF0YSk7XG5cbiAgICAvLyBmb3Igbm93LCBhbHdheXMgZW1iZWQgc3ViLXRhYmxlcyAgaW4gSFRNTCB2aWV3LlxuICAgIHRoaXMudGFibGVFeHBvcnRTZXJ2aWNlLmRvd25sb2FkSFRNTChleHBvcnRUYWJsZSwgdGhpcy5fY29uZmlnKS5zdWJzY3JpYmUoXG4gICAgICBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsICd0ZXh0L2h0bWwnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiBjb25zb2xlLmxvZyhlcnJvcilcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uQ3VzdG9tQnRuQ2xpY2soKSB7XG4gICAgdGhpcy5jdXN0b21CdG5DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG59XG4iLCI8IS0tIFVuaGlkZSBzZWxlY3QgaW5wdXQgLSBvbmx5IHZpc2libGUgaWYgb25lIG9yIG1vcmUgY29sdW1ucyBhcmUgaGlkZGVuIC0tPlxuXG48Zm9ybSAqbmdJZj1cImhpZGRlbkNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPlNob3cgSGlkZGVuIENvbHVtbnM6PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIChjaGFuZ2UpPVwidW5oaWRlQ29sdW1uKCRhbnkoJGV2ZW50KS50YXJnZXQudmFsdWUpXCIgW2lkXT1cInRhYmxlSWQrJ19VbmhpZGVDb2x1bW5TZWxlY3QnXCI+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5DaG9vc2UgYSBjb2x1bW48L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29sIG9mIGhpZGRlbkNvbHVtbnNcIiBbdmFsdWVdPVwiY29sLmlkXCI+e3tjb2wudGl0bGV9fTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuPCEtLSBUaGlzIGlzIHRoZSB0YWJsZSAtLT5cbjxkaXYgbmdDbGFzcz1cInt7Y29uZmlnLmRpdkNsYXNzTmFtZSB8fCAnJ319XCIgPlxuPHRhYmxlICpuZ0lmPVwiIWNvbmZpZy5oaWRlVGFibGVcIiBjbGFzcz1cInRhYmxlIGRhdGFUYWJsZVwiIG5nQ2xhc3M9XCJ7e2NvbmZpZy5jbGFzc05hbWUgfHwgJyd9fVwiIHJvbGU9XCJncmlkXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cblxuPCEtLSBUaGlzIGlzIHRoZSB0YWJsZSBoZWFkZXIgLS0+XG48dGhlYWQ+XG4gIDwhLS0gVGhlcmUgbWF5IGJlIG11bHRpcGxlIGhlYWRlciByb3dzIC0tPlxuICA8dHIgKm5nRm9yPVwibGV0IGhkciBvZiBoZWFkZXJSb3dzOyBsZXQgaHI9aW5kZXg7XCIgcm9sZT1cInJvd1wiPlxuICAgIDwhLS0gRGV0YWlscyBpbmRpY2F0b3IgY29sdW1uIChpZiBkYXRhIGhhcyBkZXRhaWxzKSAtLT5cbiAgICA8dGggKm5nSWY9XCJkYXRhSGFzRGV0YWlscyAmJiBociA9PT0gMFwiIFtyb3dTcGFuXT1cImhlYWRlclJvd3MubGVuZ3RoXCIgY2xhc3M9XCJkZXRhaWwtaW5kaWNhdG9yLWNvbFwiPlxuICAgICAgPHNwYW4+XG4gICAgICAgIDxpIChjbGljayk9XCJ0b2dnbGVBbGxEZXRhaWxzKClcIiBbaWRdPVwidGFibGVJZCsnX1Nob3dBbGxEZXRhaWxzTGluaydcIiBjbGFzcz1cImJpXCIgW25nQ2xhc3NdPVwieydiaS1jaGV2cm9uLWRvd24nOiBzaG93QWxsRGV0YWlscywgJ2JpLWNoZXZyb24tcmlnaHQnOiAhc2hvd0FsbERldGFpbHN9XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCIoc2hvd0FsbERldGFpbHMgPyAnSGlkZScgOiAnU2hvdycpICsgJyBkZXRhaWxzIGZvciBhbGwgcm93cydcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICA8L2k+XG4gICAgICA8L3NwYW4+XG4gICAgPC90aD5cbiAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbHVtbiBbbmdGb3JPZl09XCJoZHIuY29sdW1uc1wiIGxldC1jPVwiaW5kZXhcIj5cbiAgICAgIDwhLS0gSGVhZGVyIGNlbGwgLS0+XG4gICAgICA8dGggKm5nSWY9XCIhY29sdW1uLmhpZGRlblwiIG5nQ2xhc3M9XCJ7e2NvbHVtbi5jbGFzc05hbWUgfHwgJyd9fVwiIFtjb2xTcGFuXT1cImNvbHVtbi5jb2xzcGFuIHx8IDFcIiBbcm93U3Bhbl09XCJjb2x1bW4ucm93c3BhbiB8fCAxXCI+XG4gICAgICAgIDwhLS0gU2VsZWN0IGFsbCBSb3dzIENoZWNrYm94IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJjb2x1bW4uc2VsZWN0Q29sdW1uXCIgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKClcIj5cblxuICAgICAgICAgIDwhLS0gSGVhZGVyIGNlbGwgdGV4dCB3aXRoIHNvcnQgY2FwYWJpbGl0eSAoaWYgc3BlY2lmaWVkKSAtLT5cbiAgICAgICAgICA8c3BhbiBbb2VwYVRhYmxlU29ydGluZ109XCJ0cnVlXCIgW2NvbHVtbl09XCJjb2x1bW5cIiBbdGFibGVJZF09XCJ0YWJsZUlkXCIgKHNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiIFtpZF09XCJ0YWJsZUlkKydfU29ydENvbHVtbkxpbmtfJytjb2x1bW4uaWRcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnNvcnRcIj48aSBjbGFzcz1cInB1bGwtbGVmdCBiaVwiIFtuZ0NsYXNzXT1cInsnYmktY2hldnJvbi1kb3duJzogY29sdW1uLnNvcnQgPT09ICdkZXNjJywgJ2JpLWNoZXZyb24tdXAnOiBjb2x1bW4uc29ydCA9PT0gJ2FzYyd9XCI+PC9pPlxuICAgICAgICAgICAgPHN1cCAqbmdJZj1cImNvbHVtbj8uc29ydEluZGV4IHx8IDAgPiAxXCI+e3tjb2x1bW4uc29ydEluZGV4fX08L3N1cD48L3NwYW4+XG4gICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gYnV0dG9uIHRvIGFsbG93IGNvbHVtbiB0byBiZSBoaWRkZW4gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbHVtbi5oaWRkZW4gPT09IGZhbHNlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiIGFyaWEtbGFiZWw9XCJIaWRlXCIgKGNsaWNrKT1cImhpZGVDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgICAgICBbaWRdPVwidGFibGVJZCsnX0hpZGVDb2x1bW5MaW5rJysnXycrY29sdW1uLmlkXCI+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gY29sdW1uIGZpbHRlciAoaWYgc3BlY2lmaWVkKSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIigocm93cyAmJiByb3dzLmxlbmd0aCA+IDApIHx8ICFub0ZpbHRlcnMoKSkgJiYgY29sdW1uLmZpbHRlcmFibGVcIiA+XG4gICAgICAgICAgPGlucHV0IFtvZXBhVGFibGVGaWx0ZXJpbmddPVwieyBmaWx0ZXJTdHJpbmc6ICcnLCBjb2x1bW5JZDogY29sdW1uLmlkIH1cIiBbdGFibGVJZF09XCJ0YWJsZUlkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIiAodGFibGVDaGFuZ2VkKT1cIm9uRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpZF09XCJ0YWJsZUlkKydfRmlsdGVyQ29sdW1uXycrY29sdW1uLmlkXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdHI+XG48L3RoZWFkPlxuXG48IS0tIFRoaXMgaXMgdGhlIHRhYmxlIGJvZHkgLS0+XG48dGJvZHk+XG4gIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcm93IFtuZ0Zvck9mXT1cInJvd3NcIiBsZXQtcj1cImluZGV4XCI+XG4gICAgPCEtLSBEYXRhIFJvdyAtLT5cbiAgICA8dHI+XG4gICAgICA8dGQgKm5nSWY9XCJkYXRhSGFzRGV0YWlsc1wiPlxuICAgICAgICA8IS0tIERldGFpbCBpY29uIChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy5zaG93RGV0YWlsID09PSB0cnVlIHx8IHJvdy5zaG93RGV0YWlsID09PSBmYWxzZVwiPlxuICAgICAgICAgIDxpICpuZ0lmPVwicm93LmRldGFpbEljb25DbGFzc05hbWVcIiBbbmdDbGFzc109XCJyb3cuZGV0YWlsSWNvbkNsYXNzTmFtZVwiPjwvaT5cbiAgICAgICAgICA8aSAoY2xpY2spPVwidG9nZ2xlUm93RGV0YWlsKHJvdylcIiBbaWRdPVwidGFibGVJZCsnX1Nob3dEZXRhaWxMaW5rXycrclwiIGNsYXNzPVwiYmlcIiBbbmdDbGFzc109XCJ7J2JpLWNoZXZyb24tZG93bic6IHJvdy5zaG93RGV0YWlsLCAnYmktY2hldnJvbi1yaWdodCc6ICFyb3cuc2hvd0RldGFpbH1cIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiKHJvdy5zaG93RGV0YWlsID8gJ0hpZGUnIDogJ1Nob3cnKSArICcgZGV0YWlscyBmb3IgdGhpcyByb3cnXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICAgICAgICA8L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvdGQ+XG4gICAgICA8IS0tIElmIHJvdyBpcyBhIGRpdmlkZXIsIGl0IHNwYW5zIHRoZSB3aG9sZSB0YWJsZSAtLT5cbiAgICAgIDwhLS0gPHRkICpuZ0lmPVwicm93LmlzRGl2aWRlclwiIFtjb2xTcGFuXT1cInZpc2libGVDb2x1bW5Db3VudCArIChkYXRhSGFzRGV0YWlscyA/IDEgOiAwKVwiIFtuZ0NsYXNzXT1cInJvdy5kaXZpZGVyQ2xhc3NOYW1lIHx8ICdvZXBhLXRhYmxlLWdyYXknXCI+Jm5ic3A7PC90ZD4gLS0+XG4gICAgICA8IS0tIERhdGEgUm93cyAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFyb3cuaXNEaXZpZGVyXCIgbmdGb3IgbGV0LWNvbCBbbmdGb3JPZl09XCJkYXRhQ29sdW1uc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWNvbC5oaWRkZW4gJiYgKHJvd3xjZWxsQ29sc3Bhbjpjb2wpID4gMFwiIG5nQ2xhc3M9XCJ7e3Jvd3xjZWxsQ2xhc3NuYW1lOmNvbCB8fCAnJ319XCIgW2NvbFNwYW5dPVwicm93fGNlbGxDb2xzcGFuOmNvbFwiPlxuICAgICAgICAgIDwhLS0gRGF0YSBDZWxsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29sLmFjdGlvbkNvbHVtbiAmJiAhY29sLnNlbGVjdENvbHVtbiAmJiAhY29sLnNpbmdsZVNlbGVjdENvbHVtblwiPlxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgcG9wb3ZlciAxIC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3cucG9wb3ZlclwiPlxuICAgICAgICAgICAgICAgIDxjbWwtdGVtcGxhdGUgW3RlbXBsYXRlSW5mb109XCJyb3cucG9wb3Zlci5jb250ZW50XCI+PC9jbWwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwhLS0gUG9wb3ZlciAxIGljb24gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy5wb3BvdmVyICYmIGkgPT09IChyb3cucG9wb3ZlckNvbHVtbkluZGV4IHx8IDApICYmIHJvdy5wb3BvdmVyXCIgdGFiaW5kZXg9XCIwXCIgW3BvcG92ZXJUaXRsZV09XCJyb3cucG9wb3Zlci50aXRsZVwiIFtwb3BvdmVyXT1cInBvcG92ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtjb250YWluZXJDbGFzc109XCJyb3cucG9wb3Zlci5jb250YWluZXJDbGFzc1wiIHBsYWNlbWVudD1cInJpZ2h0XCIgW3RyaWdnZXJzXT1cInJvdy5wb3BvdmVyLnRyaWdnZXIgfHwgJ21vdXNlZW50ZXI6bW91c2VsZWF2ZSdcIj5cbiAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwicm93LnBvcG92ZXIuY2xhc3NOYW1lXCIgW2lkXT1cInRhYmxlSWQrJ19Qb3BvdmVyTGlua18nK3JcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIHBvcG92ZXIgMiAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wb3ZlcjJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvdy5wb3BvdmVyMlwiPlxuICAgICAgICAgICAgICAgIDxjbWwtdGVtcGxhdGUgW3RlbXBsYXRlSW5mb109XCJyb3cucG9wb3ZlcjIuY29udGVudFwiPjwvY21sLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8IS0tIFBvcG92ZXIgMiBpY29uIChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09PSAocm93LnBvcG92ZXIyQ29sdW1uSW5kZXggfHwgMCkgJiYgcm93LnBvcG92ZXIyXCIgdGFiaW5kZXg9XCIwXCIgW3BvcG92ZXJUaXRsZV09XCJyb3cucG9wb3ZlcjIudGl0bGVcIiBbcG9wb3Zlcl09XCJwb3BvdmVyMlRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cInJvdy5wb3BvdmVyMi5jb250YWluZXJDbGFzc1wiIHBsYWNlbWVudD1cInJpZ2h0XCIgW3RyaWdnZXJzXT1cInJvdy5wb3BvdmVyMi50cmlnZ2VyIHx8ICdtb3VzZWVudGVyOm1vdXNlbGVhdmUnXCI+XG4gICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cInJvdy5wb3BvdmVyMi5jbGFzc05hbWVcIiBbaWRdPVwidGFibGVJZCsnX1BvcG92ZXIyTGlua18nK3JcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIHBvcG92ZXIgMyAtLT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wb3ZlcjNUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvdy5wb3BvdmVyM1wiPlxuICAgICAgICAgICAgICAgIDxjbWwtdGVtcGxhdGUgW3RlbXBsYXRlSW5mb109XCJyb3cucG9wb3ZlcjMuY29udGVudFwiPjwvY21sLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8IS0tIFBvcG92ZXIgMyBpY29uIChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09PSAocm93LnBvcG92ZXIzQ29sdW1uSW5kZXggfHwgMCkgJiYgcm93LnBvcG92ZXIzXCIgdGFiaW5kZXg9XCIwXCIgW3BvcG92ZXJUaXRsZV09XCJyb3cucG9wb3ZlcjMudGl0bGVcIiBbcG9wb3Zlcl09XCJwb3BvdmVyM1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cInJvdy5wb3BvdmVyMy5jb250YWluZXJDbGFzc1wiIHBsYWNlbWVudD1cInJpZ2h0XCIgW3RyaWdnZXJzXT1cInJvdy5wb3BvdmVyMy50cmlnZ2VyIHx8ICdtb3VzZWVudGVyOm1vdXNlbGVhdmUnXCI+XG4gICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cInJvdy5wb3BvdmVyMy5jbGFzc05hbWVcIiBbaWRdPVwidGFibGVJZCsnX1BvcG92ZXIzTGlua18nK3JcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicm93fGNlbGxJbm5lckhUTUw6Y29sXCIgW2lubmVySFRNTF09XCJyb3d8Y2VsbElubmVySFRNTDpjb2xcIj48L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShyb3d8Y2VsbElubmVySFRNTDpjb2wpXCI+e3tyb3d8Y2VsbFZhbHVlOmNvbH19PC9zcGFuPiAtLT5cblxuICAgICAgICAgICAgPCEtLSBJZiBjb2wgaXMgaHlwZXJsaW5rLCBkaXNwbGF5IGRhdGEgYXMgYSBoeXBlcmxpbmsgLS0+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29sLmh5cGVybGlua1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlua1wiIChjbGljayk9XCJjZWxsQ2xpY2socm93LCBjb2wuaWQpXCIgW2lkXT1cInRhYmxlSWQrJ19DZWxsQ2xpY2tfJytyKydfJytpXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShyb3d8Y2VsbElubmVySFRNTDpjb2wpXCI+XG4gICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwicm93fGNlbGxJY29uQ2xhc3NuYW1lOmNvbFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd3xjZWxsSW1nU3JjOmNvbFwiPjxpbWcgW3NyY109XCJyb3d8Y2VsbEltZ1NyYzpjb2xcIi8+PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7cm93fGNlbGxWYWx1ZTpjb2x9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3d8Y2VsbElubmVySFRNTDpjb2xcIiBbaW5uZXJIVE1MXT1cInJvd3xjZWxsSW5uZXJIVE1MOmNvbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8IS0tIElmIGNvbCBpcyBOT1QgaHlwZXJsaW5rLCBqdXN0IGRpc3BsYXkgZGF0YSAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbC5oeXBlcmxpbmtcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKHJvd3xjZWxsSW5uZXJIVE1MOmNvbClcIj5cbiAgICAgICAgICAgICAgICA8aSBuZ0NsYXNzPVwie3tyb3d8Y2VsbEljb25DbGFzc25hbWU6Y29sIHx8ICcnfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3d8Y2VsbEltZ1NyYzpjb2xcIj48aW1nIFtzcmNdPVwicm93fGNlbGxJbWdTcmM6Y29sXCIvPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7e3Jvd3xjZWxsVmFsdWU6Y29sfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93fGNlbGxJbm5lckhUTUw6Y29sXCIgW2lubmVySFRNTF09XCJyb3d8Y2VsbElubmVySFRNTDpjb2xcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFNlbGVjdCBDZWxsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuc2VsZWN0Q29sdW1uXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IFtpZF09XCJ0YWJsZUlkKydfJytyXCIgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cIiFyb3cuc2VsZWN0YWJsZVwiIFtjaGVja2VkXT1cInJvdy5zZWxlY3RlZFwiIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdylcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFNpbmdsZSBTZWxlY3QgQ2VsbCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnNpbmdsZVNlbGVjdENvbHVtblwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwidGFibGVJZCsnX3NpbmdsZVNlbGVjdF8nK3JcIiB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiIXJvdy5zZWxlY3RhYmxlXCIgW2NoZWNrZWRdPVwicm93LnNlbGVjdGVkXCIgKGNoYW5nZSk9XCJzaW5nbGVSb3dTZWxlY3Rpb24ocm93KVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbiBDZWxsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuYWN0aW9uQ29sdW1uICYmIHJvdy5hY3Rpb25zXCI+XG4gICAgICAgICAgICA8b2VwYS1hY3Rpb24tYnRuIFthY3Rpb25zXT1cInJvdy5hY3Rpb25zXCIgW2RhdGFdPVwicm93LmRhdGFTb3VyY2VcIiAgKGFjdGlvbkNsaWNrZWQpPVwib25BY3Rpb25DbGljaygkZXZlbnQpXCIgW2J0bklkXT1cInRhYmxlSWQrJ18nK3JcIj48L29lcGEtYWN0aW9uLWJ0bj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90cj5cblxuICAgIDwhLS0gRGV0YWlsIFJvdyAtLT5cbiAgICA8dHIgKm5nSWY9XCJyb3cuc2hvd0RldGFpbFwiIGNsYXNzPVwidGFibGUtaW5mb1wiPlxuICAgICAgPHRkIFtjb2xTcGFuXT1cInZpc2libGVDb2x1bW5Db3VudCArIChkYXRhSGFzRGV0YWlscyA/IDEgOiAwKVwiPlxuICAgICAgICA8Y21sLXRlbXBsYXRlIFt0ZW1wbGF0ZUluZm9dPVwicm93LmRldGFpbFwiPjwvY21sLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8dHIgKm5nSWY9XCJ0b3RhbFJvd1wiPlxuICAgIDx0ZCAqbmdJZj1cImRhdGFIYXNEZXRhaWxzXCI+XG4gICAgPC90ZD5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtdG90YWxDb2wgW25nRm9yT2ZdPVwiZGF0YUNvbHVtbnNcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCIhdG90YWxDb2wuaGlkZGVuXCIgbmdDbGFzcz1cInt7dG90YWxSb3d8Y2VsbENsYXNzbmFtZTp0b3RhbENvbCB8fCAnJ319XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgPHNwYW4+PGkgbmdDbGFzcz1cInt7dG90YWxSb3d8Y2VsbEljb25DbGFzc25hbWU6dG90YWxDb2wgfHwgJyd9fVwiPjwvaT57e3RvdGFsUm93fGNlbGxWYWx1ZTp0b3RhbENvbH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdHI+XG48L3Rib2R5PlxuPC90YWJsZT5cbjwvZGl2PlxuPCEtLSBUYWJsZSBmb290ZXIgLS0+XG48Zm9ybSAqbmdJZj1cIiFjb25maWcuaGlkZUZvb3RlciB8fCAoZGF0YSAmJiBwYWdlSW5mby5pdGVtc1BlclBhZ2UgPCBkYXRhLmxlbmd0aClcIiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxuPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IHRleHQtcmlnaHRcIj5cbiAgPCEtLSBUYWJsZS13aWRlIGZpbHRlciAtLT5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxpbnB1dCAqbmdJZj1cIiFjb25maWcuaGlkZUdsb2JhbEZpbHRlclwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGFsbCBjb2x1bW5zXCIgW29lcGFUYWJsZUZpbHRlcmluZ109XCJ7IGZpbHRlclN0cmluZzogJycgfVwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiICh0YWJsZUNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgIFtpZF09XCJ0YWJsZUlkKydfRmlsdGVyQWxsQ29sdW1uc0lucHV0J1wiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zaG93Um93Q291bnRJbkZvb3RlciAmJiBfZGF0YSAmJiBfZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1zZWNvbmRhcnlcIiBzdHlsZT1cImNvbG9yOiAjOTk5XCI+e3tfZGF0YS5sZW5ndGh9fTwvc3Bhbj4mbmJzcDt0b3RhbCByb3dzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBFeHBvcnQgQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImNvbmZpZy5leHBvcnRUb0V4Y2VsXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMVwiIChjbGljayk9XCJleHBvcnRUb0V4Y2VsKClcIiBbaWRdPVwidGFibGVJZCsnX0V4cG9ydFRvRXhjZWxCdG4nXCI+RXhwb3J0IHRvIEV4Y2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiY29uZmlnLmV4cG9ydFRvSFRNTFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTFcIiAoY2xpY2spPVwiZXhwb3J0VG9IVE1MKClcIiBbaWRdPVwidGFibGVJZCsnX0V4cG9ydFRvSFRNTEJ0bidcIj5FeHBvcnQgdG8gSFRNTDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tQnRuVmlzaWJsZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0xXCIgKGNsaWNrKT1cIm9uQ3VzdG9tQnRuQ2xpY2soKVwiIFtpZF09XCJ0YWJsZUlkKydfQ3VzdG9tQnRuJ1wiIFtkaXNhYmxlZF09XCIhY3VzdG9tQnRuRW5hYmxlZFwiPnt7Y3VzdG9tQnRuTGFiZWx9fTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLmV4cG9ydFRvRXhjZWwgfHwgY29uZmlnLmV4cG9ydFRvSFRNTFwiIGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxzcGFuPkV4cG9ydCBvbmx5IHZpc2libGUgZGF0YTombmJzcDtcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiZXhwb3J0VmlzaWJsZU9ubHlcIiAoY2xpY2spPVwidG9nZ2xlRXhwb3J0VmlzaWJsZU9ubHkoKVwiIGlkPVwiZXhwb3J0VmlzaWJsZU9ubHlDaGVja2JveFwiLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gIDxkaXYgKm5nSWY9XCIhY29uZmlnLmRpc2FibGVQYWdpbmF0aW9uXCIgY2xhc3M9XCJjb2wtc20tNCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgIDxwYWdpbmF0aW9uICpuZ0lmPVwicGFnaW5hdGlvbk9uXCIgY2xhc3M9XCJwYWdpbmF0aW9uLXNtXCIgW3RvdGFsSXRlbXNdPVwicGFnZUluZm8ubGVuZ3RoXCIgW2l0ZW1zUGVyUGFnZV09XCJwYWdlSW5mby5pdGVtc1BlclBhZ2VcIiBbbWF4U2l6ZV09XCJwYWdlSW5mby5tYXhTaXplXCJcbiAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudFBhZ2VcIiBuYW1lPVwiY3VycmVudFRhYmxlUGFnZVwiXG4gICAgICBbYm91bmRhcnlMaW5rc109XCJ0cnVlXCIgW3JvdGF0ZV09XCJmYWxzZVwiIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2VkKCRldmVudClcIiAobnVtUGFnZXMpPVwicGFnZUluZm8ubnVtUGFnZXMgPSAkZXZlbnRcIj5cbiAgICA8L3BhZ2luYXRpb24+XG4gICAgJm5ic3A7XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlUGFnaW5nYXRpb24oKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gbXItMVwiPnt7IHBhZ2luYXRpb25PbiA/ICdTaG93IEFsbCBSb3dzJyA6ICdSZXN0b3JlIFBhZ2luYXRpb24nfX08L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjwvZm9ybT4iXX0=
806
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCL0UsTUFBTSxPQUFPLGNBQWM7SUEySUU7SUFDakI7SUFDQTtJQUNBO0lBN0lILGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDL0IsVUFBVSxHQUEyQixFQUFFLENBQUM7SUFDeEMsSUFBSSxHQUF3QixFQUFFLENBQUM7SUFDL0Isa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkIsaUJBQWlCLEdBQXdCLEtBQUssQ0FBQztJQUUvQyxXQUFXLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxhQUFhLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxLQUFLLEdBQXdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQW9CLEVBQUUsQ0FBQztJQUM5QixjQUFjLEdBQTJCLENBQUM7WUFDaEQsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFLFNBQVM7U0FDcEIsQ0FBQyxDQUFDO0lBRUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRXZCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFeEIsUUFBUSxHQUFzQjtRQUNuQyxJQUFJLEVBQUUsQ0FBQztRQUNQLFlBQVksRUFBRSxFQUFFO1FBQ2hCLE9BQU8sRUFBRSxD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YTtzQkFBN0IsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLGdCQUFnQjtzQkFBaEMsTUFBTTtnQkE2QkksSUFBSTtzQkFEZCxLQUFLO2dCQXVCRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBPZXBhVGFibGUgfSBmcm9tICcuL29lcGEtdGFibGUnO1xuaW1wb3J0IHsgT2VwYVRhYmxlQ29uZmlnIH0gZnJvbSAnLi9vZXBhLXRhYmxlLWNvbmZpZyc7XG5pbXBvcnQgeyBPZXBhVGFibGVIZWFkZXIgfSBmcm9tICcuL29lcGEtdGFibGUtaGVhZGVyJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbHVtbiB9IGZyb20gJy4vb2VwYS10YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgT2VwYVRhYmxlUm93IH0gZnJvbSAnLi9vZXBhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBPZXBhVGFibGVDZWxsIH0gZnJvbSAnLi9vZXBhLXRhYmxlLWNlbGwnO1xuaW1wb3J0IHsgT2VwYVRhYmxlRmlsdGVyIH0gZnJvbSAnLi9vZXBhLXRhYmxlLWZpbHRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVQYWdlSW5mbyB9IGZyb20gJy4vb2VwYS10YWJsZS1wYWdlLWluZm8nO1xuaW1wb3J0IHsgT2VwYVRhYmxlQ2VsbENsaWNrRXZlbnQgfSBmcm9tICcuL29lcGEtdGFibGUtY2VsbC1jbGljay1ldmVudCc7XG5cbmltcG9ydCB7IE9lcGFBY3Rpb25FdmVudCB9IGZyb20gJy4uL2FjdGlvbi1idG4vb2VwYS1hY3Rpb24tZXZlbnQnO1xuXG5pbXBvcnQgeyBUYWJsZUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuL3RhYmxlLWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IE9lcGFUZW1wbGF0ZUluZm8gfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9lcGFUYWJsZVNvcnRDcml0ZXJpb24gfSBmcm9tICcuL29lcGEtdGFibGUtc29ydC1jcml0ZXJpb24nO1xuaW1wb3J0IHsgUGFnZUNoYW5nZWRFdmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBPZXBhRmlsZVV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vb2VwYS1maWxlLXV0aWxzL29lcGEtZmlsZS11dGlsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHNob3dGaWx0ZXJSb3c6IEJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGhlYWRlclJvd3M6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4gPSBbXTtcbiAgcHVibGljIHJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHVibGljIHZpc2libGVDb2x1bW5Db3VudCA9IDA7XG4gIHB1YmxpYyBhbGxDb2x1bW5Db3VudCA9IDA7XG4gIHB1YmxpYyBleHBvcnRWaXNpYmxlT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBkYXRhQ29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICBwdWJsaWMgaGlkZGVuQ29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICBwdWJsaWMgY29sdW1uSGVhZGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwdWJsaWMgX2RhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBPZXBhVGFibGVDb25maWcgPSB7fTtcbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVyczogQXJyYXk8T2VwYVRhYmxlRmlsdGVyPiA9IFt7XG4gICAgZmlsdGVyU3RyaW5nOiAnJyxcbiAgICBjb2x1bW5JZDogdW5kZWZpbmVkXG4gIH1dO1xuXG4gIHB1YmxpYyBkYXRhSGFzRGV0YWlscyA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0FsbERldGFpbHMgPSBmYWxzZTtcblxuICBwdWJsaWMgYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIHBhZ2VJbmZvOiBPZXBhVGFibGVQYWdlSW5mbyA9IHtcbiAgICBwYWdlOiAxLFxuICAgIGl0ZW1zUGVyUGFnZTogMTAsXG4gICAgbWF4U2l6ZTogNSxcbiAgICBudW1QYWdlczogMSxcbiAgICBsZW5ndGg6IDBcbiAgfTtcbiAgcHVibGljIGN1cnJlbnRQYWdlID0gMTtcbiAgcHVibGljIHBhZ2luYXRpb25PbiA9IHRydWU7XG5cbiAgQElucHV0KCkgdGFibGVJZCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29uZmlnKGNvbmY6IE9lcGFUYWJsZUNvbmZpZykge1xuICAgIGlmICghY29uZi5jbGFzc05hbWUpIHtcbiAgICAgIGNvbmYuY2xhc3NOYW1lID0gJ3RhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQnO1xuICAgIH1cbiAgICBpZiAoY29uZi5jbGFzc05hbWVzKSB7XG4gICAgICBjb25mLmNsYXNzTmFtZSA9IGNvbmYuY2xhc3NOYW1lcy5qb2luKCcgJyk7XG4gICAgfVxuICAgIGlmIChjb25mLnJvd3NQZXJQYWdlKSB7XG4gICAgICB0aGlzLnBhZ2VJbmZvLml0ZW1zUGVyUGFnZSA9IGNvbmYucm93c1BlclBhZ2U7XG4gICAgfVxuICAgIHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPSBjb25mLmV4cG9ydFZpc2libGVPbmx5O1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmY7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpOiBPZXBhVGFibGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbXBsZXhIZWFkZXIoaGRyczogQXJyYXk8T2VwYVRhYmxlSGVhZGVyPikge1xuICAgIHRoaXMucmVzZXRIZWFkZXJzKCk7XG4gICAgaWYgKGhkcnMgJiYgaGRycy5sZW5ndGgpIHtcbiAgICAgIGhkcnMuZm9yRWFjaCgoaGRyOiBPZXBhVGFibGVIZWFkZXIpID0+IHtcbiAgICAgICAgdGhpcy5oZWFkZXJSb3dzLnB1c2godGhpcy5leHRyYWN0SW5uZXJDb2x1bW5zKGhkci5jb2x1bW5zKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29sdW1uSGVhZGVycyA9IHRoaXMuZXh0cmFjdENvbHVtbkhlYWRlcnModGhpcy5oZWFkZXJSb3dzKTtcbiAgICAgIHRoaXMuZGF0YUNvbHVtbnMgPSB0aGlzLmV4dHJhY3REYXRhQ29sdW1ucyh0aGlzLmhlYWRlclJvd3MpO1xuICAgICAgdGhpcy5pbml0aWFsaXplSGlkZGVuQ29sdW1ucyh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhlYWRlcihoZHI6IE9lcGFUYWJsZUhlYWRlcikge1xuICAgIHRoaXMucmVzZXRIZWFkZXJzKCk7XG4gICAgaWYgKGhkci5jb2x1bW5zICYmIGhkci5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaGVhZGVyUm93cy5wdXNoKHRoaXMuZXh0cmFjdElubmVyQ29sdW1ucyhoZHIuY29sdW1ucykpO1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbkhlYWRlcnMgPSB0aGlzLmV4dHJhY3RDb2x1bW5IZWFkZXJzKHRoaXMuaGVhZGVyUm93cyk7XG4gICAgdGhpcy5kYXRhQ29sdW1ucyA9IHRoaXMuZXh0cmFjdERhdGFDb2x1bW5zKHRoaXMuaGVhZGVyUm93cyk7XG4gICAgdGhpcy5pbml0aWFsaXplSGlkZGVuQ29sdW1ucyhmYWxzZSk7XG4gIH1cblxuICBASW5wdXQoKSBjdXN0b21CdG5MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjdXN0b21CdG5WaXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1c3RvbUJ0bkVuYWJsZWQgPSBmYWxzZTtcblxuICAvLyBPdXRwdXRzIChFdmVudHMpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2VsbENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxPZXBhVGFibGVDZWxsQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgYWN0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPE9lcGFBY3Rpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxPZXBhVGFibGVSb3c+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjdXN0b21CdG5DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSByZXNldEhlYWRlcnMoKSB7XG4gICAgdGhpcy5oZWFkZXJSb3dzID0gW107XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gW107XG4gICAgdGhpcy5kYXRhQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplSGlkZGVuQ29sdW1ucyhjb21wbGV4SGVhZGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uQ291bnQgPSAwO1xuICAgIHRoaXMuYWxsQ29sdW1uQ291bnQgPSAwO1xuICAgIHRoaXMuZGF0YUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29tcGxleEhlYWRlciAmJiAoY29sdW1uPy5oaWRkZW4gPT09IHRydWUgfHwgY29sdW1uPy5oaWRkZW4gPT09IGZhbHNlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkaXNhYmxpbmcgaGlkZGVuIGF0dHJpYnV0ZSBmb3IgY29sdW1uOiAnICsgY29sdW1uLmlkICtcbiAgICAgICAgICAnLiBIaWRkZW4gY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgY29tcGxleCBoZWFkZXJzICh5ZXQpLicpO1xuICAgICAgICBjb2x1bW4uaGlkZGVuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1uQ291bnQrKztcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxsQ29sdW1uQ291bnQrKztcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygndmlzaWJsZUNvbHVtbkNvdW50ID0gJyArIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZXM6IEFycmF5PE9lcGFUYWJsZVJvdz4pIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgdGhpcy5fZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLnRhYmxlU2VydmljZS5nZXREYXRhKHRoaXMudGFibGVJZCkgfHwgW107XG4gICAgfVxuICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlc1tpXS5wcml2YXRlSWQgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2UuY2xlYXJQYWdlSW5mbyh0aGlzLnRhYmxlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZXM7XG4gICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0RGF0YSh0aGlzLnRhYmxlSWQsIHRoaXMuX2RhdGEpO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5tYXAoeCA9PiBPYmplY3QuYXNzaWduKHt9LCB4KSk7XG4gIH1cblxuICBASW5wdXQoKSB0b3RhbFJvdzogT2VwYVRhYmxlUm93IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJsZUV4cG9ydFNlcnZpY2U6IFRhYmxlRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGZpbGVVdGlsU2VydmljZTogT2VwYUZpbGVVdGlsU2VydmljZSkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uT24gPSAhdGhpcy5fY29uZmlnLmRpc2FibGVQYWdpbmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0SW5uZXJDb2x1bW5zKGlubmVyOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+KTogT2VwYVRhYmxlSGVhZGVyIHtcbiAgICBjb25zdCBoZWFkZXI6IE9lcGFUYWJsZUhlYWRlciA9IHsgY29sdW1uczogW10gfTtcbiAgICBpbm5lci5mb3JFYWNoKCh2YWx1ZTogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBoZWFkZXIuY29sdW1ucy5maW5kKChjb2w6IE9lcGFUYWJsZUNvbHVtbikgPT4gY29sLmlkID09PSB2YWx1ZS5pZCk7XG4gICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgIC8vIG92ZXJ3cml0ZSByZXBlYXRlZCBjb2x1bW5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgIGhlYWRlci5jb2x1bW5zLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXI7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RDb2x1bW5IZWFkZXJzKGhlYWRlclJvd3M6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICBjb25zdCBjaGlsZENvbHVtbnM6IGFueSA9IHt9O1xuICAgIGhlYWRlclJvd3MuZm9yRWFjaCgoaGRyOiBPZXBhVGFibGVIZWFkZXIpID0+IHtcbiAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncm93SW5kZXg9JyArIHJvd0luZGV4ICsgJywgY29sSW5kZXg9JyArIGNvbEluZGV4ICsgJywgY29sdW1uPScgKyBKU09OLnN0cmluZ2lmeShjb2x1bW4pKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKGNvbHVtbi50aXRsZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5jb2xzcGFuKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb3VudCA9IDE7IGNvdW50IDwgY29sdW1uLmNvbHNwYW47IGNvdW50KyspIHtcbiAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5yb3dzcGFuKSB7XG4gICAgICAgICAgICBjaGlsZENvbHVtbnNbY29sSW5kZXhdID0gY29sdW1uLnJvd3NwYW4gLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoY2hpbGRDb2x1bW5zW2NvbEluZGV4XSAmJiBjaGlsZENvbHVtbnNbY29sSW5kZXhdID4gMCkge1xuICAgICAgICAgICAgY2hpbGRDb2x1bW5zW2NvbEluZGV4XS0tO1xuICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaGVhZGVyc1tjb2xJbmRleF0gKz0gJyAnICsgY29sdW1uLnRpdGxlO1xuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3Bhbikge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8IGNvbHVtbi5jb2xzcGFuOyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbEluZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2coJ2hlYWRlcnMgPSAnICsgSlNPTi5zdHJpbmdpZnkoaGVhZGVycykpO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cblxuICBwcml2YXRlIGV4dHJhY3REYXRhQ29sdW1ucyhoZWFkZXJSb3dzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+KTogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgZGF0YUNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgIGNvbnN0IGNoaWxkQ29sdW1uczphbnkgPSB7fTtcbiAgICBoZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBsZXQgY29sSW5kZXggPSAwO1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5jb2xzcGFuICYmIGNvbHVtbi5jb2xzcGFuID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGNvbHVtbi5jb2xzcGFuOyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgIGRhdGFDb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogJydcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xJbmRleCArPSAoY29sdW1uLmNvbHNwYW4gLSAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YUNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5yb3dzcGFuKSB7XG4gICAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPSBjb2x1bW4ucm93c3BhbiAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdoaWxlIChjaGlsZENvbHVtbnNbY29sSW5kZXhdICYmIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPiAwKSB7XG4gICAgICAgICAgICBjaGlsZENvbHVtbnNbY29sSW5kZXhdLS07XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmNvbHNwYW4gJiYgY29sdW1uLmNvbHNwYW4gPiAxKSB7XG4gICAgICAgICAgICBjb2xJbmRleCArPSAoY29sdW1uLmNvbHNwYW4gLSAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YUNvbHVtbnNbY29sSW5kZXhdID0gY29sdW1uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICByb3dJbmRleCsrO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhQ29sdW1ucyA9ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhQ29sdW1ucykpO1xuICAgIHJldHVybiBkYXRhQ29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGl6ZShodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZmlsdGVycyBhcmUgc2V0XG4gICAqL1xuICBwdWJsaWMgbm9GaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIGxldCBub0ZpbHRlcnMgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlci5maWx0ZXJTdHJpbmcgJiYgZmlsdGVyLmZpbHRlclN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vRmlsdGVycyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBub0ZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGdsb2JhbCBmaWx0ZXIgc3RyaW5nIChpZiBhbnkpIGFzIGEgUmVnRXhwXG4gICAqL1xuICBwcml2YXRlIGdldEdsb2JhbEZpbHRlcigpOiBSZWdFeHAgfCB1bmRlZmluZWQge1xuICAgIGxldCByZWdFeHA6IFJlZ0V4cCB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGlmICghZmlsdGVyLmNvbHVtbklkICYmIGZpbHRlci5maWx0ZXJTdHJpbmcgJiYgZmlsdGVyLmZpbHRlclN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoZmlsdGVyLmZpbHRlclN0cmluZywgJ2knKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVnRXhwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBmaWx0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uIChpZiBhbnkpIGFzIGEgUmVnRXhwLlxuICAgKiBAcGFyYW0gY29sdW1uSWRcbiAgICovXG4gIHByaXZhdGUgZ2V0RmlsdGVyRm9yQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpOiBSZWdFeHAgfCB1bmRlZmluZWQge1xuICAgIGxldCByZWdFeHA6IFJlZ0V4cCB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuY29sdW1uSWQgPT09IGNvbHVtbklkICYmIGZpbHRlci5maWx0ZXJTdHJpbmcgJiYgZmlsdGVyLmZpbHRlclN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoZmlsdGVyLmZpbHRlclN0cmluZywgJ2knKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVnRXhwO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgdGFibGUgZGF0YSBwcm92aWRlZCBieSB0aGUgZ2xvYmFsIG9yIGNvbHVtbi1zcGVjaWZpY1xuICAgKiBmaWx0ZXJzIHNldCBpbiB0aGUgVUkuXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcml2YXRlIGZpbHRlckRhdGEoZGF0YTogQXJyYXk8T2VwYVRhYmxlUm93Pik6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIC8vIGRvbid0IGF0dGVtcHQgZmlsdGVyaW5nIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHNldFxuICAgIGlmICh0aGlzLm5vRmlsdGVycygpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGZpbHRlcmVkRGF0YTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IGRhdGE7XG4gICAgY29uc3QgdGVtcEFycmF5OiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gICAgZmlsdGVyZWREYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBsZXQgZmxhZyA9IHRoaXMuZmlsdGVyQnlDb2x1bW5GaWx0ZXJzKHJvdyk7XG4gICAgICBpZiAoZmxhZykge1xuICAgICAgICBmbGFnID0gdGhpcy5maWx0ZXJCeUdsb2JhbEZpbHRlcihyb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGZsYWcgfHwgcm93LmlzRGl2aWRlcikge1xuICAgICAgICB0ZW1wQXJyYXkucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbHRlcmVkRGF0YSA9IHRlbXBBcnJheTtcbiAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgcm93IG1hdGNoZXMgYW55IG9mIHRoZSBjb2x1bW5uIGZpbHRlcnMgdGhhdCBtYXkgYmUgc2V0LlxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBwcml2YXRlIGZpbHRlckJ5Q29sdW1uRmlsdGVycyhyb3c6IE9lcGFUYWJsZVJvdyk6IGJvb2xlYW4ge1xuICAgIGxldCBmbGFnID0gdHJ1ZTtcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgY29uc3QgcmVnRXhwID0gdGhpcy5nZXRGaWx0ZXJGb3JDb2x1bW4oY2VsbC5pZCk7XG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNlbGwuZmlsdGVyVmFsdWUgfHwgY2VsbC52YWx1ZSB8fCAnJztcbiAgICAgIGlmIChyZWdFeHAgJiYgZmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaWx0ZXJWYWx1ZS50b1N0cmluZygpLm1hdGNoKHJlZ0V4cCk7XG4gICAgICAgIGZsYWcgPSBmbGFnICYmIChyZXN1bHQgIT09IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmbGFnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgcm93IG1hdGNoZXMgdGhlIGdsb2JhbCBmaWx0ZXJcbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJCeUdsb2JhbEZpbHRlcihyb3c6IE9lcGFUYWJsZVJvdyk6IGJvb2xlYW4ge1xuICAgIGxldCBmbGFnID0gdHJ1ZTtcbiAgICBjb25zdCByZWdFeHAgPSB0aGlzLmdldEdsb2JhbEZpbHRlcigpO1xuICAgIGlmIChyZWdFeHApIHtcbiAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gY2VsbC5maWx0ZXJWYWx1ZSB8fCBjZWxsLnZhbHVlO1xuICAgICAgICBpZiAoZmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlclZhbHVlLnRvU3RyaW5nKCkubWF0Y2gocmVnRXhwKTtcbiAgICAgICAgICBmbGFnID0gZmxhZyB8fCAocmVzdWx0ICE9PSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmbGFnO1xuICB9XG5cbiAgcHVibGljIGhpZGVDb2x1bW4oY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50LS07XG4gIH1cblxuICBwdWJsaWMgdW5oaWRlQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoaWRkZW5Db2xzOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5pZCAhPT0gY29sdW1uSWQpIHtcbiAgICAgICAgaGlkZGVuQ29scy5wdXNoKGNvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2wuaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29scztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCsrO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0RGF0YShkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+KTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgbGV0IHNvcnRDcml0ZXJpYTogYW55ID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0U29ydENyaXRlcmlhKHRoaXMudGFibGVJZCkgfHwgW107XG4gICAgaWYgKHNvcnRDcml0ZXJpYS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldENvbHVtblNvcnRJbmRleGVzKHNvcnRDcml0ZXJpYSk7XG5cbiAgICByZXR1cm4gZGF0YS5zb3J0KChwcmV2aW91czogT2VwYVRhYmxlUm93LCBjdXJyZW50OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGxldCBzb3J0SW5kZXggPSAwO1xuICAgICAgbGV0IHNvcnRSZXN1bHQgPSAwO1xuICAgICAgd2hpbGUgKHNvcnRJbmRleCA8IHNvcnRDcml0ZXJpYS5sZW5ndGggJiYgc29ydFJlc3VsdCA9PT0gMCkge1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMuZ2V0Um93U29ydFZhbHVlKHByZXZpb3VzLCBzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5jb2x1bW5JZCk7XG4gICAgICAgIGxldCBjdXJyID0gdGhpcy5nZXRSb3dTb3J0VmFsdWUoY3VycmVudCwgc29ydENyaXRlcmlhW3NvcnRJbmRleF0uY29sdW1uSWQpO1xuICAgICAgICBpZiAocHJldiA+IGN1cnIpIHtcbiAgICAgICAgICBzb3J0UmVzdWx0ID0gIChzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5zb3J0ID09PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXYgPCBjdXJyKSB7XG4gICAgICAgICAgc29ydFJlc3VsdCA9ICAoc29ydENyaXRlcmlhW3NvcnRJbmRleF0uc29ydCA9PT0gJ2FzYycgPyAtMSA6IDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNvcnRSZXN1bHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHNvcnRJbmRleCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNvcnRSZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRDb2x1bW5Tb3J0SW5kZXhlcyhzb3J0Q3JpdGVyaWE6IE9lcGFUYWJsZVNvcnRDcml0ZXJpb25bXSkge1xuICAgIGlmIChzb3J0Q3JpdGVyaWEgJiYgc29ydENyaXRlcmlhLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxzb3J0Q3JpdGVyaWEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5kYXRhQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbj8uaWQgPT09IHNvcnRDcml0ZXJpYVtpXS5jb2x1bW5JZCkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgICBjb2x1bW4uc29ydEluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaXNwbGF5IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY2VsbC5cbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcGFyYW0gY29sdW1uSWRcbiAgICovXG4gIHB1YmxpYyBnZXRSb3dWYWx1ZShyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICB2YWx1ZSA9IGNlbGwudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3cgUmV0cmlldmUgdGhlIHNvcnQgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBjZWxsICh3aWxsIGRlZmF1bHQgdG8gZGlzcGxheSB2YWx1ZSBpZiBzb3J0XG4gICAqIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQpLlxuICAgKiBAcGFyYW0gY29sdW1uSWRcbiAgICovXG4gIHB1YmxpYyBnZXRSb3dTb3J0VmFsdWUocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgaWYgKGNlbGwuc29ydFZhbHVlICE9PSB1bmRlZmluZWQgJiYgY2VsbC5zb3J0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YWx1ZSA9IGNlbGwuc29ydFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gY2VsbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VQYWdlKGRhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSB0aGlzLmRhdGEpOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbk9uKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVQYWdlKCk7XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdlSW5mby5wYWdlIC0gMSkgKiB0aGlzLnBhZ2VJbmZvLml0ZW1zUGVyUGFnZTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLnBhZ2VJbmZvLml0ZW1zUGVyUGFnZSA+IC0xID8gKHN0YXJ0ICsgdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2UpIDogZGF0YS5sZW5ndGg7XG4gICAgLy8gbm90IHN1cmUgd2h5LCBidXQgbWF4U2l6ZSB3YXMgZ2V0dGluZyBsb3N0LiBSZXNldCBpdCBoZXJlIHRvIHByZXZlbnQgd2VpcmRuZXNzLlxuICAgIHRoaXMucGFnZUluZm8ubWF4U2l6ZSA9IDU7XG4gICAgcmV0dXJuIGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUGFnaW5nYXRpb24oKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uT24gPSAhdGhpcy5wYWdpbmF0aW9uT247XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyQ2hhbmdlZChmaWx0ZXI6IE9lcGFUYWJsZUZpbHRlcikge1xuICAgIGNvbnN0IG1hdGNoRmlsdGVyID0gdGhpcy5jdXJyZW50RmlsdGVycy5maW5kKChmKSA9PiB7XG4gICAgICByZXR1cm4gZi5jb2x1bW5JZCA9PT0gZmlsdGVyLmNvbHVtbklkO1xuICAgIH0pO1xuICAgIGlmICghbWF0Y2hGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXRjaEZpbHRlci5maWx0ZXJTdHJpbmcgPSBmaWx0ZXIuZmlsdGVyU3RyaW5nO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRhYmxlKHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydENoYW5nZWQoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLnRhYmxlU2VydmljZS5zZXRTb3J0KHRoaXMudGFibGVJZCwgY29sdW1uKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlQ2hhbmdlZChwYWdlRXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLnBhZ2VJbmZvID0ge1xuICAgICAgcGFnZTogcGFnZUV2ZW50LnBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2U6IHBhZ2VFdmVudC5pdGVtc1BlclBhZ2UsXG4gICAgICBtYXhTaXplOiB0aGlzLnBhZ2VJbmZvLm1heFNpemUsXG4gICAgICBsZW5ndGg6IHRoaXMucGFnZUluZm8ubGVuZ3RoLFxuICAgICAgbnVtUGFnZXM6IHRoaXMucGFnZUluZm8ubnVtUGFnZXNcbiAgICB9XG4gICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0UGFnZSh0aGlzLnRhYmxlSWQsIHBhZ2VFdmVudC5wYWdlKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlKGNsZWFyU2VsY3RlZFJvd3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLmRhdGEpO1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKGZpbHRlcmVkRGF0YSk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5jaGFuZ2VQYWdlKHNvcnRlZERhdGEpO1xuICAgIHRoaXMucGFnZUluZm8ubGVuZ3RoID0gc29ydGVkRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBpZiAoY2xlYXJTZWxjdGVkUm93cykge1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KFtdKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhSGFzRGV0YWlscyA9IHRoaXMuY2hlY2tGb3JEZXRhaWxzKHRoaXMucm93cyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2UoKSB7XG4gICAgY29uc3Qgc2F2ZWRQYWdlTnVtYmVyID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnZSh0aGlzLnRhYmxlSWQpO1xuICAgIGlmIChzYXZlZFBhZ2VOdW1iZXIgJiYgdGhpcy5wYWdlSW5mby5wYWdlICE9PSBzYXZlZFBhZ2VOdW1iZXIpIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucGFnZSA9IHNhdmVkUGFnZU51bWJlcjtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VJbmZvLnBhZ2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckRldGFpbHMoZGF0YTogQXJyYXk8T2VwYVRhYmxlUm93Pik6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHtcbiAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5zaG93RGV0YWlsID09PSB0cnVlIHx8IHJvdy5zaG93RGV0YWlsID09PSBmYWxzZSkge1xuICAgICAgICAgIGhhc0RldGFpbHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RldGFpbHM7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQWxsRGV0YWlscygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygndG9nZ2xlQWxsRGV0YWlscy4uLicpO1xuICAgIHRoaXMuc2hvd0FsbERldGFpbHMgPSAhdGhpcy5zaG93QWxsRGV0YWlscztcbiAgICAvLyBjb25zb2xlLmxvZygnc2hvd0FsbERldGFpbHMgPSAnICsgdGhpcy5zaG93QWxsRGV0YWlscyk7XG4gICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5zaG93RGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbCA9IHRoaXMuc2hvd0FsbERldGFpbHM7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3NldHRpbmcgZGV0YWlscyBmb3Igcm93IHRvICcgKyB0aGlzLnNob3dBbGxEZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVSb3dEZXRhaWwodG9nZ2xlUm93OiBPZXBhVGFibGVSb3cpIHtcbiAgICBpZiAodG9nZ2xlUm93ICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1RFU1Q6ICcgKyBKU09OLnN0cmluZ2lmeShyb3cuZGF0YVNvdXJjZSkgKyAnID09PSAnICsgSlNPTi5zdHJpbmdpZnkodG9nZ2xlUm93LmRhdGFTb3VyY2UpKTtcbiAgICAgICAgaWYgKHJvdy5kYXRhU291cmNlID09PSB0b2dnbGVSb3cuZGF0YVNvdXJjZSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCchISEgTUFUQ0ggISEhJyk7XG4gICAgICAgICAgcm93LnNob3dEZXRhaWwgPSAhdG9nZ2xlUm93LnNob3dEZXRhaWw7XG4gICAgICAgICAgdG9nZ2xlUm93LnNob3dEZXRhaWwgPSByb3cuc2hvd0RldGFpbDtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc2hvdyBkZXRhaWwgPSAnICsgcm93LnNob3dEZXRhaWwgKyAnIGZvciByb3c6ICcgKyBKU09OLnN0cmluZ2lmeShyb3cuZGF0YVNvdXJjZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhLnNwbGljZSgwKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ3RvZ2dsZVJvd0RldGFpbC4uLicpO1xuICAgIC8vIHRoaXMuZHVtcERldGFpbFJvd3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGlvbkNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coJ2lzQWN0aW9uQ29sdW1uICcgKyBjb2x1bW5JZCk7XG4gICAgbGV0IGFjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGVzdCBhY3Rpb24gY29sdW1uOiAnICsgY29sdW1uLmlkICsgJyAtICcgKyBjb2x1bW4uYWN0aW9uQ29sdW1uKTtcbiAgICAgICAgICBhY3Rpb25Db2x1bW4gPSBjb2x1bW4uYWN0aW9uQ29sdW1uIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aW9uQ29sdW1uO1xuICB9XG5cbiAgcHVibGljIGlzQ29sdW1uSGlkZGVuKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaXNDb2x1bW5IaWRkZW4gJyArIGNvbHVtbklkKTtcbiAgICBsZXQgaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5oZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0ZXN0IGhpZGRlbiBjb2x1bW46ICcgKyBjb2x1bW4uaWQgKyAnIC0gJyArIGNvbHVtbi5oaWRkZW4pO1xuICAgICAgICAgIGhpZGRlbiA9IGNvbHVtbi5oaWRkZW4gfHwgZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0SGlkZGVuQ29sdW1ucygpOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+IHtcbiAgICBjb25zdCBjb2x1bW5zOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgdGhpcy5oZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRDZWxsQ2xhc3NOYW1lKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIHJlc3VsdCA9IGNlbGwuY2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbENvbFNwYW4ocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDE7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICByZXN1bHQgPSBjZWxsLmNvbFNwYW4gfHwgMCA+PTAgPyBjZWxsLmNvbFNwYW4gOiAxO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEljb25DbGFzc05hbWUocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgcmVzdWx0ID0gY2VsbC5pY29uQ2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEltZ1NyYyhyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICByZXN1bHQgPSBjZWxsLmltZ1NyYztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldENlbGxJbm5lckhUTUwocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgcmVzdWx0ID0gY2VsbC5pbm5lckhUTUw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBjZWxsQ2xpY2socm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWUocm93LCBjb2x1bW5JZCk7XG4gICAgdGhpcy5jZWxsQ2xpY2tlZC5lbWl0KHsgcm93LCBjb2x1bW5JZCwgdmFsdWUgfSk7XG4gIH1cblxuICBwdWJsaWMgb25BY3Rpb25DbGljayhldmVudDogT2VwYUFjdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSAhdGhpcy5hbGxSb3dzU2VsZWN0ZWQ7XG4gICAgLy8gZGVzZWxlY3QgYWxsIHJvd3NcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKHI6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgci5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIHNlbGVjdCBvbmx5IHZpc2libGUgcm93c1xuICAgIHRoaXMucm93cy5mb3JFYWNoKChyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGlmIChyLnNlbGVjdGFibGUpIHtcbiAgICAgICAgci5zZWxlY3RlZCA9IHRoaXMuYWxsUm93c1NlbGVjdGVkO1xuICAgICAgfVxuICAgICAgaWYgKHIuc2VsZWN0ZWQpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dzLnNsaWNlKCk7XG4gICAgLy8gdGhpcy51cGRhdGVUYWJsZSgpO1xuICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVJvd1NlbGVjdGlvbihyb3c6IE9lcGFUYWJsZVJvdyk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93czogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChkcjogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBpZiAocm93LnByaXZhdGVJZCA9PT0gZHIucHJpdmF0ZUlkKSB7XG4gICAgICAgIGRyLnNlbGVjdGVkID0gcm93LnNlbGVjdGVkO1xuICAgICAgfVxuICAgICAgaWYgKGRyLnNlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKGRyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dzLnNsaWNlKCk7XG4gICAgLy8gdGhpcy51cGRhdGVUYWJsZSgpO1xuICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgcHVibGljIHNpbmdsZVJvd1NlbGVjdGlvbihyb3c6IE9lcGFUYWJsZVJvdyk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93czogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XG4gICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzIGlmIGl0IGlzIHNlbGVjdGVkXG4gICAgaWYgKHJvdy5zZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICB9XG4gICAgLy8gdW5zZWxlY3QgYW55IG90aGVyIHJvdyB0aGF0IG1heSBiZSBzZWxlY3RlZFxuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgoZHI6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5wcml2YXRlSWQgPT09IGRyLnByaXZhdGVJZCkge1xuICAgICAgICBkci5zZWxlY3RlZCA9IHJvdy5zZWxlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dzLnNsaWNlKCk7XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICAgIHRoaXMucm93U2VsZWN0ZWQuZW1pdChzZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUm93c0ZvckV4cG9ydChyb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+KTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gICAgLy8gY29uc29sZS5sb2coJ3ByZXBhcmVSb3dzRm9yRXhwb3J0Li4uJyk7XG4gICAgLy8gdGhpcy5kdW1wRGV0YWlsUm93cygpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoKSB7XG4gICAgICByb3dzLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzaG93RGV0YWlsID0gJyArIHJvdy5zaG93RGV0YWlsICsgJyAnICsgSlNPTi5zdHJpbmdpZnkocm93LmNlbGxzKSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBjZWxsczogcm93LmNlbGxzLFxuICAgICAgICAgIGFjdGlvbnM6IHJvdy5hY3Rpb25zLFxuICAgICAgICAgIHNob3dEZXRhaWw6IHJvdy5zaG93RGV0YWlsLFxuICAgICAgICAgIHN1YlRhYmxlOiByb3cuZGV0YWlsID8gdGhpcy5jb252ZXJ0VG9UYWJsZShyb3cuZGV0YWlsKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc0RpdmlkZXI6IHJvdy5pc0RpdmlkZXIsXG4gICAgICAgICAgZGl2aWRlckNsYXNzTmFtZTogcm93LmRpdmlkZXJDbGFzc05hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnYXRoZXJUYWJsZURhdGEocm93czogT2VwYVRhYmxlUm93W10pOiBPZXBhVGFibGUge1xuICAgIC8vIGNvbnNvbGUubG9nKCdnYXRoZXJUYWJsZURhdGEuLi4nKTtcbiAgICAvLyB0aGlzLmR1bXBEZXRhaWxSb3dzKCk7XG4gICAgY29uc3Qgb2VwYVRhYmxlOiBPZXBhVGFibGUgPSB7fTtcbiAgICBvZXBhVGFibGUuaGVhZGVyUm93cyA9IHRoaXMuaGVhZGVyUm93cztcbiAgICBvZXBhVGFibGUuYWxsRGF0YVJvd3MgPSB0aGlzLnByZXBhcmVSb3dzRm9yRXhwb3J0KHJvd3MpO1xuICAgIG9lcGFUYWJsZS5zaG93QWxsRGV0YWlscyA9IHRoaXMuc2hvd0FsbERldGFpbHM7XG4gICAgb2VwYVRhYmxlLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWU7XG4gICAgb2VwYVRhYmxlLnZpc2libGVDb2x1bW5Db3VudCA9IHRoaXMudmlzaWJsZUNvbHVtbkNvdW50O1xuICAgIG9lcGFUYWJsZS5hbGxDb2x1bW5Db3VudCA9IHRoaXMuYWxsQ29sdW1uQ291bnQ7XG4gICAgcmV0dXJuIG9lcGFUYWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgZHVtcERldGFpbFJvd3MoKSB7XG4gICAgY29uc29sZS5sb2coJ2R1bXBEZXRhaWxSb3dzIC0gVG90YWwgcm93czogJyArIHRoaXMuX2RhdGEubGVuZ3RoKTtcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBpZiAocm93LnNob3dEZXRhaWwpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1NIT1cgREVUQUlMOiAnICsgSlNPTi5zdHJpbmdpZnkocm93LmRhdGFTb3VyY2UpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9UYWJsZSh0ZW1wbGF0ZTogT2VwYVRlbXBsYXRlSW5mbyk6IE9lcGFUYWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IG9lcGFUYWJsZTogT2VwYVRhYmxlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZS5jb21wb25lbnQgPT09IFRhYmxlQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCB0YWJsZTogVGFibGVDb21wb25lbnQgPSBuZXcgVGFibGVDb21wb25lbnQodGhpcy5zYW5pdGl6ZXIsIHRoaXMudGFibGVTZXJ2aWNlLCB0aGlzLnRhYmxlRXhwb3J0U2VydmljZSwgdGhpcy5maWxlVXRpbFNlcnZpY2UpO1xuICAgICAgaWYgKHRlbXBsYXRlLmlucHV0cyAmJiB0ZW1wbGF0ZS5pbnB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0ZW1wbGF0ZS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXQubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgICAgICAgIHRhYmxlLmNvbmZpZyA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2NvbXBsZXhIZWFkZXInKSB7XG4gICAgICAgICAgICB0YWJsZS5jb21wbGV4SGVhZGVyID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5uYW1lID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgdGFibGUuaGVhZGVyID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5uYW1lID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRhYmxlLmRhdGEgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvZXBhVGFibGUgPSB0YWJsZS5nYXRoZXJUYWJsZURhdGEodGFibGUuZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZXBhVGFibGU7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRXhwb3J0VmlzaWJsZU9ubHkoKSB7XG4gICAgdGhpcy5leHBvcnRWaXNpYmxlT25seSA9ICF0aGlzLmV4cG9ydFZpc2libGVPbmx5O1xuICB9XG5cbiAgcHVibGljIGV4cG9ydFRvRXhjZWwoKSB7XG4gICAgY29uc3QgZXhwb3J0VGFibGU6IE9lcGFUYWJsZSA9IHRoaXMuZ2F0aGVyVGFibGVEYXRhKHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPyB0aGlzLnJvd3MgOiB0aGlzLl9kYXRhKTtcblxuICAgIHRoaXMudGFibGVFeHBvcnRTZXJ2aWNlLmRvd25sb2FkRXhjZWwoZXhwb3J0VGFibGUsIHRoaXMuX2NvbmZpZykuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkRmlsZShkYXRhLCAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4gY29uc29sZS5sb2coZXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRUb0hUTUwoKSB7XG4gICAgY29uc3QgZXhwb3J0VGFibGU6IE9lcGFUYWJsZSA9IHRoaXMuZ2F0aGVyVGFibGVEYXRhKHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPyB0aGlzLnJvd3MgOiB0aGlzLl9kYXRhKTtcblxuICAgIC8vIGZvciBub3csIGFsd2F5cyBlbWJlZCBzdWItdGFibGVzICBpbiBIVE1MIHZpZXcuXG4gICAgdGhpcy50YWJsZUV4cG9ydFNlcnZpY2UuZG93bmxvYWRIVE1MKGV4cG9ydFRhYmxlLCB0aGlzLl9jb25maWcpLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgJ3RleHQvaHRtbCcpO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IGNvbnNvbGUubG9nKGVycm9yKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25DdXN0b21CdG5DbGljaygpIHtcbiAgICB0aGlzLmN1c3RvbUJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbn1cbiIsIjwhLS0gVW5oaWRlIHNlbGVjdCBpbnB1dCAtIG9ubHkgdmlzaWJsZSBpZiBvbmUgb3IgbW9yZSBjb2x1bW5zIGFyZSBoaWRkZW4gLS0+XG5cbjxmb3JtICpuZ0lmPVwiaGlkZGVuQ29sdW1ucy5sZW5ndGggPiAwXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+U2hvdyBIaWRkZW4gQ29sdW1uczo8L2xhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgKGNoYW5nZSk9XCJ1bmhpZGVDb2x1bW4oJGFueSgkZXZlbnQpLnRhcmdldC52YWx1ZSlcIiBbaWRdPVwidGFibGVJZCsnX1VuaGlkZUNvbHVtblNlbGVjdCdcIj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkNob29zZSBhIGNvbHVtbjwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb2wgb2YgaGlkZGVuQ29sdW1uc1wiIFt2YWx1ZV09XCJjb2wuaWRcIj57e2NvbC50aXRsZX19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG48IS0tIFRoaXMgaXMgdGhlIHRhYmxlIC0tPlxuPGRpdiBuZ0NsYXNzPVwie3tjb25maWcuZGl2Q2xhc3NOYW1lIHx8ICcnfX1cIiA+XG48dGFibGUgKm5nSWY9XCIhY29uZmlnLmhpZGVUYWJsZVwiIGNsYXNzPVwidGFibGUgZGF0YVRhYmxlXCIgbmdDbGFzcz1cInt7Y29uZmlnLmNsYXNzTmFtZSB8fCAnJ319XCIgcm9sZT1cImdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuXG48IS0tIFRoaXMgaXMgdGhlIHRhYmxlIGhlYWRlciAtLT5cbjx0aGVhZD5cbiAgPCEtLSBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgaGVhZGVyIHJvd3MgLS0+XG4gIDx0ciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlclJvd3M7IGxldCBocj1pbmRleDtcIiByb2xlPVwicm93XCI+XG4gICAgPCEtLSBEZXRhaWxzIGluZGljYXRvciBjb2x1bW4gKGlmIGRhdGEgaGFzIGRldGFpbHMpIC0tPlxuICAgIDx0aCAqbmdJZj1cImRhdGFIYXNEZXRhaWxzICYmIGhyID09PSAwXCIgW3Jvd1NwYW5dPVwiaGVhZGVyUm93cy5sZW5ndGhcIiBjbGFzcz1cImRldGFpbC1pbmRpY2F0b3ItY29sXCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgPGkgKGNsaWNrKT1cInRvZ2dsZUFsbERldGFpbHMoKVwiIFtpZF09XCJ0YWJsZUlkKydfU2hvd0FsbERldGFpbHNMaW5rJ1wiIGNsYXNzPVwiYmlcIiBbbmdDbGFzc109XCJ7J2JpLWNoZXZyb24tZG93bic6IHNob3dBbGxEZXRhaWxzLCAnYmktY2hldnJvbi1yaWdodCc6ICFzaG93QWxsRGV0YWlsc31cIlxuICAgICAgICAgIFt0b29sdGlwXT1cIihzaG93QWxsRGV0YWlscyA/ICdIaWRlJyA6ICdTaG93JykgKyAnIGRldGFpbHMgZm9yIGFsbCByb3dzJ1wiIHBsYWNlbWVudD1cInJpZ2h0XCI+XG4gICAgICAgIDwvaT5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3RoPlxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uIFtuZ0Zvck9mXT1cImhkci5jb2x1bW5zXCIgbGV0LWM9XCJpbmRleFwiPlxuICAgICAgPCEtLSBIZWFkZXIgY2VsbCAtLT5cbiAgICAgIDx0aCAqbmdJZj1cIiFjb2x1bW4uaGlkZGVuXCIgbmdDbGFzcz1cInt7Y29sdW1uLmNsYXNzTmFtZSB8fCAnJ319XCIgW2NvbFNwYW5dPVwiY29sdW1uLmNvbHNwYW4gfHwgMVwiIFtyb3dTcGFuXT1cImNvbHVtbi5yb3dzcGFuIHx8IDFcIj5cbiAgICAgICAgPCEtLSBTZWxlY3QgYWxsIFJvd3MgQ2hlY2tib3ggLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImNvbHVtbi5zZWxlY3RDb2x1bW5cIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJhbGxSb3dzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKVwiPlxuXG4gICAgICAgICAgPCEtLSBIZWFkZXIgY2VsbCB0ZXh0IHdpdGggc29ydCBjYXBhYmlsaXR5IChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICAgIDxzcGFuIFtvZXBhVGFibGVTb3J0aW5nXT1cInRydWVcIiBbY29sdW1uXT1cImNvbHVtblwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIiAoc29ydENoYW5nZWQpPVwib25Tb3J0Q2hhbmdlZCgkZXZlbnQpXCIgW2lkXT1cInRhYmxlSWQrJ19Tb3J0Q29sdW1uTGlua18nK2NvbHVtbi5pZFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uc29ydFwiPjxpIGNsYXNzPVwicHVsbC1sZWZ0IGJpXCIgW25nQ2xhc3NdPVwieydiaS1jaGV2cm9uLWRvd24nOiBjb2x1bW4uc29ydCA9PT0gJ2Rlc2MnLCAnYmktY2hldnJvbi11cCc6IGNvbHVtbi5zb3J0ID09PSAnYXNjJ31cIj48L2k+XG4gICAgICAgICAgICA8c3VwICpuZ0lmPVwiY29sdW1uPy5zb3J0SW5kZXggfHwgMCA+IDFcIj57e2NvbHVtbi5zb3J0SW5kZXh9fTwvc3VwPjwvc3Bhbj5cbiAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPCEtLSBidXR0b24gdG8gYWxsb3cgY29sdW1uIHRvIGJlIGhpZGRlbiAoaWYgc3BlY2lmaWVkKSAtLT5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29sdW1uLmhpZGRlbiA9PT0gZmFsc2VcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCIgYXJpYS1sYWJlbD1cIkhpZGVcIiAoY2xpY2spPVwiaGlkZUNvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgIFtpZF09XCJ0YWJsZUlkKydfSGlkZUNvbHVtbkxpbmsnKydfJytjb2x1bW4uaWRcIj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBjb2x1bW4gZmlsdGVyIChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkgfHwgIW5vRmlsdGVycygpKSAmJiBjb2x1bW4uZmlsdGVyYWJsZVwiID5cbiAgICAgICAgICA8aW5wdXQgW29lcGFUYWJsZUZpbHRlcmluZ109XCJ7IGZpbHRlclN0cmluZzogJycsIGNvbHVtbklkOiBjb2x1bW4uaWQgfVwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiICh0YWJsZUNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgW2lkXT1cInRhYmxlSWQrJ19GaWx0ZXJDb2x1bW5fJytjb2x1bW4uaWRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC90cj5cbjwvdGhlYWQ+XG5cbjwhLS0gVGhpcyBpcyB0aGUgdGFibGUgYm9keSAtLT5cbjx0Ym9keT5cbiAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1yb3cgW25nRm9yT2ZdPVwicm93c1wiIGxldC1yPVwiaW5kZXhcIj5cbiAgICA8IS0tIERhdGEgUm93IC0tPlxuICAgIDx0cj5cbiAgICAgIDx0ZCAqbmdJZj1cImRhdGFIYXNEZXRhaWxzXCI+XG4gICAgICAgIDwhLS0gRGV0YWlsIGljb24gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicm93LnNob3dEZXRhaWwgPT09IHRydWUgfHwgcm93LnNob3dEZXRhaWwgPT09IGZhbHNlXCI+XG4gICAgICAgICAgPGkgKm5nSWY9XCJyb3cuZGV0YWlsSWNvbkNsYXNzTmFtZVwiIFtuZ0NsYXNzXT1cInJvdy5kZXRhaWxJY29uQ2xhc3NOYW1lXCI+PC9pPlxuICAgICAgICAgIDxpIChjbGljayk9XCJ0b2dnbGVSb3dEZXRhaWwocm93KVwiIFtpZF09XCJ0YWJsZUlkKydfU2hvd0RldGFpbExpbmtfJytyXCIgY2xhc3M9XCJiaVwiIFtuZ0NsYXNzXT1cInsnYmktY2hldnJvbi1kb3duJzogcm93LnNob3dEZXRhaWwsICdiaS1jaGV2cm9uLXJpZ2h0JzogIXJvdy5zaG93RGV0YWlsfVwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCIocm93LnNob3dEZXRhaWwgPyAnSGlkZScgOiAnU2hvdycpICsgJyBkZXRhaWxzIGZvciB0aGlzIHJvdydcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICAgIDwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC90ZD5cbiAgICAgIDwhLS0gSWYgcm93IGlzIGEgZGl2aWRlciwgaXQgc3BhbnMgdGhlIHdob2xlIHRhYmxlIC0tPlxuICAgICAgPCEtLSA8dGQgKm5nSWY9XCJyb3cuaXNEaXZpZGVyXCIgW2NvbFNwYW5dPVwidmlzaWJsZUNvbHVtbkNvdW50ICsgKGRhdGFIYXNEZXRhaWxzID8gMSA6IDApXCIgW25nQ2xhc3NdPVwicm93LmRpdmlkZXJDbGFzc05hbWUgfHwgJ29lcGEtdGFibGUtZ3JheSdcIj4mbmJzcDs8L3RkPiAtLT5cbiAgICAgIDwhLS0gRGF0YSBSb3dzIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXJvdy5pc0RpdmlkZXJcIiBuZ0ZvciBsZXQtY29sIFtuZ0Zvck9mXT1cImRhdGFDb2x1bW5zXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICA8dGQgKm5nSWY9XCIhY29sLmhpZGRlbiAmJiAocm93fGNlbGxDb2xzcGFuOmNvbCkgPiAwXCIgbmdDbGFzcz1cInt7cm93fGNlbGxDbGFzc25hbWU6Y29sIHx8ICcnfX1cIiBbY29sU3Bhbl09XCJyb3d8Y2VsbENvbHNwYW46Y29sXCI+XG4gICAgICAgICAgPCEtLSBEYXRhIENlbGwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuYWN0aW9uQ29sdW1uICYmICFjb2wuc2VsZWN0Q29sdW1uICYmICFjb2wuc2luZ2xlU2VsZWN0Q29sdW1uXCI+XG4gICAgICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBwb3BvdmVyIDEgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvdy5wb3BvdmVyXCI+XG4gICAgICAgICAgICAgICAgPGNtbC10ZW1wbGF0ZSBbdGVtcGxhdGVJbmZvXT1cInJvdy5wb3BvdmVyLmNvbnRlbnRcIj48L2NtbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPCEtLSBQb3BvdmVyIDEgaWNvbiAoaWYgc3BlY2lmaWVkKSAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93LnBvcG92ZXIgJiYgaSA9PT0gKHJvdy5wb3BvdmVyQ29sdW1uSW5kZXggfHwgMCkgJiYgcm93LnBvcG92ZXJcIiB0YWJpbmRleD1cIjBcIiBbcG9wb3ZlclRpdGxlXT1cInJvdy5wb3BvdmVyLnRpdGxlXCIgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cInJvdy5wb3BvdmVyLmNvbnRhaW5lckNsYXNzXCIgcGxhY2VtZW50PVwicmlnaHRcIiBbdHJpZ2dlcnNdPVwicm93LnBvcG92ZXIudHJpZ2dlciB8fCAnbW91c2VlbnRlcjptb3VzZWxlYXZlJ1wiPlxuICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJyb3cucG9wb3Zlci5jbGFzc05hbWVcIiBbaWRdPVwidGFibGVJZCsnX1BvcG92ZXJMaW5rXycrclwiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgcG9wb3ZlciAyIC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwb3BvdmVyMlRlbXBsYXRlPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnBvcG92ZXIyXCI+XG4gICAgICAgICAgICAgICAgPGNtbC10ZW1wbGF0ZSBbdGVtcGxhdGVJbmZvXT1cInJvdy5wb3BvdmVyMi5jb250ZW50XCI+PC9jbWwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwhLS0gUG9wb3ZlciAyIGljb24gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT09IChyb3cucG9wb3ZlcjJDb2x1bW5JbmRleCB8fCAwKSAmJiByb3cucG9wb3ZlcjJcIiB0YWJpbmRleD1cIjBcIiBbcG9wb3ZlclRpdGxlXT1cInJvdy5wb3BvdmVyMi50aXRsZVwiIFtwb3BvdmVyXT1cInBvcG92ZXIyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbY29udGFpbmVyQ2xhc3NdPVwicm93LnBvcG92ZXIyLmNvbnRhaW5lckNsYXNzXCIgcGxhY2VtZW50PVwicmlnaHRcIiBbdHJpZ2dlcnNdPVwicm93LnBvcG92ZXIyLnRyaWdnZXIgfHwgJ21vdXNlZW50ZXI6bW91c2VsZWF2ZSdcIj5cbiAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwicm93LnBvcG92ZXIyLmNsYXNzTmFtZVwiIFtpZF09XCJ0YWJsZUlkKydfUG9wb3ZlcjJMaW5rXycrclwiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgcG9wb3ZlciAzIC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwb3BvdmVyM1RlbXBsYXRlPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnBvcG92ZXIzXCI+XG4gICAgICAgICAgICAgICAgPGNtbC10ZW1wbGF0ZSBbdGVtcGxhdGVJbmZvXT1cInJvdy5wb3BvdmVyMy5jb250ZW50XCI+PC9jbWwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwhLS0gUG9wb3ZlciAzIGljb24gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT09IChyb3cucG9wb3ZlcjNDb2x1bW5JbmRleCB8fCAwKSAmJiByb3cucG9wb3ZlcjNcIiB0YWJpbmRleD1cIjBcIiBbcG9wb3ZlclRpdGxlXT1cInJvdy5wb3BvdmVyMy50aXRsZVwiIFtwb3BvdmVyXT1cInBvcG92ZXIzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbY29udGFpbmVyQ2xhc3NdPVwicm93LnBvcG92ZXIzLmNvbnRhaW5lckNsYXNzXCIgcGxhY2VtZW50PVwicmlnaHRcIiBbdHJpZ2dlcnNdPVwicm93LnBvcG92ZXIzLnRyaWdnZXIgfHwgJ21vdXNlZW50ZXI6bW91c2VsZWF2ZSdcIj5cbiAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwicm93LnBvcG92ZXIzLmNsYXNzTmFtZVwiIFtpZF09XCJ0YWJsZUlkKydfUG9wb3ZlcjNMaW5rXycrclwiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyb3d8Y2VsbElubmVySFRNTDpjb2xcIiBbaW5uZXJIVE1MXT1cInJvd3xjZWxsSW5uZXJIVE1MOmNvbFwiPjwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKHJvd3xjZWxsSW5uZXJIVE1MOmNvbClcIj57e3Jvd3xjZWxsVmFsdWU6Y29sfX08L3NwYW4+IC0tPlxuXG4gICAgICAgICAgICA8IS0tIElmIGNvbCBpcyBoeXBlcmxpbmssIGRpc3BsYXkgZGF0YSBhcyBhIGh5cGVybGluayAtLT5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb2wuaHlwZXJsaW5rXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgKGNsaWNrKT1cImNlbGxDbGljayhyb3csIGNvbC5pZClcIiBbaWRdPVwidGFibGVJZCsnX0NlbGxDbGlja18nK3IrJ18nK2lcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKHJvd3xjZWxsSW5uZXJIVE1MOmNvbClcIj5cbiAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJyb3d8Y2VsbEljb25DbGFzc25hbWU6Y29sXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93fGNlbGxJbWdTcmM6Y29sXCI+PGltZyBbc3JjXT1cInJvd3xjZWxsSW1nU3JjOmNvbFwiLz48L3NwYW4+XG4gICAgICAgICAgICAgICAge3tyb3d8Y2VsbFZhbHVlOmNvbH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd3xjZWxsSW5uZXJIVE1MOmNvbFwiIFtpbm5lckhUTUxdPVwicm93fGNlbGxJbm5lckhUTUw6Y29sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwhLS0gSWYgY29sIGlzIE5PVCBoeXBlcmxpbmssIGp1c3QgZGlzcGxheSBkYXRhIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLmh5cGVybGlua1wiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEocm93fGNlbGxJbm5lckhUTUw6Y29sKVwiPlxuICAgICAgICAgICAgICAgIDxpIG5nQ2xhc3M9XCJ7e3Jvd3xjZWxsSWNvbkNsYXNzbmFtZTpjb2wgfHwgJyd9fVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd3xjZWxsSW1nU3JjOmNvbFwiPjxpbWcgW3NyY109XCJyb3d8Y2VsbEltZ1NyYzpjb2xcIi8+PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7cm93fGNlbGxWYWx1ZTpjb2x9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3d8Y2VsbElubmVySFRNTDpjb2xcIiBbaW5uZXJIVE1MXT1cInJvd3xjZWxsSW5uZXJIVE1MOmNvbFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gU2VsZWN0IENlbGwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5zZWxlY3RDb2x1bW5cIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgW2lkXT1cInRhYmxlSWQrJ18nK3JcIiB0eXBlPVwiY2hlY2tib3hcIiBbZGlzYWJsZWRdPVwiIXJvdy5zZWxlY3RhYmxlXCIgW2NoZWNrZWRdPVwicm93LnNlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24ocm93KVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gU2luZ2xlIFNlbGVjdCBDZWxsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuc2luZ2xlU2VsZWN0Q29sdW1uXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGlucHV0IFtpZF09XCJ0YWJsZUlkKydfc2luZ2xlU2VsZWN0XycrclwiIHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCIhcm93LnNlbGVjdGFibGVcIiBbY2hlY2tlZF09XCJyb3cuc2VsZWN0ZWRcIiAoY2hhbmdlKT1cInNpbmdsZVJvd1NlbGVjdGlvbihyb3cpXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9uIENlbGwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5hY3Rpb25Db2x1bW4gJiYgcm93LmFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxvZXBhLWFjdGlvbi1idG4gW2FjdGlvbnNdPVwicm93LmFjdGlvbnNcIiBbZGF0YV09XCJyb3cuZGF0YVNvdXJjZVwiICAoYWN0aW9uQ2xpY2tlZCk9XCJvbkFjdGlvbkNsaWNrKCRldmVudClcIiBbYnRuSWRdPVwidGFibGVJZCsnXycrclwiPjwvb2VwYS1hY3Rpb24tYnRuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3RyPlxuXG4gICAgPCEtLSBEZXRhaWwgUm93IC0tPlxuICAgIDx0ciAqbmdJZj1cInJvdy5zaG93RGV0YWlsXCIgY2xhc3M9XCJ0YWJsZS1pbmZvXCI+XG4gICAgICA8dGQgW2NvbFNwYW5dPVwidmlzaWJsZUNvbHVtbkNvdW50ICsgKGRhdGFIYXNEZXRhaWxzID8gMSA6IDApXCI+XG4gICAgICAgIDxjbWwtdGVtcGxhdGUgW3RlbXBsYXRlSW5mb109XCJyb3cuZGV0YWlsXCI+PC9jbWwtdGVtcGxhdGU+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDx0ciAqbmdJZj1cInRvdGFsUm93XCI+XG4gICAgPHRkICpuZ0lmPVwiZGF0YUhhc0RldGFpbHNcIj5cbiAgICA8L3RkPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC10b3RhbENvbCBbbmdGb3JPZl09XCJkYXRhQ29sdW1uc1wiPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cIiF0b3RhbENvbC5oaWRkZW5cIiBuZ0NsYXNzPVwie3t0b3RhbFJvd3xjZWxsQ2xhc3NuYW1lOnRvdGFsQ29sIHx8ICcnfX1cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICA8c3Bhbj48aSBuZ0NsYXNzPVwie3t0b3RhbFJvd3xjZWxsSWNvbkNsYXNzbmFtZTp0b3RhbENvbCB8fCAnJ319XCI+PC9pPnt7dG90YWxSb3d8Y2VsbFZhbHVlOnRvdGFsQ29sfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC90cj5cbjwvdGJvZHk+XG48L3RhYmxlPlxuPC9kaXY+XG48IS0tIFRhYmxlIGZvb3RlciAtLT5cbjxmb3JtICpuZ0lmPVwiIWNvbmZpZy5oaWRlRm9vdGVyIHx8IChkYXRhICYmIHBhZ2VJbmZvLml0ZW1zUGVyUGFnZSA8IGRhdGEubGVuZ3RoKVwiIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XG48ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgdGV4dC1yaWdodFwiPlxuICA8IS0tIFRhYmxlLXdpZGUgZmlsdGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWNvbmZpZy5oaWRlR2xvYmFsRmlsdGVyXCIgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYWxsIGNvbHVtbnNcIiBbb2VwYVRhYmxlRmlsdGVyaW5nXT1cInsgZmlsdGVyU3RyaW5nOiAnJyB9XCIgW3RhYmxlSWRdPVwidGFibGVJZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCIgKHRhYmxlQ2hhbmdlZCk9XCJvbkZpbHRlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW2lkXT1cInRhYmxlSWQrJ19GaWx0ZXJBbGxDb2x1bW5zSW5wdXQnXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnLnNob3dSb3dDb3VudEluRm9vdGVyICYmIF9kYXRhICYmIF9kYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXNlY29uZGFyeVwiIHN0eWxlPVwiY29sb3I6ICM5OTlcIj57e19kYXRhLmxlbmd0aH19PC9zcGFuPiZuYnNwO3RvdGFsIHJvd3NcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEV4cG9ydCBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiY29uZmlnLmV4cG9ydFRvRXhjZWxcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0xXCIgKGNsaWNrKT1cImV4cG9ydFRvRXhjZWwoKVwiIFtpZF09XCJ0YWJsZUlkKydfRXhwb3J0VG9FeGNlbEJ0bidcIj5FeHBvcnQgdG8gRXhjZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJjb25maWcuZXhwb3J0VG9IVE1MXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMVwiIChjbGljayk9XCJleHBvcnRUb0hUTUwoKVwiIFtpZF09XCJ0YWJsZUlkKydfRXhwb3J0VG9IVE1MQnRuJ1wiPkV4cG9ydCB0byBIVE1MPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21CdG5WaXNpYmxlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTFcIiAoY2xpY2spPVwib25DdXN0b21CdG5DbGljaygpXCIgW2lkXT1cInRhYmxlSWQrJ19DdXN0b21CdG4nXCIgW2Rpc2FibGVkXT1cIiFjdXN0b21CdG5FbmFibGVkXCI+e3tjdXN0b21CdG5MYWJlbH19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcuZXhwb3J0VG9FeGNlbCB8fCBjb25maWcuZXhwb3J0VG9IVE1MXCIgY2xhc3M9XCJjb2wtc20tMTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPHNwYW4+RXhwb3J0IG9ubHkgdmlzaWJsZSBkYXRhOiZuYnNwO1xuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJleHBvcnRWaXNpYmxlT25seVwiIChjbGljayk9XCJ0b2dnbGVFeHBvcnRWaXNpYmxlT25seSgpXCIgaWQ9XCJleHBvcnRWaXNpYmxlT25seUNoZWNrYm94XCIvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gUGFnaW5hdGlvbiAtLT5cbiAgPGRpdiAqbmdJZj1cIiFjb25maWcuZGlzYWJsZVBhZ2luYXRpb25cIiBjbGFzcz1cImNvbC1zbS00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgPHBhZ2luYXRpb24gKm5nSWY9XCJwYWdpbmF0aW9uT25cIiBjbGFzcz1cInBhZ2luYXRpb24tc21cIiBbdG90YWxJdGVtc109XCJwYWdlSW5mby5sZW5ndGhcIiBbaXRlbXNQZXJQYWdlXT1cInBhZ2VJbmZvLml0ZW1zUGVyUGFnZVwiIFttYXhTaXplXT1cInBhZ2VJbmZvLm1heFNpemVcIlxuICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50UGFnZVwiIG5hbWU9XCJjdXJyZW50VGFibGVQYWdlXCJcbiAgICAgIFtib3VuZGFyeUxpbmtzXT1cInRydWVcIiBbcm90YXRlXT1cImZhbHNlXCIgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiIChudW1QYWdlcyk9XCJwYWdlSW5mby5udW1QYWdlcyA9ICRldmVudFwiPlxuICAgIDwvcGFnaW5hdGlvbj5cbiAgICAmbmJzcDtcbiAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVQYWdpbmdhdGlvbigpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtci0xXCI+e3sgcGFnaW5hdGlvbk9uID8gJ1Nob3cgQWxsIFJvd3MnIDogJ1Jlc3RvcmUgUGFnaW5hdGlvbid9fTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPC9mb3JtPiJdfQ==
@@ -51,14 +51,16 @@ import * as i1$4 from '@angular/router';
51
51
  */
52
52
  class OepaAddressService {
53
53
  http;
54
+ ebizRootURL;
54
55
  app;
55
56
  states;
56
57
  countries;
57
58
  statesUrl = '/ebiz/api/v2/references/states';
58
59
  constructor(http, ebizRootURL, app) {
59
60
  this.http = http;
61
+ this.ebizRootURL = ebizRootURL;
60
62
  this.app = app;
61
- this.statesUrl = ebizRootURL + this.statesUrl;
63
+ this.statesUrl = this.ebizRootURL + this.statesUrl;
62
64
  }
63
65
  /**
64
66
  * Retrieve the list of applicable states. If no states have been provided
@@ -92,7 +94,7 @@ class OepaAddressService {
92
94
  if (this.countries) {
93
95
  return new Observable((observer) => observer.next(this.countries));
94
96
  }
95
- const countryUrl = '/ebiz/api/v2/places/countries';
97
+ const countryUrl = this.ebizRootURL + '/ebiz/api/v2/places/countries';
96
98
  const params = {
97
99
  'app': this.app
98
100
  };
@@ -1743,7 +1745,7 @@ class TableComponent {
1743
1745
  else {
1744
1746
  matchFilter.filterString = filter.filterString;
1745
1747
  }
1746
- this.updateTable();
1748
+ this.updateTable(true);
1747
1749
  }
1748
1750
  onSortChanged(column) {
1749
1751
  this.tableService.setSort(this.tableId, column);
@@ -1760,13 +1762,15 @@ class TableComponent {
1760
1762
  this.tableService.setPage(this.tableId, pageEvent.page);
1761
1763
  this.updateTable();
1762
1764
  }
1763
- updateTable() {
1765
+ updateTable(clearSelctedRows = false) {
1764
1766
  const filteredData = this.filterData(this.data);
1765
1767
  const sortedData = this.sortData(filteredData);
1766
1768
  this.rows = this.changePage(sortedData);
1767
1769
  this.pageInfo.length = sortedData.length;
1768
1770
  this.allRowsSelected = false;
1769
- this.rowSelected.emit([]);
1771
+ if (clearSelctedRows) {
1772
+ this.rowSelected.emit([]);
1773
+ }
1770
1774
  this.dataHasDetails = this.checkForDetails(this.rows);
1771
1775
  }
1772
1776
  updatePage() {
@@ -1961,7 +1965,7 @@ class TableComponent {
1961
1965
  }
1962
1966
  });
1963
1967
  this.rows.slice();
1964
- // this.updateTable();
1968
+ this.updateTable();
1965
1969
  this.rowSelected.emit(selectedRows);
1966
1970
  }
1967
1971
  prepareRowsForExport(rows) {
@@ -3115,7 +3119,7 @@ class PTableComponent {
3115
3119
  }
3116
3120
  // need to check for noFilters to send subject
3117
3121
  this.noFilters();
3118
- this.updateTable();
3122
+ this.updateTable(true);
3119
3123
  }
3120
3124
  onSortChanged(column) {
3121
3125
  this.tableService.setSort(this.tableId, column);
@@ -3132,11 +3136,15 @@ class PTableComponent {
3132
3136
  this.tableService.setPage(this.tableId, pageEvent.page);
3133
3137
  this.updateTable();
3134
3138
  }
3135
- updateTable() {
3139
+ updateTable(clearSelctedRows = false) {
3136
3140
  const filteredData = this.filterData(this.data);
3137
3141
  const sortedData = this.sortData(filteredData);
3138
3142
  this.rows = this.changePage(sortedData);
3139
3143
  this.pageInfo.length = sortedData.length;
3144
+ this.allRowsSelected = false;
3145
+ if (clearSelctedRows) {
3146
+ this.rowSelected.emit([]);
3147
+ }
3140
3148
  this.dataHasDetails = this.checkForDetails(this.rows);
3141
3149
  }
3142
3150
  updatePage() {
@@ -3223,7 +3231,12 @@ class PTableComponent {
3223
3231
  toggleAllRowsSelection() {
3224
3232
  const selectedRows = [];
3225
3233
  this.allRowsSelected = !this.allRowsSelected;
3234
+ // deselect all rows
3226
3235
  this._data.forEach((r) => {
3236
+ r.selected = false;
3237
+ });
3238
+ // select only visible rows
3239
+ this.rows.forEach((r) => {
3227
3240
  if (r.selectable) {
3228
3241
  r.selected = this.allRowsSelected;
3229
3242
  }
@@ -3231,7 +3244,8 @@ class PTableComponent {
3231
3244
  selectedRows.push(r);
3232
3245
  }
3233
3246
  });
3234
- this.updateTable();
3247
+ this.rows.slice();
3248
+ // this.updateTable();
3235
3249
  this.rowSelected.emit(selectedRows);
3236
3250
  }
3237
3251
  toggleRowSelection(row) {