@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1317-c → 1.5.1317-e

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.
Files changed (68) hide show
  1. package/assets/i18n/en.json +33 -1
  2. package/assets/i18n/es.json +34 -2
  3. package/assets/styles/main.min.css +1 -1
  4. package/assets/styles/main.min.css.map +1 -1
  5. package/assets/styles/micro.min.css +1 -0
  6. package/assets/styles/micro.min.css.map +1 -0
  7. package/esm2022/assets/i18n/en.json +33 -1
  8. package/esm2022/assets/i18n/es.json +34 -2
  9. package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +2 -2
  10. package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +9 -4
  11. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +13 -8
  12. package/esm2022/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.mjs +3 -3
  13. package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +1 -1
  14. package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +2 -2
  15. package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +2 -2
  16. package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +4 -2
  17. package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +177 -91
  18. package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +2 -2
  19. package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +3 -2
  20. package/esm2022/lib/components/bmb-input/bmb-input.component.mjs +2 -2
  21. package/esm2022/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.mjs +2 -2
  22. package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +2 -2
  23. package/esm2022/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.mjs +2 -2
  24. package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +30 -9
  25. package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +1 -1
  26. package/esm2022/lib/components/bmb-search-input/bmb-search-input.component.mjs +1 -1
  27. package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +5 -7
  28. package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +66 -8
  29. package/esm2022/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.mjs +51 -0
  30. package/esm2022/lib/components/bmb-text-editor/bmb-text-editor.component.mjs +66 -24
  31. package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +11 -17
  32. package/esm2022/lib/components/bmb-value-counter/bmb-value-counter.component.mjs +33 -15
  33. package/esm2022/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.mjs +9 -3
  34. package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +2 -2
  35. package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +6 -3
  36. package/esm2022/lib/services/projection/projection.service.mjs +1 -1
  37. package/esm2022/lib/utils/formControl.mjs +6 -4
  38. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +712 -387
  39. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
  40. package/lib/components/bmb-dropdown/bmb-dropdown.component.d.ts +3 -2
  41. package/lib/components/bmb-dropzone/bmb-dropzone.component.d.ts +39 -20
  42. package/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.d.ts +3 -2
  43. package/lib/components/bmb-progress-bar/bmb-progress-bar.component.d.ts +8 -2
  44. package/lib/components/bmb-tables/bmb-tables.component.d.ts +8 -1
  45. package/lib/components/bmb-text-editor/bmb-text-editor-prompt/bmb-text-editor-prompt.component.d.ts +13 -0
  46. package/lib/components/bmb-text-editor/bmb-text-editor.component.d.ts +10 -4
  47. package/lib/components/bmb-text-link/bmb-text-link.component.d.ts +1 -2
  48. package/lib/components/bmb-value-counter/bmb-value-counter.component.d.ts +10 -4
  49. package/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.d.ts +2 -1
  50. package/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.d.ts +2 -1
  51. package/lib/utils/formControl.d.ts +2 -2
  52. package/package.json +4 -4
  53. package/esm2022/lib/services/calendar.service.mjs +0 -51
  54. package/esm2022/lib/services/index.mjs +0 -3
  55. package/esm2022/lib/services/native-modal.service.mjs +0 -60
  56. package/esm2022/lib/services/notification.service.mjs +0 -84
  57. package/esm2022/lib/services/projection.service.mjs +0 -49
  58. package/esm2022/lib/services/tabs.service.mjs +0 -30
  59. package/esm2022/lib/services/theme.service.mjs +0 -30
  60. package/esm2022/lib/services/toast.service.mjs +0 -24
  61. package/lib/services/calendar.service.d.ts +0 -15
  62. package/lib/services/index.d.ts +0 -2
  63. package/lib/services/native-modal.service.d.ts +0 -18
  64. package/lib/services/notification.service.d.ts +0 -20
  65. package/lib/services/projection.service.d.ts +0 -31
  66. package/lib/services/tabs.service.d.ts +0 -13
  67. package/lib/services/theme.service.d.ts +0 -11
  68. package/lib/services/toast.service.d.ts +0 -9
@@ -65,6 +65,8 @@ export class BmbTablesComponent {
65
65
  this.currentPage = model(0);
66
66
  this.filtersVisible = model(false);
67
67
  this.filtersPosition = input('top');
68
+ this.selectionMode = input('all');
69
+ this.clearSelectionWhenPageChanges = input(false);
68
70
  this.select = new EventEmitter();
69
71
  this.clickedRow = new EventEmitter();
70
72
  this.searchChange = new EventEmitter();
@@ -160,6 +162,62 @@ export class BmbTablesComponent {
160
162
  this.dataSource.paginator = this.paginator;
161
163
  }
162
164
  }
165
+ checkIfSelectionShouldBeCleared() {
166
+ if (this.clearSelectionWhenPageChanges()) {
167
+ this.selection.clear();
168
+ this.onSelect();
169
+ }
170
+ }
171
+ getPageData() {
172
+ const pageIndex = this.paginator?.pageIndex || 0;
173
+ const pageSize = this.paginator?.pageSize || 10;
174
+ const startIndex = pageIndex * pageSize;
175
+ const endIndex = Math.min(startIndex + pageSize, this.dataSource.data.length);
176
+ return this.dataSource.data.slice(startIndex, endIndex);
177
+ }
178
+ handleMasterSelection(event) {
179
+ const isChecked = event.target.checked;
180
+ if (!isChecked) {
181
+ this.selection.clear();
182
+ this.onSelect();
183
+ return;
184
+ }
185
+ if (this.selectionMode() === 'all') {
186
+ this.toggleAllRows();
187
+ }
188
+ if (this.selectionMode() === 'page') {
189
+ const pageData = this.getPageData();
190
+ if (this.isAllSelected()) {
191
+ pageData.forEach((row) => this.selection.deselect(row));
192
+ }
193
+ else {
194
+ pageData.forEach((row) => this.selection.select(row));
195
+ }
196
+ }
197
+ this.onSelect();
198
+ }
199
+ checkIfAllRowsSelected() {
200
+ if (!this.data().length)
201
+ return false;
202
+ if (this.selectionMode() === 'all')
203
+ return this.isAllSelected();
204
+ if (this.selectionMode() === 'page') {
205
+ const pageData = this.getPageData();
206
+ return pageData.every((row) => this.selection.isSelected(row));
207
+ }
208
+ return false;
209
+ }
210
+ checkIfSomeRowsSelected() {
211
+ if (this.selectionMode() === 'all') {
212
+ return this.selection.hasValue() && !this.isAllSelected();
213
+ }
214
+ if (this.selectionMode() === 'page') {
215
+ const pageData = this.getPageData();
216
+ return (pageData.some((row) => this.selection.isSelected(row)) &&
217
+ !this.checkIfAllRowsSelected());
218
+ }
219
+ return false;
220
+ }
163
221
  parseColumns(columns) {
164
222
  this._rawColumns = columns;
165
223
  this.applyColumnsAndConfig(columns);
@@ -247,11 +305,6 @@ export class BmbTablesComponent {
247
305
  this.mouseMove(index);
248
306
  }
249
307
  onSelect() {
250
- const indexSelected = this.dataSource.data.reduce((acc, current, index) => {
251
- if (this.selection.isSelected(current))
252
- acc.push(index);
253
- return acc;
254
- }, []);
255
308
  this.select.emit(this.selection.selected);
256
309
  }
257
310
  setConfig(config) {
@@ -414,6 +467,7 @@ export class BmbTablesComponent {
414
467
  else {
415
468
  this.dataSource.paginator.pageIndex = event.pageIndex;
416
469
  }
470
+ this.checkIfSelectionShouldBeCleared();
417
471
  }
418
472
  get resolvedPageSize() {
419
473
  return this.pageSize() ?? 10;
@@ -431,6 +485,7 @@ export class BmbTablesComponent {
431
485
  pageIndex: 1,
432
486
  pageSize: this.resolvedPageSize,
433
487
  });
488
+ this.checkIfSelectionShouldBeCleared();
434
489
  }
435
490
  }
436
491
  goToPreviousPage() {
@@ -440,6 +495,7 @@ export class BmbTablesComponent {
440
495
  pageIndex: this.currentPage() + 1,
441
496
  pageSize: this.resolvedPageSize,
442
497
  });
498
+ this.checkIfSelectionShouldBeCleared();
443
499
  }
444
500
  }
445
501
  goToNextPage() {
@@ -449,6 +505,7 @@ export class BmbTablesComponent {
449
505
  pageIndex: this.currentPage() + 1,
450
506
  pageSize: this.resolvedPageSize,
451
507
  });
508
+ this.checkIfSelectionShouldBeCleared();
452
509
  }
453
510
  }
454
511
  goToLastPage() {
@@ -458,6 +515,7 @@ export class BmbTablesComponent {
458
515
  pageIndex: last + 1,
459
516
  pageSize: this.resolvedPageSize,
460
517
  });
518
+ this.checkIfSelectionShouldBeCleared();
461
519
  }
462
520
  getTableClasses() {
463
521
  const classList = ['bmb_table'];
@@ -477,7 +535,7 @@ export class BmbTablesComponent {
477
535
  return classList;
478
536
  }
479
537
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbTablesComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BmbTablesComponent, isStandalone: true, selector: "bmb-table", inputs: { showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, actionTemplate: { classPropertyName: "actionTemplate", publicName: "actionTemplate", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, detailTemplate: { classPropertyName: "detailTemplate", publicName: "detailTemplate", isSignal: true, isRequired: false, transformFunction: null }, truncate: { classPropertyName: "truncate", publicName: "truncate", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, initialTableSelection: { classPropertyName: "initialTableSelection", publicName: "initialTableSelection", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, clearSelection: { classPropertyName: "clearSelection", publicName: "clearSelection", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, filtersVisible: { classPropertyName: "filtersVisible", publicName: "filtersVisible", isSignal: true, isRequired: false, transformFunction: null }, filtersPosition: { classPropertyName: "filtersPosition", publicName: "filtersPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clearSelection: "clearSelectionChange", currentPage: "currentPageChange", filtersVisible: "filtersVisibleChange", select: "select", clickedRow: "clickedRow", searchChange: "searchChange", filtersChange: "filtersChange", searchModeChange: "searchModeChange", pageChange: "pageChange" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matTableRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }, { propertyName: "headerCellRef", first: true, predicate: ["headerCellRef"], descendants: true }, { propertyName: "cellRef", first: true, predicate: ["cellRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case ('date') {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n &nbsp;\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap()\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === 'es' ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + 'Template'])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i)\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 62.5625rem){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 62.5625rem){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 43.6875rem){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 48rem){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 75rem){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Regular,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }, { kind: "component", type: BmbCheckboxComponent, selector: "bmb-checkbox", inputs: ["name", "id", "disabled", "required", "value", "label", "labelPosition", "ariaDescribedby", "ariaLabel", "ariaLabelledby", "errorMessage", "helperMessage", "customValidation", "control", "checked", "showError", "indeterminate", "inputId"], outputs: ["controlChange", "checkedChange", "showErrorChange", "indeterminateChange", "inputIdChange", "change"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i3.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: BmbInputComponent, selector: "bmb-input", inputs: ["label", "type", "placeholder", "icon", "appearance", "errorMessage", "helperMessage", "disabled", "isRequired", "name", "spellcheck", "jsonFormat", "heightTextArea", "maxlength", "minlength", "pattern", "size", "max", "min", "id", "value", "autocomplete", "tooltip", "rows", "showMaxTextLength", "additionalAction", "tooltipPosition", "isClearable", "customValidation", "showError", "control"], outputs: ["showErrorChange", "controlChange", "isFocus", "isBlur", "onChange", "onKeyDown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: BmbDateRangeComponent, selector: "bmb-date-range", inputs: ["inputId", "label", "labelStartDate", "labelEndDate", "icon", "invalidFormatErrorMessage", "requiredFieldErrorMessage", "appearance", "disabled", "isRequired", "isClearable", "controlStart", "controlEnd", "dateFormat", "placeholderStartDate", "placeholderEndDate", "stepYearPicker", "name", "multipleRow", "customValidation", "errorMessage"], outputs: ["controlStartChange", "controlEndChange"] }, { kind: "component", type: BmbActionIconComponent, selector: "bmb-action-icon", inputs: ["idElement", "icon", "alt", "iconSize", "isFill", "toggleIconActive", "isToggleActive", "isAccentColor", "dotNotification", "target", "link", "disabled"], outputs: ["isToggleActiveChange", "isAccentColorChange", "buttonPress", "buttonClick"] }], animations: [
538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BmbTablesComponent, isStandalone: true, selector: "bmb-table", inputs: { showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, actionTemplate: { classPropertyName: "actionTemplate", publicName: "actionTemplate", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, detailTemplate: { classPropertyName: "detailTemplate", publicName: "detailTemplate", isSignal: true, isRequired: false, transformFunction: null }, truncate: { classPropertyName: "truncate", publicName: "truncate", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, initialTableSelection: { classPropertyName: "initialTableSelection", publicName: "initialTableSelection", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, clearSelection: { classPropertyName: "clearSelection", publicName: "clearSelection", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, filtersVisible: { classPropertyName: "filtersVisible", publicName: "filtersVisible", isSignal: true, isRequired: false, transformFunction: null }, filtersPosition: { classPropertyName: "filtersPosition", publicName: "filtersPosition", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, clearSelectionWhenPageChanges: { classPropertyName: "clearSelectionWhenPageChanges", publicName: "clearSelectionWhenPageChanges", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clearSelection: "clearSelectionChange", currentPage: "currentPageChange", filtersVisible: "filtersVisibleChange", select: "select", clickedRow: "clickedRow", searchChange: "searchChange", filtersChange: "filtersChange", searchModeChange: "searchModeChange", pageChange: "pageChange" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matTableRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }, { propertyName: "headerCellRef", first: true, predicate: ["headerCellRef"], descendants: true }, { propertyName: "cellRef", first: true, predicate: ["cellRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case ('date') {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"handleMasterSelection($event)\"\n [checked]=\"checkIfAllRowsSelected()\"\n [indeterminate]=\"checkIfSomeRowsSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n &nbsp;\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap()\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === 'es' ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + 'Template'])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i)\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 62.5625rem){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 62.5625rem){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 43.6875rem){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 48rem){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 75rem){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Regular,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }, { kind: "component", type: BmbCheckboxComponent, selector: "bmb-checkbox", inputs: ["name", "id", "disabled", "required", "value", "label", "labelPosition", "ariaDescribedby", "ariaLabel", "ariaLabelledby", "errorMessage", "helperMessage", "customValidation", "control", "checked", "showError", "indeterminate", "inputId"], outputs: ["controlChange", "checkedChange", "showErrorChange", "indeterminateChange", "inputIdChange", "change"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i3.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: BmbInputComponent, selector: "bmb-input", inputs: ["label", "type", "placeholder", "icon", "appearance", "errorMessage", "helperMessage", "disabled", "isRequired", "name", "spellcheck", "jsonFormat", "heightTextArea", "maxlength", "minlength", "pattern", "size", "max", "min", "id", "value", "autocomplete", "tooltip", "rows", "showMaxTextLength", "additionalAction", "tooltipPosition", "isClearable", "customValidation", "showError", "control"], outputs: ["showErrorChange", "controlChange", "isFocus", "isBlur", "onChange", "onKeyDown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: BmbDateRangeComponent, selector: "bmb-date-range", inputs: ["inputId", "label", "labelStartDate", "labelEndDate", "icon", "invalidFormatErrorMessage", "requiredFieldErrorMessage", "appearance", "disabled", "isRequired", "isClearable", "controlStart", "controlEnd", "dateFormat", "placeholderStartDate", "placeholderEndDate", "stepYearPicker", "name", "multipleRow", "customValidation", "errorMessage"], outputs: ["controlStartChange", "controlEndChange"] }, { kind: "component", type: BmbActionIconComponent, selector: "bmb-action-icon", inputs: ["idElement", "icon", "alt", "iconSize", "isFill", "toggleIconActive", "isToggleActive", "isAccentColor", "dotNotification", "target", "link", "disabled"], outputs: ["isToggleActiveChange", "isAccentColorChange", "buttonPress", "buttonClick"] }], animations: [
481
539
  trigger('detailExpand', [
482
540
  state('collapsed,void', style({ height: '0px', minHeight: '0' })),
483
541
  state('expanded', style({ height: '*' })),
@@ -509,7 +567,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
509
567
  state('expanded', style({ height: '*' })),
510
568
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
511
569
  ]),
512
- ], template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case ('date') {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n &nbsp;\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap()\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === 'es' ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + 'Template'])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i)\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 62.5625rem){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 62.5625rem){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 43.6875rem){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 48rem){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 75rem){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Regular,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"] }]
570
+ ], template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case ('date') {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"handleMasterSelection($event)\"\n [checked]=\"checkIfAllRowsSelected()\"\n [indeterminate]=\"checkIfSomeRowsSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n &nbsp;\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap()\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === 'es' ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + 'Template'])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i)\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage()\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 62.5625rem){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 62.5625rem){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 43.6875rem){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 48rem){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 75rem){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Regular,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"] }]
513
571
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }], propDecorators: { select: [{
514
572
  type: Output
515
573
  }], clickedRow: [{
@@ -538,4 +596,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
538
596
  type: HostListener,
539
597
  args: ['window:resize', ['$event']]
540
598
  }] } });
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRhYmxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRhYmxlcy9ibWItdGFibGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGFibGVzL2JtYi10YWJsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixLQUFLLEVBRUwsTUFBTSxFQUVOLEtBQUssRUFFTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsR0FFbkIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRC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Uzt1QkFBQyxlQUFlO2dCQUNKLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFHcEIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgUmVuZGVyZXIyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIGlucHV0LFxuICBPbkNoYW5nZXMsXG4gIGVmZmVjdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgbW9kZWwsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBjb21wdXRlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBNYXRQYWdpbmF0b3IsXG4gIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgUGFnZUV2ZW50LFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtcbiAgTWF0VGFibGVEYXRhU291cmNlLFxuICBNYXRUYWJsZU1vZHVsZSxcbiAgTWF0VGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7XG4gIGFuaW1hdGUsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQm1iSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1pY29uL2JtYi1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1jaGVja2JveC9ibWItY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7XG4gIElCbWJGaWx0ZXJzUG9zaXRpb24sXG4gIFRhYmxlQ29sdW0sXG4gIFRhYmxlQ29uZmlnLFxufSBmcm9tICcuL2JtYi10YWJsZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJtYklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWlucHV0L2JtYi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJtYkRhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1kYXRlLXJhbmdlL2JtYi1kYXRlLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJBY3Rpb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWFjdGlvbi1pY29uL2JtYi1hY3Rpb24taWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ibWItbGF5b3V0L2JtYi1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJtYkxheW91dEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2JtYi1sYXlvdXQvYm1iLWxheW91dC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IHR5cGUgQm1iVGFibGVMYW5nID0gJ2VuJyB8ICdlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JtYi10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQm1iSWNvbkNvbXBvbmVudCxcbiAgICBCbWJDaGVja2JveENvbXBvbmVudCxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgQm1iSW5wdXRDb21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCbWJEYXRlUmFuZ2VDb21wb25lbnQsXG4gICAgQm1iQWN0aW9uSWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2JtYi10YWJsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYm1iLXRhYmxlcy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCx2b2lkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcbiAgICAgICAgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJyksXG4gICAgICApLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBCbWJUYWJsZXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgX3Jhd0NvbHVtbnM6IFRhYmxlQ29sdW1bXSA9IFtdO1xuICBwcml2YXRlIF9yYXdDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuICAgIGlzU2VsZWN0YWJsZTogZmFsc2UsXG4gICAgaXNFeHBhbmRpYmxlOiBmYWxzZSxcbiAgICBpc1BhZ2luYWJsZTogZmFsc2UsXG4gICAgc2hvd0FjdGlvbnM6IGZhbHNlLFxuICB9O1xuXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+ID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICBvcmlnaW5hbERhdGE6IGFueVtdID0gW107XG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgdGFibGVEaXNwbGF5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBbXTtcbiAgZXhwYW5kZWRFbGVtZW50OiBhbnk7XG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIHByZXNzZWQgPSBmYWxzZTtcbiAgY3VycmVudFJlc2l6ZUluZGV4PzogbnVtYmVyO1xuICBzdGFydFg/OiBudW1iZXI7XG4gIHN0YXJ0V2lkdGg/OiBudW1iZXI7XG4gIGlzUmVzaXppbmdSaWdodD86IGJvb2xlYW47XG4gIHJlc2l6YWJsZU1vdXNlbW92ZT86ICgpID0+IHZvaWQ7XG4gIHJlc2l6YWJsZU1vdXNldXA/OiAoKSA9PiB2b2lkO1xuXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHNob3dTZWFyY2ggPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHNob3dGaWx0ZXJzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgdG90YWxJdGVtcyA9IGlucHV0PG51bWJlcj4oMCk7XG4gIGRhdGEgPSBpbnB1dDxhbnlbXT4oW10pO1xuICBjb2x1bW5zID0gaW5wdXQ8VGFibGVDb2x1bVtdPihbXSk7XG4gIGFjdGlvblRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuICBjb25maWcgPSBpbnB1dDxUYWJsZUNvbmZpZz4oKTtcbiAgZGV0YWlsVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XG4gIHRydW5jYXRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICB3cmFwID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIGluaXRpYWxUYWJsZVNlbGVjdGlvbiA9IGlucHV0PG51bWJlcltdPihbXSk7XG4gIGxhbmcgPSBpbnB1dDxCbWJUYWJsZUxhbmc+KCdlcycpO1xuICBjbGVhclNlbGVjdGlvbiA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VydmVyU2lkZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY3VycmVudFBhZ2UgPSBtb2RlbDxudW1iZXI+KDApO1xuICBmaWx0ZXJzVmlzaWJsZSA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcbiAgZmlsdGVyc1Bvc2l0aW9uID0gaW5wdXQ8SUJtYkZpbHRlcnNQb3NpdGlvbj4oJ3RvcCcpO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2xpY2tlZFJvdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGZpbHRlcnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hNb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjwnY2xpZW50JyB8ICdzZXJ2ZXInPigpO1xuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgcGFnZUluZGV4OiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJpdmF0ZSBtYXRUYWJsZVJlZj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2hlYWRlckNlbGxSZWYnKSBoZWFkZXJDZWxsUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2VsbFJlZicpIGNlbGxSZWYhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZXRUYWJsZVJlc2l6ZSh0aGlzLm1hdFRhYmxlUmVmIS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgfVxuXG4gIHBhcnNlZEZpbHRlcnNDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmNvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmlzRmlsdGVyYWJsZSAhPT0gZmFsc2UpLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEl0ZW1zKCk7XG4gICAgICBjb25zdCBzaXplID0gdGhpcy5wYWdlU2l6ZSgpO1xuXG4gICAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdFBhZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IDApIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldCgwKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gbGFzdCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KGxhc3QpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuaW5pdGlhbFRhYmxlU2VsZWN0aW9uKCkgPz8gW107XG4gICAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aCAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFTb3VyY2UuZGF0YVtyb3ddKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcbiAgICAgIHRoaXMucGFyc2VEYXRhKGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIHRoaXMucGFyc2VDb2x1bW5zKGNoYW5nZXNbJ2NvbHVtbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy5zZXRDb25maWcoY2hhbmdlc1snY29uZmlnJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY2xlYXJTZWxlY3Rpb24nXSkge1xuICAgICAgaWYgKHRoaXMuY2xlYXJTZWxlY3Rpb24oKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0LmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gKHZhbHVlIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZUNoYW5nZS5lbWl0KCdzZXJ2ZXInKTtcbiAgICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdChzZWFyY2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlQ2hhbmdlLmVtaXQoJ2NsaWVudCcpO1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBzZWFyY2g7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGRhdGE6IGFueSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBmaWx0ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdGhpcy5fcmF3Q29sdW1ucy5zb21lKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZGF0YVtjb2x1bW4uZGF0YUtleV0gPz8gJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKHNlYXJjaFRleHQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuaW5pdGlhbFRhYmxlU2VsZWN0aW9uKCkgPz8gW107XG4gICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGggJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICBzZWxlY3RlZFJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFTb3VyY2UuZGF0YVtyb3ddKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jhd0NvbmZpZyA9IHRoaXMuY29uZmlnKCkgfHwge307XG4gICAgLy90aGlzLmFwcGx5Q29sdW1uc0FuZENvbmZpZygpO1xuXG4gICAgdGhpcy5wYXJzZURhdGEodGhpcy5kYXRhKCkpO1xuICAgIHRoaXMucGFyc2VDb2x1bW5zKHRoaXMuY29sdW1ucygpKTtcbiAgfVxuXG4gIHBhcnNlRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IGRhdGE7XG5cbiAgICBpZiAoIXRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtW10pIHtcbiAgICB0aGlzLl9yYXdDb2x1bW5zID0gY29sdW1ucztcbiAgICB0aGlzLmFwcGx5Q29sdW1uc0FuZENvbmZpZyhjb2x1bW5zKTtcbiAgICB0aGlzLnNldHVwRHluYW1pY0ZpbHRlcnMoKTtcbiAgfVxuXG4gIHNhbml0aXplSFRNTChsYWJlbDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChsYWJlbCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VGFibGVSZXNpemUodGhpcy5tYXRUYWJsZVJlZiEubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29sdW1uc0FuZENvbmZpZyhuZXdDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBbXSkge1xuICAgIGlmICghbmV3Q29sdW1ucyB8fCAhQXJyYXkuaXNBcnJheShuZXdDb2x1bW5zKSB8fCBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHBhcnNlZE5ld0NvbHVtbnM6IFRhYmxlQ29sdW1bXSA9IG5ld0NvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBsYWJlbEVuOiBjb2wubGFiZWwsXG4gICAgICAgIC4uLmNvbCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBbLi4ucGFyc2VkTmV3Q29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmRlZildO1xuXG4gICAgaWYgKHRoaXMuX3Jhd0NvbmZpZy5pc0V4cGFuZGlibGUpIHtcbiAgICAgIGRpc3BsYXlDb2x1bW5zLnVuc2hpZnQoJ2V4cGFuZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yYXdDb25maWcuaXNTZWxlY3RhYmxlKSB7XG4gICAgICBkaXNwbGF5Q29sdW1ucy51bnNoaWZ0KCdzZWxlY3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmF3Q29uZmlnLnNob3dBY3Rpb25zKSB7XG4gICAgICBkaXNwbGF5Q29sdW1ucy5wdXNoKCdhY3Rpb25zJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmF3Q29sdW1ucyA9IHBhcnNlZE5ld0NvbHVtbnM7XG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSBwYXJzZWROZXdDb2x1bW5zO1xuICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucyA9IGRpc3BsYXlDb2x1bW5zO1xuICAgIHRoaXMudGFibGVDb25maWcgPSB0aGlzLl9yYXdDb25maWc7XG4gIH1cblxuICBzZXRUYWJsZVJlc2l6ZSh0YWJsZVdpZHRoOiBudW1iZXIpIHtcbiAgICBsZXQgdG90V2lkdGggPSAwO1xuICAgIHRoaXMudGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uLndpZHRoIHx8IDUwO1xuICAgICAgdG90V2lkdGggKz0gY29sdW1uLndpZHRoITtcbiAgICB9KTtcbiAgICBjb25zdCBzY2FsZSA9ICh0YWJsZVdpZHRoIC0gNSkgLyB0b3RXaWR0aDtcbiAgfVxuXG4gIG1vdXNlTW92ZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5yZXNpemFibGVNb3VzZW1vdmUgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICdkb2N1bWVudCcsXG4gICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcmVzc2VkICYmIGV2ZW50LmJ1dHRvbnMpIHtcbiAgICAgICAgICBjb25zdCBkeCA9IHRoaXMuaXNSZXNpemluZ1JpZ2h0XG4gICAgICAgICAgICA/IGV2ZW50LnBhZ2VYIC0gdGhpcy5zdGFydFghXG4gICAgICAgICAgICA6IC1ldmVudC5wYWdlWCArIHRoaXMuc3RhcnRYITtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuc3RhcnRXaWR0aCEgKyBkeDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMucmVzaXphYmxlTW91c2V1cCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJlc3NlZCkge1xuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzaXplSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5yZXNpemFibGVNb3VzZW1vdmUhKCk7XG4gICAgICAgIHRoaXMucmVzaXphYmxlTW91c2V1cCEoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrUmVzaXppbmcoZXZlbnQ6IGFueSwgaW5kZXg6IGFueSkge1xuICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRDZWxsRGF0YShpbmRleCk7XG4gICAgdGhpcy5pc1Jlc2l6aW5nUmlnaHQgPVxuICAgICAgaW5kZXggPT09IDAgfHxcbiAgICAgIChNYXRoLmFicyhldmVudC5wYWdlWCAtIGNlbGxEYXRhLnJpZ2h0KSA8IGNlbGxEYXRhLndpZHRoIC8gMiAmJlxuICAgICAgICBpbmRleCAhPT0gdGhpcy50YWJsZUNvbHVtbnMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBnZXRDZWxsRGF0YShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaGVhZGVyUm93ID1cbiAgICAgIHRoaXMubWF0VGFibGVSZWYhLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ucXVlcnlTZWxlY3RvcigndHInKTtcbiAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmNoaWxkcmVuW2luZGV4XTtcbiAgICByZXR1cm4gY2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIG9uUmVzaXplQ29sdW1uKGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmNoZWNrUmVzaXppbmcoZXZlbnQsIGluZGV4KTtcbiAgICB0aGlzLmN1cnJlbnRSZXNpemVJbmRleCA9IGluZGV4O1xuICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWDtcbiAgICB0aGlzLnN0YXJ0V2lkdGggPSBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMubW91c2VNb3ZlKGluZGV4KTtcbiAgfVxuXG4gIG9uU2VsZWN0KCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZWR1Y2UoKGFjYywgY3VycmVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKGN1cnJlbnQpKSBhY2MucHVzaChpbmRleCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHNldENvbmZpZyhjb25maWc6IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IGNvbmZpZztcblxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnLmlzRXhwYW5kaWJsZSkge1xuICAgICAgdGhpcy50YWJsZURpc3BsYXlDb2x1bW5zPy51bnNoaWZ0KCdleHBhbmQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZy5pc1NlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucz8udW5zaGlmdCgnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVDb25maWcuc2hvd0FjdGlvbnMpIHtcbiAgICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucz8ucHVzaCgnYWN0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICB0b2dnbGVBbGxSb3dzKCkge1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIHRoaXMub25TZWxlY3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIHRoaXMub25TZWxlY3QoKTtcbiAgfVxuXG4gIGNoZWNrYm94TGFiZWwocm93PzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuaXNBbGxTZWxlY3RlZCgpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSBhbGxgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgJHtyb3cucG9zaXRpb24gKyAxfWA7XG4gIH1cblxuICBpc0V2ZW4ocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmlzRGV0YWlsKVxuICAgICAgLmZpbmRJbmRleCgocm93LCBpbmRleCkgPT4gaW5kZXggPT09IHJvd0luZGV4KTtcbiAgICByZXR1cm4gZmlsdGVyZWRJbmRleCAlIDIgPT09IDA7XG4gIH1cblxuICBpc09kZChyb3dJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRXZlbihyb3dJbmRleCk7XG4gIH1cblxuICBoYXNFbGxpcHNpcyhlbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBuZXcgRWxlbWVudFJlZihlbGVtZW50KTtcbiAgICByZXR1cm4gKFxuICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID5cbiAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICk7XG4gIH1cblxuICBnZXRQYWdpbmF0aW9uVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5zZXJ2ZXJTaWRlKClcbiAgICAgID8gdGhpcy50b3RhbEl0ZW1zPy4oKSA/PyAwXG4gICAgICA6IHRoaXMucGFnaW5hdG9yPy5sZW5ndGggPz8gMDtcblxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuc2VydmVyU2lkZSgpXG4gICAgICA/IHRoaXMuY3VycmVudFBhZ2U/LigpID8/IDBcbiAgICAgIDogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnNlcnZlclNpZGUoKVxuICAgICAgPyB0aGlzLnBhZ2VTaXplPy4oKSA/PyAxMFxuICAgICAgOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gMTA7XG5cbiAgICBpZiAodG90YWwgPT09IDAgfHwgcGFnZVNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBgMCBkZSAke3RvdGFsfWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VJbmRleCAqIHBhZ2VTaXplICsgMTtcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKChwYWdlSW5kZXggKyAxKSAqIHBhZ2VTaXplLCB0b3RhbCk7XG5cbiAgICByZXR1cm4gYCR7c3RhcnRJbmRleH0gLSAke2VuZEluZGV4fSBkZSAke3RvdGFsfWA7XG4gIH1cblxuICBpc1RlbXBsYXRlUmVmKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jbGlja2VkUm93LmVtaXQocm93KTtcbiAgfVxuXG4gIGdldENlbGxDbGFzc2VzKHJvdzogYW55LCBjb2x1bW5LZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3Qgc2VtYW50aWNUeXBlID0gcm93W2NvbHVtbktleSArICdUeXBlJ107XG4gICAgY29uc3QgY2xhc3NlczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7XG4gICAgICAnYm1iX3RhYmxlLXN0aWNreSc6IGluZGV4ID09PSAwLFxuICAgICAgdHJ1bmNhdGVkOiB0aGlzLnRydW5jYXRlKCksXG4gICAgICB3cmFwcGVkOiB0aGlzLndyYXAoKSxcbiAgICB9O1xuXG4gICAgaWYgKHNlbWFudGljVHlwZSkge1xuICAgICAgY2xhc3Nlc1snYm1iX3RhYmxlLScgKyBzZW1hbnRpY1R5cGVdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIHNldHVwRHluYW1pY0ZpbHRlcnMoKSB7XG4gICAgdGhpcy5fcmF3Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5kYXRhS2V5O1xuICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWluYCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWF4YCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2Zyb21gLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woYCR7a2V5fV90b2AsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2NvbnRhaW5zYCwgbmV3IEZvcm1Db250cm9sKCcnKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFwcGx5RmlsdGVycygpKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICBsZXQgZmlsdGVyZWQgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZSBhcyBhbnk7XG5cbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZS5lbWl0KHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmF3Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5kYXRhS2V5O1xuICAgICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgbWluID0gcGFyc2VJbnQodmFsdWVzW2Ake2tleX1fbWluYF0pIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IG1heCA9IHBhcnNlSW50KHZhbHVlc1tgJHtrZXl9X21heGBdKSB8fCBudWxsO1xuXG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9ICtyb3dba2V5XTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA+PSBtaW4pICYmIChtYXggPT09IG51bGwgfHwgdmFsdWUgPD0gbWF4KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjb2x1bW4uZGF0ZUZvcm1hdCB8fCAneXl5eS1NTS1kZCc7XG4gICAgICAgIGNvbnN0IGZyb20gPSB2YWx1ZXNbYCR7a2V5fV9mcm9tYF1cbiAgICAgICAgICA/IERhdGVUaW1lLmZyb21Gb3JtYXQodmFsdWVzW2Ake2tleX1fZnJvbWBdLCBkYXRlRm9ybWF0KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3QgdG8gPSB2YWx1ZXNbYCR7a2V5fV90b2BdXG4gICAgICAgICAgPyBEYXRlVGltZS5mcm9tRm9ybWF0KHZhbHVlc1tgJHtrZXl9X3RvYF0sIGRhdGVGb3JtYXQpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRlVmFsID0gRGF0ZVRpbWUuZnJvbUZvcm1hdChyb3dba2V5XSwgZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgcmV0dXJuICghZnJvbSB8fCBkYXRlVmFsID49IGZyb20pICYmICghdG8gfHwgZGF0ZVZhbCA8PSB0byk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdmFsdWVzW2Ake2tleX1fY29udGFpbnNgXT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+XG4gICAgICAgICAgICByb3dba2V5XT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWQ7XG4gIH1cblxuICBnZXRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc1Zpc2libGUuc2V0KCF0aGlzLmZpbHRlcnNWaXNpYmxlKCkpO1xuICB9XG5cbiAgb25QYWdlRXZlbnQoZXZlbnQ6IFBhZ2VFdmVudCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KGV2ZW50LnBhZ2VJbmRleCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogZXZlbnQucGFnZUluZGV4ICsgMSxcbiAgICAgICAgcGFnZVNpemU6IGV2ZW50LnBhZ2VTaXplLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IhLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2VTaXplKCkgPz8gMTA7XG4gIH1cblxuICBsYXN0UGFnZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEl0ZW1zKCkgPz8gMDtcbiAgICBjb25zdCBzaXplID0gdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICAgIGNvbnN0IHJlc3VsdCA9IHNpemUgPT09IDAgPyAwIDogTWF0aC5jZWlsKHRvdGFsIC8gc2l6ZSkgLSAxO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCByZXN1bHQpO1xuICB9XG5cbiAgZ29Ub0ZpcnN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMCk7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogMSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpO1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IHRoaXMuY3VycmVudFBhZ2UoKSArIDEsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnJlc29sdmVkUGFnZVNpemUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnb1RvTmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IHRoaXMubGFzdFBhZ2UoKSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQodGhpcy5jdXJyZW50UGFnZSgpICsgMSk7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5jdXJyZW50UGFnZSgpICsgMSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sYXN0UGFnZSgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KGxhc3QpO1xuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2VJbmRleDogbGFzdCArIDEsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5yZXNvbHZlZFBhZ2VTaXplLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VGFibGVDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2JtYl90YWJsZSddO1xuICAgIHN3aXRjaCAodGhpcy5maWx0ZXJzUG9zaXRpb24oKSkge1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlLWZpbHRlcnMtcmlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlLWZpbHRlcnMtYm90dG9tJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdibWJfdGFibGUtZmlsdGVycy1sZWZ0Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZS1maWx0ZXJzLXRvcCcpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NMaXN0O1xuICB9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3NlcygpXCI+XG4gIEBpZiAoc2hvd1NlYXJjaCgpIHx8IGZpbHRlcnNWaXNpYmxlKCkpIHtcbiAgICA8aGVhZGVyIGNsYXNzPVwiYm1iX3RhYmxlLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXJcIj5cbiAgICAgICAgQGlmIChzaG93U2VhcmNoKCkpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbSBibWJfdGFibGUtZmlsdGVyLWl0ZW0tc2VhcmNoXCI+XG4gICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXNlYXJjaFwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQnVzY2FyJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidzZWFyY2gnXCJcbiAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ25vcm1hbCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgID48L2JtYi1pbnB1dD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpbHRlcnNWaXNpYmxlKCkpIHtcbiAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgcGFyc2VkRmlsdGVyc0NvbHVtbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbVwiPlxuICAgICAgICAgICAgICBAc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbS1udW1iZXJcIiBtYXJnaW49XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxibWItaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsICsgJyBtw61uaW1vJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInTcOtbidcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cIidub3JtYWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfbWluJylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5sYWJlbCArICcgbcOheGltbydcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ03DoXgnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX21heCcpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgIDxibWItZGF0ZS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyU3RhcnREYXRlXT1cIidEZXNkZSdcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJFbmREYXRlXT1cIidIYXN0YSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInY2FsZW5kYXJfbW9udGgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ25vcm1hbCdcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvTU0veXl5eSdcIlxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbFN0YXJ0XT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19mcm9tJylcIlxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbEVuZF09XCJnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfdG8nKVwiXG4gICAgICAgICAgICAgICAgICAgIChzdGFydERhdGVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX2Zyb20nKS5zZXRWYWx1ZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChlbmREYXRlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ190bycpLnNldFZhbHVlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGaWx0cmFyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19jb250YWlucycpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlLWNvbnRhaW5lclwiPlxuICAgIEBpZiAoc2hvd0ZpbHRlcnMoKSkge1xuICAgICAgPGJtYi1hY3Rpb24taWNvblxuICAgICAgICBbaWRFbGVtZW50XT1cIicnXCJcbiAgICAgICAgW2ljb25dPVwiJ2ZpbHRlcl9saXN0J1wiXG4gICAgICAgIFtpY29uU2l6ZV09XCIyNFwiXG4gICAgICAgIChidXR0b25DbGljayk9XCJ0b2dnbGVGaWx0ZXJzKClcIlxuICAgICAgPjwvYm1iLWFjdGlvbi1pY29uPlxuICAgIH1cbiAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1jb250YWluZXItdGFibGVcIj5cbiAgICAgIDx0YWJsZVxuICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLWNvbnRlbnRcIlxuICAgICAgICBtdWx0aVRlbXBsYXRlRGF0YVJvd3NcbiAgICAgID5cbiAgICAgICAgPCEtLSBDaGVja2JveCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCIgc3RpY2t5PlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJibWJfdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxibWItY2hlY2tib3hcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVBbGxSb3dzKCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJibWJfdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxibWItY2hlY2tib3hcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsOyBvblNlbGVjdCgpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiY2hlY2tib3hMYWJlbChyb3cpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgb25rZXlwcmVzcz1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRXhwYW5kIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBhbmRcIiBzdGlja3k+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1leHBhbmRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cInJvdyBhY3Rpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImJtYl90YWJsZS1leHBhbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZGV0YWlsXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIHJvd1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID0gZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyBudWxsIDogcm93O1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkRWxlbWVudCA9PT0gcm93ID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZSdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIERpc3BsYXkgQ29sdW1ucyAtLT5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIHRhYmxlQ29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uZGVmXCIgW3N0aWNreV09XCJpID09PSAwXCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICNoZWFkZXJDZWxsXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImhhc0VsbGlwc2lzKGhlYWRlckNlbGwpID8gY29sdW1uLmxhYmVsIDogJydcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImJtYl90b29sdGlwXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdibWJfdGFibGUtc3RpY2t5JzogaSA9PT0gMCxcbiAgICAgICAgICAgICAgICB0cnVuY2F0ZWQ6IHRydW5jYXRlKCksXG4gICAgICAgICAgICAgICAgd3JhcHBlZDogd3JhcCgpXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFTDrXR1bG8gLS0+XG4gICAgICAgICAgICAgIEBpZiAoY29sdW1uLmh0bWxMYWJlbCkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmh0bWxMYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2x1bW46IGNvbHVtbiwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IHRoaXMubGFuZygpID09PSAnZXMnID8gY29sdW1uLmxhYmVsIDogY29sdW1uLmxhYmVsRW4gfX1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gUmVzaXplIEhhbmRsZSAtLT5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1yZXNpemVcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25SZXNpemVDb2x1bW4oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuXG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgYSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgI2NlbGxcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaGFzRWxsaXBzaXMoY2VsbCkgPyByb3dbY29sdW1uLmRhdGFLZXldIDogJydcIlxuICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJibWJfdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzc2VzKHJvdywgY29sdW1uLmRhdGFLZXksIGkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChpc1RlbXBsYXRlUmVmKHJvd1tjb2x1bW4uZGF0YUtleSArICdUZW1wbGF0ZSddKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93W2NvbHVtbi5kYXRhS2V5ICsgJ1RlbXBsYXRlJ11cIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3cgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZGF0YUtleV0/LnByb3BlcnR5TmFtZSB8fCByb3dbY29sdW1uLmRhdGFLZXldIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEFjdGlvbnMgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvbnNcIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImJtYl90YWJsZS1hY3Rpb25zXCI+PC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJibWJfdGFibGUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFjdGlvblRlbXBsYXRlKCkhXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3cgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUm93IHRvIGV4cGFuZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBhbmRlZERldGFpbFwiPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cInRhYmxlRGlzcGxheUNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLWRldGFpbFwiXG4gICAgICAgICAgICAgIFtAZGV0YWlsRXhwYW5kXT1cIlxuICAgICAgICAgICAgICAgIHJvdyA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsVGVtcGxhdGUoKTsgY29udGV4dDogeyByb3c6IHJvdyB9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBSb3dzIC0tPlxuICAgICAgICA8dHJcbiAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xuICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZURpc3BsYXlDb2x1bW5zXCJcbiAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1yb3dcIlxuICAgICAgICA+PC90cj5cblxuICAgICAgICA8dHJcbiAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHRhYmxlRGlzcGxheUNvbHVtbnM7IGxldCBpID0gZGF0YUluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RSb3cocm93KVwiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcm93XCJcbiAgICAgICAgICBbY2xhc3MuYm1iX3RhYmxlLWV4cGFuZGlibGVdPVwiZXhwYW5kZWRFbGVtZW50ID09PSByb3dcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdibWJfdGFibGUtZXZlbic6IGlzRXZlbihpKSxcbiAgICAgICAgICAgICdibWJfdGFibGUtb2RkJzogaXNPZGQoaSlcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnPy5pc0V4cGFuZGlibGVcIj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ107IGxldCBpID0gZGF0YUluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLWRldGFpbHNcIlxuICAgICAgICAgICAgW2NsYXNzLmJtYl90YWJsZS1leHBhbmRlZF09XCJleHBhbmRlZEVsZW1lbnQgPT09IHJvd1wiXG4gICAgICAgICAgPjwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90YWJsZT5cbiAgICA8L3NlY3Rpb24+XG4gICAgPCEtLSBQYWdpbmF0b3IgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlQ29uZmlnPy5pc1BhZ2luYWJsZVwiIHN0aWNreT5cbiAgICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICAgICNwYWdpbmF0b3JcbiAgICAgICAgW2xlbmd0aF09XCJ0b3RhbEl0ZW1zKClcIlxuICAgICAgICBbcGFnZVNpemVdPVwidGhpcy5wYWdlU2l6ZSgpXCJcbiAgICAgICAgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2UpPVwib25QYWdlRXZlbnQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L21hdC1wYWdpbmF0b3I+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci10ZXh0XCI+e3sgZ2V0UGFnaW5hdGlvblRleHQoKSB9fTwvc3Bhbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgc2VydmVyU2lkZSgpID8gY3VycmVudFBhZ2UoKSA9PT0gMCA6ICFwYWdpbmF0b3I/Lmhhc1ByZXZpb3VzUGFnZSgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLXBhZ2luYXRvci1idG4tZGlzYWJsZWQnOiBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID09PSAwXG4gICAgICAgICAgICAgIDogIXBhZ2luYXRvcj8uaGFzUHJldmlvdXNQYWdlKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VydmVyU2lkZSgpID8gZ29Ub0ZpcnN0UGFnZSgpIDogcGFnaW5hdG9yLmZpcnN0UGFnZSgpXCJcbiAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgaWNvbj1cImtleWJvYXJkX2RvdWJsZV9hcnJvd19sZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgIHNlcnZlclNpZGUoKSA/IGN1cnJlbnRQYWdlKCkgPT09IDAgOiAhcGFnaW5hdG9yPy5oYXNQcmV2aW91c1BhZ2UoKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JtYl90YWJsZS1wYWdpbmF0b3ItYnRuLWRpc2FibGVkJzogc2VydmVyU2lkZSgpXG4gICAgICAgICAgICAgID8gY3VycmVudFBhZ2UoKSA9PT0gMFxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc1ByZXZpb3VzUGFnZSgpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlcnZlclNpZGUoKSA/IGdvVG9QcmV2aW91c1BhZ2UoKSA6IHBhZ2luYXRvci5wcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICA8Ym1iLWljb25cbiAgICAgICAgICAgIGljb249XCJrZXlib2FyZF9hcnJvd19sZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgIHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPj0gbGFzdFBhZ2UoKVxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc05leHRQYWdlKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdibWJfdGFibGUtcGFnaW5hdG9yLWJ0bi1kaXNhYmxlZCc6IHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPj0gbGFzdFBhZ2UoKVxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc05leHRQYWdlKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VydmVyU2lkZSgpID8gZ29Ub05leHRQYWdlKCkgOiBwYWdpbmF0b3IubmV4dFBhZ2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICA8Ym1iLWljb25cbiAgICAgICAgICAgIGljb249XCJrZXlib2FyZF9hcnJvd19yaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLXBhZ2luYXRvci1idG4tZGlzYWJsZWQnOiBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlcnZlclNpZGUoKSA/IGdvVG9MYXN0UGFnZSgpIDogcGFnaW5hdG9yLmxhc3RQYWdlKClcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1idG5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfZG91YmxlX2Fycm93X3JpZ2h0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRhYmxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRhYmxlcy9ibWItdGFibGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGFibGVzL2JtYi10YWJsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixLQUFLLEVBRUwsTUFBTSxFQUVOLEtBQUssRUFFTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsR0FFbkIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRC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c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBS2tCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDNEIsV0FBVztzQkFBN0QsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNiLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBR3BCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdJbml0LFxuICBWaWV3Q2hpbGQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEVsZW1lbnRSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIFJlbmRlcmVyMixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBpbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBlZmZlY3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIG1vZGVsLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgY29tcHV0ZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWF0UGFnaW5hdG9yLFxuICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gIFBhZ2VFdmVudCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7XG4gIE1hdFRhYmxlRGF0YVNvdXJjZSxcbiAgTWF0VGFibGVNb2R1bGUsXG4gIE1hdFRhYmxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge1xuICBhbmltYXRlLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9ibWItY2hlY2tib3gvYm1iLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJQm1iRmlsdGVyc1Bvc2l0aW9uLFxuICBUYWJsZUNvbHVtLFxuICBUYWJsZUNvbmZpZyxcbn0gZnJvbSAnLi9ibWItdGFibGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBCbWJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1pbnB1dC9ibWItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCbWJEYXRlUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuLi9ibWItZGF0ZS1yYW5nZS9ibWItZGF0ZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQWN0aW9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1hY3Rpb24taWNvbi9ibWItYWN0aW9uLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuXG5leHBvcnQgdHlwZSBCbWJUYWJsZUxhbmcgPSAnZW4nIHwgJ2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYm1iLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBCbWJJY29uQ29tcG9uZW50LFxuICAgIEJtYkNoZWNrYm94Q29tcG9uZW50LFxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBCbWJJbnB1dENvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEJtYkRhdGVSYW5nZUNvbXBvbmVudCxcbiAgICBCbWJBY3Rpb25JY29uQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYm1iLXRhYmxlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItdGFibGVzLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkLHZvaWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLFxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSxcbiAgICAgICksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJtYlRhYmxlc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBfcmF3Q29sdW1uczogVGFibGVDb2x1bVtdID0gW107XG4gIHByaXZhdGUgX3Jhd0NvbmZpZzogVGFibGVDb25maWcgPSB7XG4gICAgaXNTZWxlY3RhYmxlOiBmYWxzZSxcbiAgICBpc0V4cGFuZGlibGU6IGZhbHNlLFxuICAgIGlzUGFnaW5hYmxlOiBmYWxzZSxcbiAgICBzaG93QWN0aW9uczogZmFsc2UsXG4gIH07XG5cbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT4gPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XG4gIG9yaWdpbmFsRGF0YTogYW55W10gPSBbXTtcbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICB0YWJsZURpc3BsYXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1bXSA9IFtdO1xuICBleHBhbmRlZEVsZW1lbnQ6IGFueTtcbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICB0YWJsZUNvbmZpZzogVGFibGVDb25maWcgfCB1bmRlZmluZWQ7XG5cbiAgcHJlc3NlZCA9IGZhbHNlO1xuICBjdXJyZW50UmVzaXplSW5kZXg/OiBudW1iZXI7XG4gIHN0YXJ0WD86IG51bWJlcjtcbiAgc3RhcnRXaWR0aD86IG51bWJlcjtcbiAgaXNSZXNpemluZ1JpZ2h0PzogYm9vbGVhbjtcbiAgcmVzaXphYmxlTW91c2Vtb3ZlPzogKCkgPT4gdm9pZDtcbiAgcmVzaXphYmxlTW91c2V1cD86ICgpID0+IHZvaWQ7XG5cbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgc2hvd1NlYXJjaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgc2hvd0ZpbHRlcnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHBhZ2VTaXplID0gaW5wdXQ8bnVtYmVyPigpO1xuICB0b3RhbEl0ZW1zID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgZGF0YSA9IGlucHV0PGFueVtdPihbXSk7XG4gIGNvbHVtbnMgPSBpbnB1dDxUYWJsZUNvbHVtW10+KFtdKTtcbiAgYWN0aW9uVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XG4gIGNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICBkZXRhaWxUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcbiAgdHJ1bmNhdGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHdyYXAgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgaW5pdGlhbFRhYmxlU2VsZWN0aW9uID0gaW5wdXQ8bnVtYmVyW10+KFtdKTtcbiAgbGFuZyA9IGlucHV0PEJtYlRhYmxlTGFuZz4oJ2VzJyk7XG4gIGNsZWFyU2VsZWN0aW9uID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZXJ2ZXJTaWRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBjdXJyZW50UGFnZSA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIGZpbHRlcnNWaXNpYmxlID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBmaWx0ZXJzUG9zaXRpb24gPSBpbnB1dDxJQm1iRmlsdGVyc1Bvc2l0aW9uPigndG9wJyk7XG4gIHNlbGVjdGlvbk1vZGUgPSBpbnB1dDwncGFnZScgfCAnYWxsJz4oJ2FsbCcpO1xuICBjbGVhclNlbGVjdGlvbldoZW5QYWdlQ2hhbmdlcyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBAT3V0cHV0KCkgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRSb3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuICBAT3V0cHV0KCkgc2VhcmNoTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2NsaWVudCcgfCAnc2VydmVyJz4oKTtcblxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgbWF0VGFibGVSZWY/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdoZWFkZXJDZWxsUmVmJykgaGVhZGVyQ2VsbFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NlbGxSZWYnKSBjZWxsUmVmITogRWxlbWVudFJlZjtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2V0VGFibGVSZXNpemUodGhpcy5tYXRUYWJsZVJlZiEubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gIH1cblxuICBwYXJzZWRGaWx0ZXJzQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5jb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc0ZpbHRlcmFibGUgIT09IGZhbHNlKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbCA9IHRoaXMudG90YWxJdGVtcygpO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucGFnZVNpemUoKTtcblxuICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RQYWdlKCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMCk7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IGxhc3QpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChsYXN0KTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmluaXRpYWxUYWJsZVNlbGVjdGlvbigpID8/IFtdO1xuICAgICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGggJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhU291cmNlLmRhdGFbcm93XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLnBhcnNlRGF0YShjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLnBhcnNlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuc2V0Q29uZmlnKGNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NsZWFyU2VsZWN0aW9uJ10pIHtcbiAgICAgIGlmICh0aGlzLmNsZWFyU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9ICh2YWx1ZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgICB0aGlzLnNlYXJjaE1vZGVDaGFuZ2UuZW1pdCgnc2VydmVyJyk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ2hhbmdlLmVtaXQoc2VhcmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZUNoYW5nZS5lbWl0KCdjbGllbnQnKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gc2VhcmNoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZmlsdGVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHRoaXMuX3Jhd0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGRhdGFbY29sdW1uLmRhdGFLZXldID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5pbmNsdWRlcyhzZWFyY2hUZXh0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmluaXRpYWxUYWJsZVNlbGVjdGlvbigpID8/IFtdO1xuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoICYmIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhU291cmNlLmRhdGFbcm93XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yYXdDb25maWcgPSB0aGlzLmNvbmZpZygpIHx8IHt9O1xuICAgIC8vdGhpcy5hcHBseUNvbHVtbnNBbmRDb25maWcoKTtcblxuICAgIHRoaXMucGFyc2VEYXRhKHRoaXMuZGF0YSgpKTtcbiAgICB0aGlzLnBhcnNlQ29sdW1ucyh0aGlzLmNvbHVtbnMoKSk7XG4gIH1cblxuICBwYXJzZURhdGEoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBkYXRhO1xuXG4gICAgaWYgKCF0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB9XG4gIH1cblxuICBjaGVja0lmU2VsZWN0aW9uU2hvdWxkQmVDbGVhcmVkKCkge1xuICAgIGlmICh0aGlzLmNsZWFyU2VsZWN0aW9uV2hlblBhZ2VDaGFuZ2VzKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLm9uU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFnZURhdGEoKTogYW55W10ge1xuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCAxMDtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZUluZGV4ICogcGFnZVNpemU7XG4gICAgY29uc3QgZW5kSW5kZXggPSBNYXRoLm1pbihcbiAgICAgIHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSxcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gIH1cblxuICBoYW5kbGVNYXN0ZXJTZWxlY3Rpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuXG4gICAgaWYgKCFpc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLm9uU2VsZWN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSgpID09PSAnYWxsJykge1xuICAgICAgdGhpcy50b2dnbGVBbGxSb3dzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSgpID09PSAncGFnZScpIHtcbiAgICAgIGNvbnN0IHBhZ2VEYXRhID0gdGhpcy5nZXRQYWdlRGF0YSgpO1xuXG4gICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgcGFnZURhdGEuZm9yRWFjaCgocm93KSA9PiB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2VEYXRhLmZvckVhY2goKHJvdykgPT4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25TZWxlY3QoKTtcbiAgfVxuXG4gIGNoZWNrSWZBbGxSb3dzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGEoKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUoKSA9PT0gJ2FsbCcpIHJldHVybiB0aGlzLmlzQWxsU2VsZWN0ZWQoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUoKSA9PT0gJ3BhZ2UnKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZ2V0UGFnZURhdGEoKTtcblxuICAgICAgcmV0dXJuIHBhZ2VEYXRhLmV2ZXJ5KChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2hlY2tJZlNvbWVSb3dzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSgpID09PSAnYWxsJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUoKSA9PT0gJ3BhZ2UnKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZ2V0UGFnZURhdGEoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcGFnZURhdGEuc29tZSgocm93KSA9PiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykpICYmXG4gICAgICAgICF0aGlzLmNoZWNrSWZBbGxSb3dzU2VsZWN0ZWQoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwYXJzZUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bVtdKSB7XG4gICAgdGhpcy5fcmF3Q29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5hcHBseUNvbHVtbnNBbmRDb25maWcoY29sdW1ucyk7XG4gICAgdGhpcy5zZXR1cER5bmFtaWNGaWx0ZXJzKCk7XG4gIH1cblxuICBzYW5pdGl6ZUhUTUwobGFiZWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobGFiZWwpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFRhYmxlUmVzaXplKHRoaXMubWF0VGFibGVSZWYhLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbHVtbnNBbmRDb25maWcobmV3Q29sdW1uczogVGFibGVDb2x1bVtdID0gW10pIHtcbiAgICBpZiAoIW5ld0NvbHVtbnMgfHwgIUFycmF5LmlzQXJyYXkobmV3Q29sdW1ucykgfHwgbmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBwYXJzZWROZXdDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBuZXdDb2x1bW5zLm1hcCgoY29sKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgbGFiZWxFbjogY29sLmxhYmVsLFxuICAgICAgICAuLi5jb2wsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gWy4uLnBhcnNlZE5ld0NvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kZWYpXTtcblxuICAgIGlmICh0aGlzLl9yYXdDb25maWcuaXNFeHBhbmRpYmxlKSB7XG4gICAgICBkaXNwbGF5Q29sdW1ucy51bnNoaWZ0KCdleHBhbmQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmF3Q29uZmlnLmlzU2VsZWN0YWJsZSkge1xuICAgICAgZGlzcGxheUNvbHVtbnMudW5zaGlmdCgnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jhd0NvbmZpZy5zaG93QWN0aW9ucykge1xuICAgICAgZGlzcGxheUNvbHVtbnMucHVzaCgnYWN0aW9ucycpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jhd0NvbHVtbnMgPSBwYXJzZWROZXdDb2x1bW5zO1xuICAgIHRoaXMudGFibGVDb2x1bW5zID0gcGFyc2VkTmV3Q29sdW1ucztcbiAgICB0aGlzLnRhYmxlRGlzcGxheUNvbHVtbnMgPSBkaXNwbGF5Q29sdW1ucztcbiAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5fcmF3Q29uZmlnO1xuICB9XG5cbiAgc2V0VGFibGVSZXNpemUodGFibGVXaWR0aDogbnVtYmVyKSB7XG4gICAgbGV0IHRvdFdpZHRoID0gMDtcbiAgICB0aGlzLnRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi53aWR0aCB8fCA1MDtcbiAgICAgIHRvdFdpZHRoICs9IGNvbHVtbi53aWR0aCE7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NhbGUgPSAodGFibGVXaWR0aCAtIDUpIC8gdG90V2lkdGg7XG4gIH1cblxuICBtb3VzZU1vdmUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucmVzaXphYmxlTW91c2Vtb3ZlID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJlc3NlZCAmJiBldmVudC5idXR0b25zKSB7XG4gICAgICAgICAgY29uc3QgZHggPSB0aGlzLmlzUmVzaXppbmdSaWdodFxuICAgICAgICAgICAgPyBldmVudC5wYWdlWCAtIHRoaXMuc3RhcnRYIVxuICAgICAgICAgICAgOiAtZXZlbnQucGFnZVggKyB0aGlzLnN0YXJ0WCE7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0V2lkdGghICsgZHg7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLnJlc2l6YWJsZU1vdXNldXAgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXNzZWQpIHtcbiAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFJlc2l6ZUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVzaXphYmxlTW91c2Vtb3ZlISgpO1xuICAgICAgICB0aGlzLnJlc2l6YWJsZU1vdXNldXAhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGVja1Jlc2l6aW5nKGV2ZW50OiBhbnksIGluZGV4OiBhbnkpIHtcbiAgICBjb25zdCBjZWxsRGF0YSA9IHRoaXMuZ2V0Q2VsbERhdGEoaW5kZXgpO1xuICAgIHRoaXMuaXNSZXNpemluZ1JpZ2h0ID1cbiAgICAgIGluZGV4ID09PSAwIHx8XG4gICAgICAoTWF0aC5hYnMoZXZlbnQucGFnZVggLSBjZWxsRGF0YS5yaWdodCkgPCBjZWxsRGF0YS53aWR0aCAvIDIgJiZcbiAgICAgICAgaW5kZXggIT09IHRoaXMudGFibGVDb2x1bW5zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0Q2VsbERhdGEoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGhlYWRlclJvdyA9XG4gICAgICB0aGlzLm1hdFRhYmxlUmVmIS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7XG4gICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5jaGlsZHJlbltpbmRleF07XG4gICAgcmV0dXJuIGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBvblJlc2l6ZUNvbHVtbihldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGVja1Jlc2l6aW5nKGV2ZW50LCBpbmRleCk7XG4gICAgdGhpcy5jdXJyZW50UmVzaXplSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5zdGFydFdpZHRoID0gZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1vdXNlTW92ZShpbmRleCk7XG4gIH1cblxuICBvblNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHNldENvbmZpZyhjb25maWc6IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IGNvbmZpZztcblxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnLmlzRXhwYW5kaWJsZSkge1xuICAgICAgdGhpcy50YWJsZURpc3BsYXlDb2x1bW5zPy51bnNoaWZ0KCdleHBhbmQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZy5pc1NlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucz8udW5zaGlmdCgnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVDb25maWcuc2hvd0FjdGlvbnMpIHtcbiAgICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucz8ucHVzaCgnYWN0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICB0b2dnbGVBbGxSb3dzKCkge1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIHRoaXMub25TZWxlY3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIHRoaXMub25TZWxlY3QoKTtcbiAgfVxuXG4gIGNoZWNrYm94TGFiZWwocm93PzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuaXNBbGxTZWxlY3RlZCgpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSBhbGxgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgJHtyb3cucG9zaXRpb24gKyAxfWA7XG4gIH1cblxuICBpc0V2ZW4ocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmlzRGV0YWlsKVxuICAgICAgLmZpbmRJbmRleCgocm93LCBpbmRleCkgPT4gaW5kZXggPT09IHJvd0luZGV4KTtcbiAgICByZXR1cm4gZmlsdGVyZWRJbmRleCAlIDIgPT09IDA7XG4gIH1cblxuICBpc09kZChyb3dJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRXZlbihyb3dJbmRleCk7XG4gIH1cblxuICBoYXNFbGxpcHNpcyhlbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBuZXcgRWxlbWVudFJlZihlbGVtZW50KTtcbiAgICByZXR1cm4gKFxuICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID5cbiAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICk7XG4gIH1cblxuICBnZXRQYWdpbmF0aW9uVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5zZXJ2ZXJTaWRlKClcbiAgICAgID8gdGhpcy50b3RhbEl0ZW1zPy4oKSA/PyAwXG4gICAgICA6IHRoaXMucGFnaW5hdG9yPy5sZW5ndGggPz8gMDtcblxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuc2VydmVyU2lkZSgpXG4gICAgICA/IHRoaXMuY3VycmVudFBhZ2U/LigpID8/IDBcbiAgICAgIDogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnNlcnZlclNpZGUoKVxuICAgICAgPyB0aGlzLnBhZ2VTaXplPy4oKSA/PyAxMFxuICAgICAgOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gMTA7XG5cbiAgICBpZiAodG90YWwgPT09IDAgfHwgcGFnZVNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBgMCBkZSAke3RvdGFsfWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VJbmRleCAqIHBhZ2VTaXplICsgMTtcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKChwYWdlSW5kZXggKyAxKSAqIHBhZ2VTaXplLCB0b3RhbCk7XG5cbiAgICByZXR1cm4gYCR7c3RhcnRJbmRleH0gLSAke2VuZEluZGV4fSBkZSAke3RvdGFsfWA7XG4gIH1cblxuICBpc1RlbXBsYXRlUmVmKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jbGlja2VkUm93LmVtaXQocm93KTtcbiAgfVxuXG4gIGdldENlbGxDbGFzc2VzKHJvdzogYW55LCBjb2x1bW5LZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3Qgc2VtYW50aWNUeXBlID0gcm93W2NvbHVtbktleSArICdUeXBlJ107XG4gICAgY29uc3QgY2xhc3NlczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7XG4gICAgICAnYm1iX3RhYmxlLXN0aWNreSc6IGluZGV4ID09PSAwLFxuICAgICAgdHJ1bmNhdGVkOiB0aGlzLnRydW5jYXRlKCksXG4gICAgICB3cmFwcGVkOiB0aGlzLndyYXAoKSxcbiAgICB9O1xuXG4gICAgaWYgKHNlbWFudGljVHlwZSkge1xuICAgICAgY2xhc3Nlc1snYm1iX3RhYmxlLScgKyBzZW1hbnRpY1R5cGVdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIHNldHVwRHluYW1pY0ZpbHRlcnMoKSB7XG4gICAgdGhpcy5fcmF3Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5kYXRhS2V5O1xuICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWluYCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWF4YCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2Zyb21gLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woYCR7a2V5fV90b2AsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2NvbnRhaW5zYCwgbmV3IEZvcm1Db250cm9sKCcnKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFwcGx5RmlsdGVycygpKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICBsZXQgZmlsdGVyZWQgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZSBhcyBhbnk7XG5cbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZS5lbWl0KHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmF3Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5kYXRhS2V5O1xuICAgICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgbWluID0gcGFyc2VJbnQodmFsdWVzW2Ake2tleX1fbWluYF0pIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IG1heCA9IHBhcnNlSW50KHZhbHVlc1tgJHtrZXl9X21heGBdKSB8fCBudWxsO1xuXG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9ICtyb3dba2V5XTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA+PSBtaW4pICYmIChtYXggPT09IG51bGwgfHwgdmFsdWUgPD0gbWF4KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjb2x1bW4uZGF0ZUZvcm1hdCB8fCAneXl5eS1NTS1kZCc7XG4gICAgICAgIGNvbnN0IGZyb20gPSB2YWx1ZXNbYCR7a2V5fV9mcm9tYF1cbiAgICAgICAgICA/IERhdGVUaW1lLmZyb21Gb3JtYXQodmFsdWVzW2Ake2tleX1fZnJvbWBdLCBkYXRlRm9ybWF0KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3QgdG8gPSB2YWx1ZXNbYCR7a2V5fV90b2BdXG4gICAgICAgICAgPyBEYXRlVGltZS5mcm9tRm9ybWF0KHZhbHVlc1tgJHtrZXl9X3RvYF0sIGRhdGVGb3JtYXQpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRlVmFsID0gRGF0ZVRpbWUuZnJvbUZvcm1hdChyb3dba2V5XSwgZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgcmV0dXJuICghZnJvbSB8fCBkYXRlVmFsID49IGZyb20pICYmICghdG8gfHwgZGF0ZVZhbCA8PSB0byk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdmFsdWVzW2Ake2tleX1fY29udGFpbnNgXT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+XG4gICAgICAgICAgICByb3dba2V5XT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWQ7XG4gIH1cblxuICBnZXRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyc1Zpc2libGUuc2V0KCF0aGlzLmZpbHRlcnNWaXNpYmxlKCkpO1xuICB9XG5cbiAgb25QYWdlRXZlbnQoZXZlbnQ6IFBhZ2VFdmVudCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KGV2ZW50LnBhZ2VJbmRleCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogZXZlbnQucGFnZUluZGV4ICsgMSxcbiAgICAgICAgcGFnZVNpemU6IGV2ZW50LnBhZ2VTaXplLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IhLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmU2VsZWN0aW9uU2hvdWxkQmVDbGVhcmVkKCk7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2VTaXplKCkgPz8gMTA7XG4gIH1cblxuICBsYXN0UGFnZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEl0ZW1zKCkgPz8gMDtcbiAgICBjb25zdCBzaXplID0gdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICAgIGNvbnN0IHJlc3VsdCA9IHNpemUgPT09IDAgPyAwIDogTWF0aC5jZWlsKHRvdGFsIC8gc2l6ZSkgLSAxO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCByZXN1bHQpO1xuICB9XG5cbiAgZ29Ub0ZpcnN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMCk7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogMSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGVja0lmU2VsZWN0aW9uU2hvdWxkQmVDbGVhcmVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub1ByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQodGhpcy5jdXJyZW50UGFnZSgpIC0gMSk7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5jdXJyZW50UGFnZSgpICsgMSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGVja0lmU2VsZWN0aW9uU2hvdWxkQmVDbGVhcmVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub05leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPCB0aGlzLmxhc3RQYWdlKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHRoaXMuY3VycmVudFBhZ2UoKSArIDEpO1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IHRoaXMuY3VycmVudFBhZ2UoKSArIDEsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnJlc29sdmVkUGFnZVNpemUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hlY2tJZlNlbGVjdGlvblNob3VsZEJlQ2xlYXJlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5sYXN0UGFnZSgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KGxhc3QpO1xuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2VJbmRleDogbGFzdCArIDEsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5yZXNvbHZlZFBhZ2VTaXplLFxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tJZlNlbGVjdGlvblNob3VsZEJlQ2xlYXJlZCgpO1xuICB9XG5cbiAgZ2V0VGFibGVDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2JtYl90YWJsZSddO1xuICAgIHN3aXRjaCAodGhpcy5maWx0ZXJzUG9zaXRpb24oKSkge1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlLWZpbHRlcnMtcmlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlLWZpbHRlcnMtYm90dG9tJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdibWJfdGFibGUtZmlsdGVycy1sZWZ0Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZS1maWx0ZXJzLXRvcCcpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NMaXN0O1xuICB9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3NlcygpXCI+XG4gIEBpZiAoc2hvd1NlYXJjaCgpIHx8IGZpbHRlcnNWaXNpYmxlKCkpIHtcbiAgICA8aGVhZGVyIGNsYXNzPVwiYm1iX3RhYmxlLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXJcIj5cbiAgICAgICAgQGlmIChzaG93U2VhcmNoKCkpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbSBibWJfdGFibGUtZmlsdGVyLWl0ZW0tc2VhcmNoXCI+XG4gICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXNlYXJjaFwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQnVzY2FyJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidzZWFyY2gnXCJcbiAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ25vcm1hbCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICAgID48L2JtYi1pbnB1dD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpbHRlcnNWaXNpYmxlKCkpIHtcbiAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgcGFyc2VkRmlsdGVyc0NvbHVtbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbVwiPlxuICAgICAgICAgICAgICBAc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbS1udW1iZXJcIiBtYXJnaW49XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxibWItaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsICsgJyBtw61uaW1vJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInTcOtbidcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cIidub3JtYWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfbWluJylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5sYWJlbCArICcgbcOheGltbydcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ03DoXgnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX21heCcpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgIDxibWItZGF0ZS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyU3RhcnREYXRlXT1cIidEZXNkZSdcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJFbmREYXRlXT1cIidIYXN0YSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInY2FsZW5kYXJfbW9udGgnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ25vcm1hbCdcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvTU0veXl5eSdcIlxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbFN0YXJ0XT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19mcm9tJylcIlxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbEVuZF09XCJnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfdG8nKVwiXG4gICAgICAgICAgICAgICAgICAgIChzdGFydERhdGVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX2Zyb20nKS5zZXRWYWx1ZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChlbmREYXRlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ190bycpLnNldFZhbHVlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGaWx0cmFyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19jb250YWlucycpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlLWNvbnRhaW5lclwiPlxuICAgIEBpZiAoc2hvd0ZpbHRlcnMoKSkge1xuICAgICAgPGJtYi1hY3Rpb24taWNvblxuICAgICAgICBbaWRFbGVtZW50XT1cIicnXCJcbiAgICAgICAgW2ljb25dPVwiJ2ZpbHRlcl9saXN0J1wiXG4gICAgICAgIFtpY29uU2l6ZV09XCIyNFwiXG4gICAgICAgIChidXR0b25DbGljayk9XCJ0b2dnbGVGaWx0ZXJzKClcIlxuICAgICAgPjwvYm1iLWFjdGlvbi1pY29uPlxuICAgIH1cbiAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZS1jb250YWluZXItdGFibGVcIj5cbiAgICAgIDx0YWJsZVxuICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLWNvbnRlbnRcIlxuICAgICAgICBtdWx0aVRlbXBsYXRlRGF0YVJvd3NcbiAgICAgID5cbiAgICAgICAgPCEtLSBDaGVja2JveCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCIgc3RpY2t5PlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJibWJfdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxibWItY2hlY2tib3hcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVNYXN0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrSWZBbGxSb3dzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImNoZWNrSWZTb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImNoZWNrYm94TGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiYm1iX3RhYmxlLWNoZWNrYm94XCI+XG4gICAgICAgICAgICA8Ym1iLWNoZWNrYm94XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0aW9uLnRvZ2dsZShyb3cpIDogbnVsbDsgb25TZWxlY3QoKVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImNoZWNrYm94TGFiZWwocm93KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIG9ua2V5cHJlc3M9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEV4cGFuZCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kXCIgc3RpY2t5PlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtZXhwYW5kXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJyb3cgYWN0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJibWJfdGFibGUtZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmRldGFpbFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImV4cGFuZCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkRWxlbWVudCA9IGV4cGFuZGVkRWxlbWVudCA9PT0gcm93ID8gbnVsbCA6IHJvdztcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Ym1iLWljb25cbiAgICAgICAgICAgICAgICAgIFtpY29uXT1cIlxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZEVsZW1lbnQgPT09IHJvdyA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBEaXNwbGF5IENvbHVtbnMgLS0+XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiB0YWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmRlZlwiIFtzdGlja3ldPVwiaSA9PT0gMFwiPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAjaGVhZGVyQ2VsbFxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJoYXNFbGxpcHNpcyhoZWFkZXJDZWxsKSA/IGNvbHVtbi5sYWJlbCA6ICcnXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJibWJfdG9vbHRpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnYm1iX3RhYmxlLXN0aWNreSc6IGkgPT09IDAsXG4gICAgICAgICAgICAgICAgdHJ1bmNhdGVkOiB0cnVuY2F0ZSgpLFxuICAgICAgICAgICAgICAgIHdyYXBwZWQ6IHdyYXAoKVxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBUw610dWxvIC0tPlxuICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5odG1sTGFiZWwpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5odG1sTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sdW1uOiBjb2x1bW4sIGluZGV4OiBpIH1cIlxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyB0aGlzLmxhbmcoKSA9PT0gJ2VzJyA/IGNvbHVtbi5sYWJlbCA6IGNvbHVtbi5sYWJlbEVuIH19XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIFJlc2l6ZSBIYW5kbGUgLS0+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcmVzaXplXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzaXplQ29sdW1uKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cblxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGEgPSBpbmRleFwiXG4gICAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImhhc0VsbGlwc2lzKGNlbGwpID8gcm93W2NvbHVtbi5kYXRhS2V5XSA6ICcnXCJcbiAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiYm1iX3Rvb2x0aXBcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3Nlcyhyb3csIGNvbHVtbi5kYXRhS2V5LCBpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoaXNUZW1wbGF0ZVJlZihyb3dbY29sdW1uLmRhdGFLZXkgKyAnVGVtcGxhdGUnXSkpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd1tjb2x1bW4uZGF0YUtleSArICdUZW1wbGF0ZSddXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93IH1cIlxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmRhdGFLZXldPy5wcm9wZXJ0eU5hbWUgfHwgcm93W2NvbHVtbi5kYXRhS2V5XSB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCIgc3RpY2t5RW5kPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJibWJfdGFibGUtYWN0aW9uc1wiPjwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiYm1iX3RhYmxlLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3Rpb25UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93IH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFJvdyB0byBleHBhbmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZURpc3BsYXlDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1kZXRhaWxcIlxuICAgICAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJcbiAgICAgICAgICAgICAgICByb3cgPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbFRlbXBsYXRlKCk7IGNvbnRleHQ6IHsgcm93OiByb3cgfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUm93cyAtLT5cbiAgICAgICAgPHRyXG4gICAgICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwidGFibGVEaXNwbGF5Q29sdW1uc1wiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcm93XCJcbiAgICAgICAgPjwvdHI+XG5cbiAgICAgICAgPHRyXG4gICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiB0YWJsZURpc3BsYXlDb2x1bW5zOyBsZXQgaSA9IGRhdGFJbmRleFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Um93KHJvdylcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXJvd1wiXG4gICAgICAgICAgW2NsYXNzLmJtYl90YWJsZS1leHBhbmRpYmxlXT1cImV4cGFuZGVkRWxlbWVudCA9PT0gcm93XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLWV2ZW4nOiBpc0V2ZW4oaSksXG4gICAgICAgICAgICAnYm1iX3RhYmxlLW9kZCc6IGlzT2RkKGkpXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZz8uaXNFeHBhbmRpYmxlXCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddOyBsZXQgaSA9IGRhdGFJbmRleFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1kZXRhaWxzXCJcbiAgICAgICAgICAgIFtjbGFzcy5ibWJfdGFibGUtZXhwYW5kZWRdPVwiZXhwYW5kZWRFbGVtZW50ID09PSByb3dcIlxuICAgICAgICAgID48L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9zZWN0aW9uPlxuICAgIDwhLS0gUGFnaW5hdG9yIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZz8uaXNQYWdpbmFibGVcIiBzdGlja3k+XG4gICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAjcGFnaW5hdG9yXG4gICAgICAgIFtsZW5ndGhdPVwidG90YWxJdGVtcygpXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInRoaXMucGFnZVNpemUoKVwiXG4gICAgICAgIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiXG4gICAgICAgIChwYWdlKT1cIm9uUGFnZUV2ZW50KCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9tYXQtcGFnaW5hdG9yPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItdGV4dFwiPnt7IGdldFBhZ2luYXRpb25UZXh0KCkgfX08L3NwYW4+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgIHNlcnZlclNpZGUoKSA/IGN1cnJlbnRQYWdlKCkgPT09IDAgOiAhcGFnaW5hdG9yPy5oYXNQcmV2aW91c1BhZ2UoKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JtYl90YWJsZS1wYWdpbmF0b3ItYnRuLWRpc2FibGVkJzogc2VydmVyU2lkZSgpXG4gICAgICAgICAgICAgID8gY3VycmVudFBhZ2UoKSA9PT0gMFxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc1ByZXZpb3VzUGFnZSgpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlcnZlclNpZGUoKSA/IGdvVG9GaXJzdFBhZ2UoKSA6IHBhZ2luYXRvci5maXJzdFBhZ2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICA8Ym1iLWljb25cbiAgICAgICAgICAgIGljb249XCJrZXlib2FyZF9kb3VibGVfYXJyb3dfbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlKCkgPyBjdXJyZW50UGFnZSgpID09PSAwIDogIXBhZ2luYXRvcj8uaGFzUHJldmlvdXNQYWdlKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdibWJfdGFibGUtcGFnaW5hdG9yLWJ0bi1kaXNhYmxlZCc6IHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPT09IDBcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNQcmV2aW91c1BhZ2UoKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZXJ2ZXJTaWRlKCkgPyBnb1RvUHJldmlvdXNQYWdlKCkgOiBwYWdpbmF0b3IucHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1idG5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLXBhZ2luYXRvci1idG4tZGlzYWJsZWQnOiBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlcnZlclNpZGUoKSA/IGdvVG9OZXh0UGFnZSgpIDogcGFnaW5hdG9yLm5leHRQYWdlKClcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1idG5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yLWljb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgc2VydmVyU2lkZSgpXG4gICAgICAgICAgICAgID8gY3VycmVudFBhZ2UoKSA+PSBsYXN0UGFnZSgpXG4gICAgICAgICAgICAgIDogIXBhZ2luYXRvcj8uaGFzTmV4dFBhZ2UoKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JtYl90YWJsZS1wYWdpbmF0b3ItYnRuLWRpc2FibGVkJzogc2VydmVyU2lkZSgpXG4gICAgICAgICAgICAgID8gY3VycmVudFBhZ2UoKSA+PSBsYXN0UGFnZSgpXG4gICAgICAgICAgICAgIDogIXBhZ2luYXRvcj8uaGFzTmV4dFBhZ2UoKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZXJ2ZXJTaWRlKCkgPyBnb1RvTGFzdFBhZ2UoKSA6IHBhZ2luYXRvci5sYXN0UGFnZSgpXCJcbiAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgaWNvbj1cImtleWJvYXJkX2RvdWJsZV9hcnJvd19yaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==