@provoly/dashboard 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/assets/svgs/analytic.svg +1 -0
  2. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +5 -4
  3. package/esm2022/import/components/import.component.mjs +22 -10
  4. package/esm2022/import/i18n/en.translations.mjs +3 -1
  5. package/esm2022/import/i18n/fr.translations.mjs +3 -1
  6. package/esm2022/lib/core/access/access.service.mjs +4 -1
  7. package/esm2022/lib/core/i18n/en.translations.mjs +2 -1
  8. package/esm2022/lib/core/i18n/fr.translations.mjs +2 -1
  9. package/esm2022/lib/core/model/public-api.mjs +2 -1
  10. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +1 -1
  11. package/esm2022/lib/core/model/widget-analytic-manifest.interface.mjs +2 -0
  12. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +8 -12
  13. package/esm2022/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.mjs +5 -11
  14. package/esm2022/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.mjs +6 -6
  15. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +5 -2
  16. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +12 -1
  17. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +4 -3
  18. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +4 -2
  19. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -2
  20. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +6 -4
  21. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +17 -9
  22. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +8 -2
  23. package/esm2022/presentation/components/presentation.component.mjs +18 -9
  24. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +42 -87
  25. package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +2 -1
  26. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +3 -5
  27. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +108 -0
  28. package/esm2022/widgets/widget-analytic/i18n/en.translations.mjs +13 -0
  29. package/esm2022/widgets/widget-analytic/i18n/fr.translations.mjs +13 -0
  30. package/esm2022/widgets/widget-analytic/provoly-dashboard-widgets-widget-analytic.mjs +5 -0
  31. package/esm2022/widgets/widget-analytic/public-api.mjs +3 -0
  32. package/esm2022/widgets/widget-analytic/style/css.component.mjs +11 -0
  33. package/esm2022/widgets/widget-analytic/widget-analytic.module.mjs +70 -0
  34. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +2 -2
  35. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +2 -2
  36. package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +2 -2
  37. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +18 -141
  38. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +2 -34
  39. package/esm2022/widgets/widget-map/interaction/tooltip-manager.class.mjs +191 -0
  40. package/esm2022/widgets/widget-map/public-api.mjs +2 -1
  41. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  42. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +2 -2
  43. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +24 -5
  44. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +2 -2
  45. package/fesm2022/provoly-dashboard-admin.mjs +3 -2
  46. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  47. package/fesm2022/provoly-dashboard-import.mjs +25 -9
  48. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  49. package/fesm2022/provoly-dashboard-presentation.mjs +17 -8
  50. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  51. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +45 -91
  52. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  53. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +211 -0
  54. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -0
  55. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1 -1
  56. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  57. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +1 -1
  58. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  59. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +1 -1
  60. package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs.map +1 -1
  61. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +207 -175
  62. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  63. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +23 -4
  66. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  69. package/fesm2022/provoly-dashboard.mjs +71 -43
  70. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  71. package/import/components/import.component.d.ts +4 -2
  72. package/import/i18n/en.translations.d.ts +2 -0
  73. package/import/i18n/fr.translations.d.ts +2 -0
  74. package/lib/core/access/access.service.d.ts +3 -0
  75. package/lib/core/i18n/en.translations.d.ts +1 -0
  76. package/lib/core/i18n/fr.translations.d.ts +1 -0
  77. package/lib/core/model/public-api.d.ts +1 -0
  78. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +3 -12
  79. package/lib/core/model/widget-analytic-manifest.interface.d.ts +6 -0
  80. package/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.d.ts +4 -4
  81. package/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.d.ts +2 -2
  82. package/lib/core/store/data-source/data-source.effects.d.ts +4 -2
  83. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +3 -1
  84. package/lib/dashboard/store/dashboard.actions.d.ts +11 -1
  85. package/lib/dashboard/store/dashboard.effects.d.ts +2 -0
  86. package/lib/dashboard/store/dashboard.reducers.d.ts +3 -1
  87. package/lib/dashboard/store/dashboard.selectors.d.ts +1 -1
  88. package/package.json +37 -31
  89. package/presentation/components/presentation.component.d.ts +5 -3
  90. package/styles/components/_o-pry-admin-classes-customize.scss +1 -0
  91. package/styles-theme/components-theme/_o-widget.theme.scss +0 -14
  92. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +9 -7
  93. package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +1 -0
  94. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +2 -4
  95. package/widgets/widget-analytic/component/widget-analytic.component.d.ts +47 -0
  96. package/widgets/widget-analytic/i18n/en.translations.d.ts +12 -0
  97. package/widgets/widget-analytic/i18n/fr.translations.d.ts +12 -0
  98. package/widgets/widget-analytic/index.d.ts +5 -0
  99. package/widgets/widget-analytic/public-api.d.ts +2 -0
  100. package/widgets/widget-analytic/style/_o-widget-analytic.scss +43 -0
  101. package/widgets/widget-analytic/style/css.component.d.ts +5 -0
  102. package/widgets/widget-analytic/widget-analytic.module.d.ts +19 -0
  103. package/widgets/widget-iframe/component/widget-iframe.component.d.ts +3 -1
  104. package/widgets/widget-map/component/widget-map.component.d.ts +12 -23
  105. package/widgets/widget-map/interaction/interaction-manager.class.d.ts +0 -5
  106. package/widgets/widget-map/interaction/tooltip-manager.class.d.ts +43 -0
  107. package/widgets/widget-map/public-api.d.ts +1 -0
  108. package/widgets/widget-map/style/_m-layer-legend.scss +1 -4
  109. package/widgets/widget-table/component/widget-table.component.d.ts +3 -1
  110. package/widgets/widget-tile/component/widget-tile.component.d.ts +7 -2
@@ -67,7 +67,7 @@ export class WidgetTableComponent extends DataWidgetComponent {
67
67
  this.resultSet$,
68
68
  this.displayHeader$
69
69
  ]).pipe(map(([items, actualPage, size, rs, headerPresent]) => {
70
- const rows = Math.max(1, Math.floor((size.height - HEADER_SIZE - PAGINATION_SIZE - (headerPresent ? WIDGET_HEADER_HEIGHT : 0)) / LINE_SIZE));
70
+ const rows = Math.max(1, Math.floor((size.height - HEADER_SIZE - PAGINATION_SIZE - (headerPresent ? WIDGET_HEADER_HEIGHT.value : 0)) / LINE_SIZE));
71
71
  const total = Object.values(rs.count ?? {}).reduce((p, c) => c.count + p, 0);
72
72
  const loadedPages = Math.ceil(items.length / rows);
73
73
  const page = actualPage <= loadedPages ? actualPage : Math.max(0, loadedPages - 1);
@@ -222,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
222
222
  type: Component,
223
223
  args: [{ selector: 'pry-widget-table', template: "<pry-widget-table-css></pry-widget-table-css>\n<div class=\"o-widget o-widget--table\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n (click)=\"refresh()\"\n >\n <pry-settings\n (click)=\"refresh()\"\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n (triggerClick)=\"this.refresh()\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__actions\">\n <button type=\"button\" class=\"a-btn a-btn--icon-text -link-like\" (click)=\"addColumn()\">\n <pry-icon iconSvg=\"post_add\"></pry-icon>\n {{ '@pry.widget.table.addColumn' | i18n }}\n </button>\n </div>\n\n <div\n *ngFor=\"let columnDef of optionsCopy?.columns ?? []; let i = index\"\n class=\"o-settings__popup__content__fields\"\n (click)=\"refresh()\"\n >\n <div class=\"o-settings__popup__content__fields__head\">\n <div class=\"m-btn-group\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"invertLayers(i, i - 1)\" *ngIf=\"i > 0\">\n <pry-icon iconSvg=\"fleche_haut\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveUp' | i18n }}</span>\n </button>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"invertLayers(i, i + 1)\"\n *ngIf=\"i < (optionsCopy?.columns?.length ?? 0) - 1\"\n >\n <pry-icon iconSvg=\"fleche_bas\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.moveDown' | i18n }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields__content\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_property\">{{ '@pry.widget.table.property' | i18n }}</label>\n <pry-select\n (click)=\"refresh()\"\n (ngModelChange)=\"changePropertyName($event, columnDef)\"\n [items]=\"properties$ | async\"\n [ngModel]=\"columnDef.property\"\n bindLabel=\"label\"\n bindValue=\"property\"\n id=\"table_property\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"table_label\">{{ '@pry.widget.table.label' | i18n }}</label>\n <input\n id=\"table_label\"\n class=\"a-form-field\"\n type=\"text\"\n (input)=\"changeLabel($event, columnDef)\"\n [value]=\"columnDef.label\"\n />\n </div>\n </div>\n <button\n (click)=\"deleteColumn(i)\"\n aria-label=\"delete\"\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n data-func=\"delete\"\n >\n <pry-icon iconSvg=\"delete\" [width]=\"19\" [height]=\"19\"></pry-icon>\n <span>{{ '@pry.widget.table.deleteColumn' | i18n }}</span>\n </button>\n </div>\n </pry-settings>\n </pry-widget-header>\n\n <div class=\"a-table-wrapper\">\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <ng-container *ngIf=\"pagination?.items ?? [] as allObjects\">\n <div\n class=\"no-result\"\n *ngIf=\"pagination.noFillersItems === 0\"\n [style.height.%]=\"pagination.totalPages > 0 ? 80 : 100\"\n >\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.table.empty' | i18n }}</span>\n </div>\n\n <ng-container *ngIf=\"pagination.noFillersItems > 0\">\n <ng-container *ngIf=\"(selectedIds$ | async) ?? [] as selectedIds\">\n <ng-container *ngIf=\"(columns$ | async) ?? [] as columns\">\n <table class=\"a-table\" [attr.aria-label]=\"'@pry.widget.table.description' | i18n\">\n <thead>\n <tr>\n <th *ngIf=\"allObjects?.length ?? 0 > 0\">\n <pry-checkbox [ngModel]=\"areAllSelected\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th *ngFor=\"let column of columns; let i = index\" resizable (click)=\"setOrder(column)\">\n <span>{{ column.label }}</span>\n <ng-container *ngIf=\"quickOrder$ | async as quickOrder\">\n <ng-container *ngIf=\"quickOrder.attribute === column.attributeId\">\n <pry-icon\n [iconSvg]=\"quickOrder.asc ? 'chevron_top' : 'chevron_bottom'\"\n [height]=\"12\"\n [width]=\"12\"\n ></pry-icon>\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let item of allObjects\"\n [class.is-selected]=\"selectedIds.includes(item.id)\"\n [class.context-menu-selected]=\"contextMenuClickedId === item.id && (isContextMenuOpened$ | async)\"\n (contextmenu)=\"contextMenu($event, item)\"\n detachRow\n (selectedValue)=\"selection($event, item)\"\n [class.filler]=\"item.metadata!['__widget-table-filler']\"\n >\n <td class=\"checkbox-wrapper\">\n <pry-checkbox [ngModel]=\"selectedIds.includes(item.id)\"></pry-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" class=\"u-ellipsis\">\n <ng-container *ngIf=\"column.property === 'metadata'\">\n <pry-metadata [item]=\"item\"></pry-metadata>\n </ng-container>\n <ng-container *ngIf=\"column.property === 'oClass'\">\n <p class=\"content-img\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n </p>\n </ng-container>\n <ng-container *ngIf=\"!['metadata', 'oClass'].includes(column.property)\">\n <pry-expand-value [value]=\"item | getValue : column.property | async\"></pry-expand-value>\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"a-table-pagination\" *ngIf=\"pagination.totalPages > 0\">\n <div class=\"a-table-pagination__spacing\">\n <div>\n <button (click)=\"goToPage(0)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"skip-left-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button (click)=\"goToPage(pagination.page - 1)\" [disabled]=\"pagination.page <= 0\">\n <pry-icon iconSvg=\"arrow-left-s-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n <p>{{ pagination.page + 1 }} / {{ pagination.loadedPages }}</p>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.page + 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"arrow-right-s-fill\"></pry-icon>\n </button>\n </div>\n <div>\n <button\n (click)=\"goToPage(pagination.loadedPages - 1)\"\n [disabled]=\"pagination.page + 1 >= pagination.loadedPages\"\n >\n <pry-icon iconSvg=\"skip-right-fill\"></pry-icon>\n </button>\n </div>\n <div class=\"a-table-pagination__spacing__label\">\n ({{\n '@pry.widget.table.remaining' | i18n : { remaining: pagination.totalPages - pagination.loadedPages }\n }})\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</div>\n" }]
224
224
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }] });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBSVQsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBZ0J6RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBdUIzRCxZQUFZLEtBQWlCLEVBQUUsRUFBYyxFQUFVLEdBQXNCO1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFEb0MsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqQjdFLFVBQUssR0FBRyxL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QUFVO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWM7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs4R0FoU1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsK0VDMUNqQyxrblNBb05BOzsyRkQxS2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgYmFzZUl0ZW1Qcm9wZXJ0aWVzLFxuICBDbGFzcyxcbiAgQ2xhc3NBY3Rpb25zLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBDb250ZXh0TWVudUFjdGlvbnMsXG4gIENvbnRleHRNZW51U2VsZWN0b3JzLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIE9yZGVyVmFsdWUsXG4gIFJlc3VsdE9yZGVyLFxuICBUYWJsZVdpZGdldE9wdGlvbnMsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBhdWRpdFRpbWUsIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgcm93czogbnVtYmVyO1xuICBpdGVtczogSXRlbVtdO1xuICBsb2FkZWQ6IG51bWJlcjtcbiAgbG9hZGVkUGFnZXM6IG51bWJlcjtcbiAgbm9GaWxsZXJzSXRlbXM6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtdGFibGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCB7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPFRhYmxlV2lkZ2V0T3B0aW9ucz47XG4gIGNvbHVtbnMkOiBPYnNlcnZhYmxlPENvbHVtbkRlZmluaXRpb25bXT47XG4gIG9wdGlvbnNDb3B5PzogVGFibGVXaWRnZXRPcHRpb25zO1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBzZWxlY3RlZElkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBBcnJheSA9IEFycmF5O1xuICBjdXJyZW50Q2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdID0gW107XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIHByaXZhdGUgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIHByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPHsgbGFiZWw6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10+O1xuICBhbGxTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFyZUFsbFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbElkczogc3RyaW5nW10gPSBbXTtcbiAgY29udGV4dE1lbnVDbGlja2VkSWQ6IHN0cmluZyA9ICcnO1xuICBpc0NvbnRleHRNZW51T3BlbmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcXVpY2tPcmRlciQ6IE9ic2VydmFibGU8UmVzdWx0T3JkZXIgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgYWN0dWFsUGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHBhZ2luYXRpb24kOiBPYnNlcnZhYmxlPFBhZ2luYXRpb24+O1xuICBpc09wZW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihzdG9yZTogU3RvcmU8YW55PiwgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG5cbiAgICB0aGlzLmZpZWxkcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyldKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoW3Jlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzXSkgPT5cbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5JdGVtVXRpbHMuZ2V0RmllbGRzRm9yQ2xhc3NlcyhPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpLCBjbGFzc2VzLCBmaWVsZHMpLFxuICAgICAgICAgICAgLi4uYmFzZUl0ZW1Qcm9wZXJ0aWVzLm1hcCgocCkgPT4gKHsgbmFtZTogcCwgaWQ6IHAgfSBhcyBGaWVsZCkpXG4gICAgICAgICAgXSBhcyBGaWVsZFtdXG4gICAgICApLFxuICAgICAgbWFwKChmaWVsZHMpID0+IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXKSlcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykpLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy50YWJsZURlZmF1bHRBdHRyaWJ1dGVzRGVmaW5pdGlvbnMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBkZWZzXSkgPT4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY29sdW1ucyB8fCBvcHRpb25zLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVzRnJvbVJzKHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBkZWZzKTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVQcm9wcyA9IFsuLi5uZXcgU2V0KGF0dHJpYnV0ZXMubWFwKCh7IG5hbWUsIHRlY2huaWNhbE5hbWUgfSkgPT4gKHsgbmFtZSwgdGVjaG5pY2FsTmFtZSB9KSkpXTtcblxuICAgICAgICAgIG9wdGlvbnMuY29sdW1ucyA9IHVuaXF1ZVByb3BzLm1hcCgocHJvcGVydHkpID0+ICh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkudGVjaG5pY2FsTmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlSWQ6IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBwcm9wZXJ0eS50ZWNobmljYWxOYW1lKT8uaWRcbiAgICAgICAgICB9KSkgYXMgQ29sdW1uRGVmaW5pdGlvbltdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgLi4uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpIGFzIFRhYmxlV2lkZ2V0T3B0aW9ucykgfTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsSXRlbXMkLnN1YnNjcmliZSgoYWxsT2JqZWN0cykgPT4gKHRoaXMuYWxsSWRzID0gYWxsT2JqZWN0cy5tYXAoKG9iaikgPT4gb2JqLmlkKSkpKTtcblxuICAgIGNvbnN0IEhFQURFUl9TSVpFID0gMzA7XG4gICAgY29uc3QgUEFHSU5BVElPTl9TSVpFID0gMzU7XG4gICAgY29uc3QgTElORV9TSVpFID0gMzA7XG5cbiAgICB0aGlzLnBhZ2luYXRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zJCxcbiAgICAgIHRoaXMuYWN0dWFsUGFnZSQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgYWN0dWFsUGFnZSwgc2l6ZSwgcnMsIGhlYWRlclByZXNlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLm1heChcbiAgICAgICAgICAxLFxuICAgICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAoc2l6ZS5oZWlnaHQgLSBIRUFERVJfU0laRSAtIFBBR0lOQVRJT05fU0laRSAtIChoZWFkZXJQcmVzZW50ID8gV0lER0VUX0hFQURFUl9IRUlHSFQgOiAwKSkgLyBMSU5FX1NJWkVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhycy5jb3VudCA/PyB7fSkucmVkdWNlKChwLCBjKSA9PiBjLmNvdW50ICsgcCwgMCk7XG4gICAgICAgIGNvbnN0IGxvYWRlZFBhZ2VzID0gTWF0aC5jZWlsKGl0ZW1zLmxlbmd0aCAvIHJvd3MpO1xuICAgICAgICBjb25zdCBwYWdlID0gYWN0dWFsUGFnZSA8PSBsb2FkZWRQYWdlcyA/IGFjdHVhbFBhZ2UgOiBNYXRoLm1heCgwLCBsb2FkZWRQYWdlcyAtIDEpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigoXywgaWR4KSA9PiBpZHggPj0gcm93cyAqIHBhZ2UgJiYgaWR4IDwgcm93cyAqIChwYWdlICsgMSkpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFdpdGhGaWxsZXJzID1cbiAgICAgICAgICBmaWx0ZXJlZC5sZW5ndGggPT09IHJvd3NcbiAgICAgICAgICAgID8gZmlsdGVyZWRcbiAgICAgICAgICAgIDogZmlsdGVyZWQuY29uY2F0KFxuICAgICAgICAgICAgICAgIG5ldyBBcnJheShyb3dzIC0gZmlsdGVyZWQubGVuZ3RoKS5maWxsKHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7ICdfX3dpZGdldC10YWJsZS1maWxsZXInOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9IGFzIHVua25vd24gYXMgSXRlbSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3dzLFxuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgaXRlbXM6IGZpbHRlcmVkV2l0aEZpbGxlcnMsXG4gICAgICAgICAgbm9GaWxsZXJzSXRlbXM6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiBNYXRoLmNlaWwodG90YWwgLyByb3dzKSxcbiAgICAgICAgICBsb2FkZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICBsb2FkZWRQYWdlc1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBhZ2luYXRpb24kLnBpcGUoYXVkaXRUaW1lKDIwMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSkpO1xuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT4gb3B0aW9ucz8uY29sdW1ucyA/PyBbXSksXG4gICAgICB0YXAoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2goKSwgNTAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5pc0NvbnRleHRNZW51T3BlbmVkJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbnRleHRNZW51U2VsZWN0b3JzLm9wZW5lZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5yZXN1bHRTZXQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigocnMpID0+ICEhcnMpLFxuICAgICAgICAgIG1hcCgocnMpID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjbGFzc2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENsYXNzZXMubGVuZ3RoID4gMCAmJiAhZXF1YWwodGhpcy5jdXJyZW50Q2xhc3NlcywgY2xhc3NlcykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zQ29weSkge1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zO1xuICAgICAgICAgICAgdGhpcy5lbWl0TWFuaWZlc3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuc2VsZWN0ZWRJZHMkLnN1YnNjcmliZSgoc2VsZWN0ZWRJZHMpID0+IHRoaXMuc2VsZWN0ZWRJZHMgPT09IHNlbGVjdGVkSWRzKSk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKCkpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3JzLCBjbGFzc2VzLCBmaWVsZHNdKSA9PiBbXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHJzLml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+IChjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkgPz8geyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAubWFwKChhdHRyKSA9PiAoeyB0ZWNobmljYWxOYW1lOiBhdHRyLnRlY2huaWNhbE5hbWUsIG5hbWU6IGF0dHIubmFtZSB9KSlcbiAgICAgIF0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ZWRQcm9wcyA9IFsuLi5wcm9wc107XG4gICAgICAgIHNvcnRlZFByb3BzLnNvcnQoKHBBLCBwQikgPT4gcEEubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUocEIubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBzb3J0ZWRQcm9wcztcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4gcHJvcHMubWFwKChwcm9wKSA9PiAoeyBsYWJlbDogcHJvcC5uYW1lLCBwcm9wZXJ0eTogcHJvcC50ZWNobmljYWxOYW1lIH0pKSksXG4gICAgICB0YXAoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2goKSwgNTAwKSlcbiAgICApO1xuXG4gICAgdGhpcy5hbGxTZWxlY3RlZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlbGVjdGVkSWRzJCwgdGhpcy5hbGxJdGVtcyRdKS5waXBlKFxuICAgICAgbWFwKChbc2VsZWN0ZWRJZHMsIGFsbE9iamVjdHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbElkcyA9IGFsbE9iamVjdHMubWFwKChvYmplY3QpID0+IG9iamVjdC5pZCk7XG4gICAgICAgIHJldHVybiAhYWxsSWRzLmZpbmQoKGlkKSA9PiAhc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaWQpKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKChhbGxTZWxlY3RlZCkgPT4gKHRoaXMuYXJlQWxsU2VsZWN0ZWQgPSBhbGxTZWxlY3RlZCkpXG4gICAgKTtcblxuICAgIHRoaXMucXVpY2tPcmRlciQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucXVpY2tPcmRlciksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgbWFwKChbb3JkZXIsIG5xc10pID0+IChucXMubGVuZ3RoID09PSAxID8gb3JkZXJbbnFzWzBdXSA6IHVuZGVmaW5lZCkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fcmVmcmVzaCQucGlwZShkZWxheSgxMDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKSk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgY29sdW1uczogW10gfTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zPy5wdXNoKHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycgfSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eU5hbWUoJGV2ZW50OiBhbnksIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIGNvbHVtbkRlZi5wcm9wZXJ0eSA9ICRldmVudDtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGNoYW5nZUxhYmVsKCRldmVudDogRXZlbnQsIGNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbikge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBuZXdMYWJlbCA9ICRldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIGlmIChjb2x1bW5EZWYubGFiZWwgIT09IG5ld0xhYmVsKSB7XG4gICAgICBjb2x1bW5EZWYubGFiZWwgPSBuZXdMYWJlbDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihpOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5Py5jb2x1bW5zPy5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBzZWxlY3Rpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiBpdGVtLmlkLCBjdW11bGF0aXZlOiAhJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBjb250ZXh0TWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICBpZiAodGhpcy5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgQ29udGV4dE1lbnVBY3Rpb25zLm9wZW4oe1xuICAgICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgICBjbGllbnRYOiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICBjbGllbnRZOiAkZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICBmcm9tOiAndGFibGUnLFxuICAgICAgICAgIGFsbG93T2JqZWN0Q3JlYXRpb246IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb250ZXh0TWVudUNsaWNrZWRJZCA9IGl0ZW0uaWQ7XG4gICAgfVxuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zKSB7XG4gICAgICBjb25zdCB0bXAgPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4XTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1uc1tpZHhdID0gdG1wO1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IHRoaXMuYWxsSWRzIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdE1hbnkoeyBpZHM6IFtdIH0pKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcmRlcihjb2x1bW46IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICB0aGlzLmRhdGFzb3VyY2VJZHMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmlsdGVyKChucXMpID0+IG5xcy5sZW5ndGggPT09IDEpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnF1aWNrT3JkZXIkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW25xcywgYWN0dWFsT3JkZXJdKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5xdWlja09yZGVyKHtcbiAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogbnFzWzBdLFxuICAgICAgICAgICAgYXR0cmlidXRlOiBjb2x1bW4uYXR0cmlidXRlSWQgPz8gJycsXG4gICAgICAgICAgICBhc2M6IHRoaXMubmV4dE9yZGVyKGNvbHVtbiwgYWN0dWFsT3JkZXIpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0T3JkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uLCBhY3R1YWxPcmRlcjogUmVzdWx0T3JkZXIgfCB1bmRlZmluZWQpOiBPcmRlclZhbHVlIHtcbiAgICBpZiAoIWFjdHVhbE9yZGVyIHx8IGFjdHVhbE9yZGVyLmF0dHJpYnV0ZSAhPT0gY29sdW1uLmF0dHJpYnV0ZUlkKSB7XG4gICAgICByZXR1cm4gJ2FzYyc7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxPcmRlci5hc2MgPT09ICdhc2MnID8gJ2Rlc2MnIDogYWN0dWFsT3JkZXIuYXNjID09PSAnZGVzYycgPyB1bmRlZmluZWQgOiAnYXNjJztcbiAgfVxuXG4gIHRyYWNrT2JqZWN0cyhpbmRleDogbnVtYmVyLCBpdGVtOiBJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBnb1RvUGFnZShudW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMuYWN0dWFsUGFnZSQubmV4dChudW1iZXIpO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC10YWJsZS1jc3M+PC9wcnktd2lkZ2V0LXRhYmxlLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tdGFibGVcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICAodHJpZ2dlckNsaWNrKT1cInRoaXMucmVmcmVzaCgpXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCIgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJwb3N0X2FkZFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmFkZENvbHVtbicgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiBvcHRpb25zQ29weT8uY29sdW1ucyA/PyBbXTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc1wiXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19faGVhZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpIC0gMSlcIiAqbmdJZj1cImkgPiAwXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVVcCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgKyAxKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA8IChvcHRpb25zQ29weT8uY29sdW1ucz8ubGVuZ3RoID8/IDApIC0gMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS5hY3Rpb24ubW92ZURvd24nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkc19fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0YWJsZV9wcm9wZXJ0eVwiPnt7ICdAcHJ5LndpZGdldC50YWJsZS5wcm9wZXJ0eScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcm9wZXJ0eU5hbWUoJGV2ZW50LCBjb2x1bW5EZWYpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cInByb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb2x1bW5EZWYucHJvcGVydHlcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInByb3BlcnR5XCJcbiAgICAgICAgICAgICAgaWQ9XCJ0YWJsZV9wcm9wZXJ0eVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInRhYmxlX2xhYmVsXCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmxhYmVsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwidGFibGVfbGFiZWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUxhYmVsKCRldmVudCwgY29sdW1uRGVmKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW5EZWYubGFiZWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKGkpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiZGVsZXRlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgZGF0YS1mdW5jPVwiZGVsZXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE5XCIgW2hlaWdodF09XCIxOVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmRlbGV0ZUNvbHVtbicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGlvbiQgfCBhc3luYyBhcyBwYWdpbmF0aW9uXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGlvbj8uaXRlbXMgPz8gW10gYXMgYWxsT2JqZWN0c1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRcIlxuICAgICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5ub0ZpbGxlcnNJdGVtcyA9PT0gMFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC4lXT1cInBhZ2luYXRpb24udG90YWxQYWdlcyA+IDAgPyA4MCA6IDEwMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQudGFibGUuZW1wdHknIHwgaTE4biB9fVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQudGFibGUuZW1wdHknIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb24ubm9GaWxsZXJzSXRlbXMgPiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzZWxlY3RlZElkcyQgfCBhc3luYykgPz8gW10gYXMgc2VsZWN0ZWRJZHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sdW1ucyQgfCBhc3luYykgPz8gW10gYXMgY29sdW1uc1wiPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhLXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS53aWRnZXQudGFibGUuZGVzY3JpcHRpb24nIHwgaTE4blwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiYWxsT2JqZWN0cz8ubGVuZ3RoID8/IDAgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJhcmVBbGxTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdEFsbCgkZXZlbnQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiByZXNpemFibGUgKGNsaWNrKT1cInNldE9yZGVyKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrT3JkZXIkIHwgYXN5bmMgYXMgcXVpY2tPcmRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrT3JkZXIuYXR0cmlidXRlID09PSBjb2x1bW4uYXR0cmlidXRlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25TdmddPVwicXVpY2tPcmRlci5hc2MgPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWxsT2JqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb250ZXh0LW1lbnUtc2VsZWN0ZWRdPVwiY29udGV4dE1lbnVDbGlja2VkSWQgPT09IGl0ZW0uaWQgJiYgKGlzQ29udGV4dE1lbnVPcGVuZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hSb3dcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkVmFsdWUpPVwic2VsZWN0aW9uKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbGVyXT1cIml0ZW0ubWV0YWRhdGEhWydfX3dpZGdldC10YWJsZS1maWxsZXInXVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cInNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0uaWQpXCI+PC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBjbGFzcz1cInUtZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnbWV0YWRhdGEnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LW1ldGFkYXRhIFtpdGVtXT1cIml0ZW1cIj48L3ByeS1tZXRhZGF0YT5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnByb3BlcnR5ID09PSAnb0NsYXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb250ZW50LWltZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0gfCB0cmFuc2xhdGVJdGVtVG9TeW1ib2wgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhWydtZXRhZGF0YScsICdvQ2xhc3MnXS5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LWV4cGFuZC12YWx1ZSBbdmFsdWVdPVwiaXRlbSB8IGdldFZhbHVlIDogY29sdW1uLnByb3BlcnR5IHwgYXN5bmNcIj48L3ByeS1leHBhbmQtdmFsdWU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImEtdGFibGUtcGFnaW5hdGlvblwiICpuZ0lmPVwicGFnaW5hdGlvbi50b3RhbFBhZ2VzID4gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImdvVG9QYWdlKDApXCIgW2Rpc2FibGVkXT1cInBhZ2luYXRpb24ucGFnZSA8PSAwXCI+XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJza2lwLWxlZnQtZmlsbFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uLnBhZ2UgLSAxKVwiIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgPD0gMFwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3ctbGVmdC1zLWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImEtdGFibGUtcGFnaW5hdGlvbl9fc3BhY2luZ19fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHA+e3sgcGFnaW5hdGlvbi5wYWdlICsgMSB9fSAvIHt7IHBhZ2luYXRpb24ubG9hZGVkUGFnZXMgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbi5wYWdlICsgMSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgKyAxID49IHBhZ2luYXRpb24ubG9hZGVkUGFnZXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhcnJvdy1yaWdodC1zLWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIC0gMSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgKyAxID49IHBhZ2luYXRpb24ubG9hZGVkUGFnZXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJza2lwLXJpZ2h0LWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImEtdGFibGUtcGFnaW5hdGlvbl9fc3BhY2luZ19fbGFiZWxcIj5cbiAgICAgICAgICAgICAgKHt7XG4gICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LnRhYmxlLnJlbWFpbmluZycgfCBpMThuIDogeyByZW1haW5pbmc6IHBhZ2luYXRpb24udG90YWxQYWdlcyAtIHBhZ2luYXRpb24ubG9hZGVkUGFnZXMgfVxuICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LXRhYmxlL2NvbXBvbmVudC93aWRnZXQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGFibGUvY29tcG9uZW50L3dpZGdldC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLFlBQVksRUFDWixjQUFjLEVBRWQsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBSVQsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBZ0J6RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBdUIzRCxZQUFZLEtBQWlCLEVBQUUsRUFBYyxFQUFVLEdBQXNCO1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFEb0MsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFqQjdFLFVBQUssR0FBRyxL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QUFhLEVBQUUsSUFBVTtRQUNwQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFjO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OEdBaFNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtFQzFDakMsa25TQW9OQTs7MkZEMUthLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIGJhc2VJdGVtUHJvcGVydGllcyxcbiAgQ2xhc3MsXG4gIENsYXNzQWN0aW9ucyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbHVtbkRlZmluaXRpb24sXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBDb250ZXh0TWVudVNlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBPcmRlclZhbHVlLFxuICBSZXN1bHRPcmRlcixcbiAgVGFibGVXaWRnZXRPcHRpb25zLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBwYWdlOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgaXRlbXM6IEl0ZW1bXTtcbiAgbG9hZGVkOiBudW1iZXI7XG4gIGxvYWRlZFBhZ2VzOiBudW1iZXI7XG4gIG5vRmlsbGVyc0l0ZW1zOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LXRhYmxlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRUYWJsZUNvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQge1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxUYWJsZVdpZGdldE9wdGlvbnM+O1xuICBjb2x1bW5zJDogT2JzZXJ2YWJsZTxDb2x1bW5EZWZpbml0aW9uW10+O1xuICBvcHRpb25zQ29weT86IFRhYmxlV2lkZ2V0T3B0aW9ucztcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgQXJyYXkgPSBBcnJheTtcbiAgY3VycmVudENsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBwcml2YXRlIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBwcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTx7IGxhYmVsOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfVtdPjtcbiAgYWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhcmVBbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnRleHRNZW51Q2xpY2tlZElkOiBzdHJpbmcgPSAnJztcbiAgaXNDb250ZXh0TWVudU9wZW5lZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHF1aWNrT3JkZXIkOiBPYnNlcnZhYmxlPFJlc3VsdE9yZGVyIHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBfcmVmcmVzaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gIGFjdHVhbFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwYWdpbmF0aW9uJDogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uPjtcbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5maWVsZHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRTZXQkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4uSXRlbVV0aWxzLmdldEZpZWxkc0ZvckNsYXNzZXMoT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKSwgY2xhc3NlcywgZmllbGRzKSxcbiAgICAgICAgICAgIC4uLmJhc2VJdGVtUHJvcGVydGllcy5tYXAoKHApID0+ICh7IG5hbWU6IHAsIGlkOiBwIH0gYXMgRmllbGQpKVxuICAgICAgICAgIF0gYXMgRmllbGRbXVxuICAgICAgKSxcbiAgICAgIG1hcCgoZmllbGRzKSA9PiBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlJBVykpXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuaWZlc3QkLnBpcGUobWFwKChtYW5pZmVzdCkgPT4gbWFuaWZlc3Qub3B0aW9ucyBhcyBUYWJsZVdpZGdldE9wdGlvbnMpKSxcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuY2xhc3NlcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMudGFibGVEZWZhdWx0QXR0cmlidXRlc0RlZmluaXRpb25zKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCByZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcywgZGVmc10pID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbHVtbnMgfHwgb3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlc0Zyb21ScyhyZXN1bHRTZXQsIGNsYXNzZXMsIGZpZWxkcywgZGVmcyk7XG4gICAgICAgICAgY29uc3QgdW5pcXVlUHJvcHMgPSBbLi4ubmV3IFNldChhdHRyaWJ1dGVzLm1hcCgoeyBuYW1lLCB0ZWNobmljYWxOYW1lIH0pID0+ICh7IG5hbWUsIHRlY2huaWNhbE5hbWUgfSkpKV07XG5cbiAgICAgICAgICBvcHRpb25zLmNvbHVtbnMgPSB1bmlxdWVQcm9wcy5tYXAoKHByb3BlcnR5KSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5LnRlY2huaWNhbE5hbWUsXG4gICAgICAgICAgICBsYWJlbDogcHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZUlkOiBhdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gcHJvcGVydHkudGVjaG5pY2FsTmFtZSk/LmlkXG4gICAgICAgICAgfSkpIGFzIENvbHVtbkRlZmluaXRpb25bXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IC4uLihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSBhcyBUYWJsZVdpZGdldE9wdGlvbnMpIH07XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbEl0ZW1zJC5zdWJzY3JpYmUoKGFsbE9iamVjdHMpID0+ICh0aGlzLmFsbElkcyA9IGFsbE9iamVjdHMubWFwKChvYmopID0+IG9iai5pZCkpKSk7XG5cbiAgICBjb25zdCBIRUFERVJfU0laRSA9IDMwO1xuICAgIGNvbnN0IFBBR0lOQVRJT05fU0laRSA9IDM1O1xuICAgIGNvbnN0IExJTkVfU0laRSA9IDMwO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5hbGxJdGVtcyQsXG4gICAgICB0aGlzLmFjdHVhbFBhZ2UkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJCxcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbaXRlbXMsIGFjdHVhbFBhZ2UsIHNpemUsIHJzLCBoZWFkZXJQcmVzZW50XSkgPT4ge1xuICAgICAgICBjb25zdCByb3dzID0gTWF0aC5tYXgoXG4gICAgICAgICAgMSxcbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKHNpemUuaGVpZ2h0IC0gSEVBREVSX1NJWkUgLSBQQUdJTkFUSU9OX1NJWkUgLSAoaGVhZGVyUHJlc2VudCA/IFdJREdFVF9IRUFERVJfSEVJR0hULnZhbHVlIDogMCkpIC8gTElORV9TSVpFXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuY291bnQgPz8ge30pLnJlZHVjZSgocCwgYykgPT4gYy5jb3VudCArIHAsIDApO1xuICAgICAgICBjb25zdCBsb2FkZWRQYWdlcyA9IE1hdGguY2VpbChpdGVtcy5sZW5ndGggLyByb3dzKTtcbiAgICAgICAgY29uc3QgcGFnZSA9IGFjdHVhbFBhZ2UgPD0gbG9hZGVkUGFnZXMgPyBhY3R1YWxQYWdlIDogTWF0aC5tYXgoMCwgbG9hZGVkUGFnZXMgLSAxKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ID49IHJvd3MgKiBwYWdlICYmIGlkeCA8IHJvd3MgKiAocGFnZSArIDEpKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRXaXRoRmlsbGVycyA9XG4gICAgICAgICAgZmlsdGVyZWQubGVuZ3RoID09PSByb3dzXG4gICAgICAgICAgICA/IGZpbHRlcmVkXG4gICAgICAgICAgICA6IGZpbHRlcmVkLmNvbmNhdChcbiAgICAgICAgICAgICAgICBuZXcgQXJyYXkocm93cyAtIGZpbHRlcmVkLmxlbmd0aCkuZmlsbCh7XG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YTogeyAnX193aWRnZXQtdGFibGUtZmlsbGVyJzogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBhcyB1bmtub3duIGFzIEl0ZW0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93cyxcbiAgICAgICAgICBwYWdlLFxuICAgICAgICAgIGl0ZW1zOiBmaWx0ZXJlZFdpdGhGaWxsZXJzLFxuICAgICAgICAgIG5vRmlsbGVyc0l0ZW1zOiBmaWx0ZXJlZC5sZW5ndGgsXG4gICAgICAgICAgdG90YWwsXG4gICAgICAgICAgdG90YWxQYWdlczogTWF0aC5jZWlsKHRvdGFsIC8gcm93cyksXG4gICAgICAgICAgbG9hZGVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgbG9hZGVkUGFnZXNcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5wYWdpbmF0aW9uJC5waXBlKGF1ZGl0VGltZSgyMDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpKTtcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnM/LmNvbHVtbnMgPz8gW10pLFxuICAgICAgdGFwKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDUwMCkpXG4gICAgKTtcblxuICAgIHRoaXMuaXNDb250ZXh0TWVudU9wZW5lZCQgPSB0aGlzLnN0b3JlLnNlbGVjdChDb250ZXh0TWVudVNlbGVjdG9ycy5vcGVuZWQpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucmVzdWx0U2V0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJzKSA9PiAhIXJzKSxcbiAgICAgICAgICBtYXAoKHJzKSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2xhc3NlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDbGFzc2VzLmxlbmd0aCA+IDAgJiYgIWVxdWFsKHRoaXMuY3VycmVudENsYXNzZXMsIGNsYXNzZXMpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuY29sdW1ucztcbiAgICAgICAgICAgIHRoaXMuZW1pdE1hbmlmZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudENsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnNlbGVjdGVkSWRzJC5zdWJzY3JpYmUoKHNlbGVjdGVkSWRzKSA9PiB0aGlzLnNlbGVjdGVkSWRzID09PSBzZWxlY3RlZElkcykpO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDbGFzc0FjdGlvbnMubG9hZCgpKTtcblxuICAgIHRoaXMucHJvcGVydGllcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuZmllbGRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtycywgY2xhc3NlcywgZmllbGRzXSkgPT4gW1xuICAgICAgICAuLi5PYmplY3Qua2V5cyhycy5pdGVtcylcbiAgICAgICAgICAubWFwKChjbGFzc0lkKSA9PiAoY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGNsYXNzSWQpID8/IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlcylcbiAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgdGVjaG5pY2FsTmFtZTogYXR0ci50ZWNobmljYWxOYW1lLCBuYW1lOiBhdHRyLm5hbWUgfSkpXG4gICAgICBdKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3Qgc29ydGVkUHJvcHMgPSBbLi4ucHJvcHNdO1xuICAgICAgICBzb3J0ZWRQcm9wcy5zb3J0KChwQSwgcEIpID0+IHBBLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHBCLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xuICAgICAgICByZXR1cm4gc29ydGVkUHJvcHM7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocHJvcHMpID0+IHByb3BzLm1hcCgocHJvcCkgPT4gKHsgbGFiZWw6IHByb3AubmFtZSwgcHJvcGVydHk6IHByb3AudGVjaG5pY2FsTmFtZSB9KSkpLFxuICAgICAgdGFwKCgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDUwMCkpXG4gICAgKTtcblxuICAgIHRoaXMuYWxsU2VsZWN0ZWQkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3RlZElkcyQsIHRoaXMuYWxsSXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3NlbGVjdGVkSWRzLCBhbGxPYmplY3RzXSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxJZHMgPSBhbGxPYmplY3RzLm1hcCgob2JqZWN0KSA9PiBvYmplY3QuaWQpO1xuICAgICAgICByZXR1cm4gIWFsbElkcy5maW5kKChpZCkgPT4gIXNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoYWxsU2VsZWN0ZWQpID0+ICh0aGlzLmFyZUFsbFNlbGVjdGVkID0gYWxsU2VsZWN0ZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnF1aWNrT3JkZXIkID0gY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnF1aWNrT3JkZXIpLCB0aGlzLmRhdGFzb3VyY2VJZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW29yZGVyLCBucXNdKSA9PiAobnFzLmxlbmd0aCA9PT0gMSA/IG9yZGVyW25xc1swXV0gOiB1bmRlZmluZWQpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX3JlZnJlc2gkLnBpcGUoZGVsYXkoMTAwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSkpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDogeyAuLi50aGlzLm1hbmlmZXN0LCBvcHRpb25zOiB0aGlzLm9wdGlvbnNDb3B5IH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZENvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHk/LmNvbHVtbnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IGNvbHVtbnM6IFtdIH07XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvcHkuY29sdW1ucz8ucHVzaCh7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnIH0pO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgY2hhbmdlUHJvcGVydHlOYW1lKCRldmVudDogYW55LCBjb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICBjb2x1bW5EZWYucHJvcGVydHkgPSAkZXZlbnQ7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbCgkZXZlbnQ6IEV2ZW50LCBjb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb24pIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbmV3TGFiZWwgPSAkZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICBpZiAoY29sdW1uRGVmLmxhYmVsICE9PSBuZXdMYWJlbCkge1xuICAgICAgY29sdW1uRGVmLmxhYmVsID0gbmV3TGFiZWw7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb2x1bW4oaTogbnVtYmVyKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weT8uY29sdW1ucz8uc3BsaWNlKGksIDEpO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgc2VsZWN0aW9uKCRldmVudDogTW91c2VFdmVudCwgaXRlbTogSXRlbSkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3QoeyBpZDogaXRlbS5pZCwgY3VtdWxhdGl2ZTogISRldmVudC5zaGlmdEtleSB9KSk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgY29udGV4dE1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgaWYgKHRoaXMubWFuaWZlc3QuY29udGV4dE1lbnUgIT09IGZhbHNlKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICBpdGVtSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgY2xpZW50WDogJGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgcmVzdWx0U2V0OiBBcnJheS5pc0FycmF5KHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSkgPyB0aGlzLm1hbmlmZXN0LmRhdGFzb3VyY2VbMF0gOiB0aGlzLm1hbmlmZXN0LmRhdGFzb3VyY2UsXG4gICAgICAgICAgZnJvbTogJ3RhYmxlJyxcbiAgICAgICAgICBhbGxvd09iamVjdENyZWF0aW9uOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVDbGlja2VkSWQgPSBpdGVtLmlkO1xuICAgIH1cbiAgfVxuXG4gIGludmVydExheWVycyhpZHg6IG51bWJlciwgaWR4V2l0aDogbnVtYmVyKSB7XG4gICAgaWYgKCEhdGhpcy5vcHRpb25zQ29weSAmJiAhIXRoaXMub3B0aW9uc0NvcHkuY29sdW1ucykge1xuICAgICAgY29uc3QgdG1wID0gdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeFdpdGhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeFdpdGhdID0gdGhpcy5vcHRpb25zQ29weS5jb2x1bW5zW2lkeF07XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmNvbHVtbnNbaWR4XSA9IHRtcDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3RNYW55KHsgaWRzOiB0aGlzLmFsbElkcyB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5zZWxlY3RNYW55KHsgaWRzOiBbXSB9KSk7XG4gICAgfVxuICB9XG5cbiAgc2V0T3JkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kYXRhc291cmNlSWRzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbHRlcigobnFzKSA9PiBucXMubGVuZ3RoID09PSAxKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5xdWlja09yZGVyJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtucXMsIGFjdHVhbE9yZGVyXSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMucXVpY2tPcmRlcih7XG4gICAgICAgICAgICBkYXRhc291cmNlSWQ6IG5xc1swXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogY29sdW1uLmF0dHJpYnV0ZUlkID8/ICcnLFxuICAgICAgICAgICAgYXNjOiB0aGlzLm5leHRPcmRlcihjb2x1bW4sIGFjdHVhbE9yZGVyKVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dE9yZGVyKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbiwgYWN0dWFsT3JkZXI6IFJlc3VsdE9yZGVyIHwgdW5kZWZpbmVkKTogT3JkZXJWYWx1ZSB7XG4gICAgaWYgKCFhY3R1YWxPcmRlciB8fCBhY3R1YWxPcmRlci5hdHRyaWJ1dGUgIT09IGNvbHVtbi5hdHRyaWJ1dGVJZCkge1xuICAgICAgcmV0dXJuICdhc2MnO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsT3JkZXIuYXNjID09PSAnYXNjJyA/ICdkZXNjJyA6IGFjdHVhbE9yZGVyLmFzYyA9PT0gJ2Rlc2MnID8gdW5kZWZpbmVkIDogJ2FzYyc7XG4gIH1cblxuICB0cmFja09iamVjdHMoaW5kZXg6IG51bWJlciwgaXRlbTogSXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgZ29Ub1BhZ2UobnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdHVhbFBhZ2UkLm5leHQobnVtYmVyKTtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtdGFibGUtY3NzPjwvcHJ5LXdpZGdldC10YWJsZS1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLXRhYmxlXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgKHRyaWdnZXJDbGljayk9XCJ0aGlzLnJlZnJlc2goKVwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicG9zdF9hZGRcIj48L3ByeS1pY29uPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC50YWJsZS5hZGRDb2x1bW4nIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2Ygb3B0aW9uc0NvcHk/LmNvbHVtbnMgPz8gW107IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNcIlxuICAgICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJpbnZlcnRMYXllcnMoaSwgaSAtIDEpXCIgKm5nSWY9XCJpID4gMFwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9oYXV0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlVXAnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpICsgMSlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImkgPCAob3B0aW9uc0NvcHk/LmNvbHVtbnM/Lmxlbmd0aCA/PyAwKSAtIDFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImZsZWNoZV9iYXNcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVEb3duJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGFibGVfcHJvcGVydHlcIj57eyAnQHByeS53aWRnZXQudGFibGUucHJvcGVydHknIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJvcGVydHlOYW1lKCRldmVudCwgY29sdW1uRGVmKVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJwcm9wZXJ0aWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29sdW1uRGVmLnByb3BlcnR5XCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgICAgIGlkPVwidGFibGVfcHJvcGVydHlcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0YWJsZV9sYWJlbFwiPnt7ICdAcHJ5LndpZGdldC50YWJsZS5sYWJlbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cInRhYmxlX2xhYmVsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VMYWJlbCgkZXZlbnQsIGNvbHVtbkRlZilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sdW1uRGVmLmxhYmVsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbihpKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cImRlbGV0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIlxuICAgICAgICAgIGRhdGEtZnVuYz1cImRlbGV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRlbGV0ZVwiIFt3aWR0aF09XCIxOVwiIFtoZWlnaHRdPVwiMTlcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC50YWJsZS5kZWxldGVDb2x1bW4nIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwiYS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb24kIHwgYXN5bmMgYXMgcGFnaW5hdGlvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb24/Lml0ZW1zID8/IFtdIGFzIGFsbE9iamVjdHNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibm8tcmVzdWx0XCJcbiAgICAgICAgICAqbmdJZj1cInBhZ2luYXRpb24ubm9GaWxsZXJzSXRlbXMgPT09IDBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJwYWdpbmF0aW9uLnRvdGFsUGFnZXMgPiAwID8gODAgOiAxMDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdpbmF0aW9uLm5vRmlsbGVyc0l0ZW1zID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VsZWN0ZWRJZHMkIHwgYXN5bmMpID8/IFtdIGFzIHNlbGVjdGVkSWRzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbHVtbnMkIHwgYXN5bmMpID8/IFtdIGFzIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYS10YWJsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Bwcnkud2lkZ2V0LnRhYmxlLmRlc2NyaXB0aW9uJyB8IGkxOG5cIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImFsbE9iamVjdHM/Lmxlbmd0aCA/PyAwID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwiYXJlQWxsU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaSA9IGluZGV4XCIgcmVzaXphYmxlIChjbGljayk9XCJzZXRPcmRlcihjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja09yZGVyJCB8IGFzeW5jIGFzIHF1aWNrT3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja09yZGVyLmF0dHJpYnV0ZSA9PT0gY29sdW1uLmF0dHJpYnV0ZUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cInF1aWNrT3JkZXIuYXNjID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbE9iamVjdHNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29udGV4dC1tZW51LXNlbGVjdGVkXT1cImNvbnRleHRNZW51Q2xpY2tlZElkID09PSBpdGVtLmlkICYmIChpc0NvbnRleHRNZW51T3BlbmVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoUm93XG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFZhbHVlKT1cInNlbGVjdGlvbigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbGxlcl09XCJpdGVtLm1ldGFkYXRhIVsnX193aWRnZXQtdGFibGUtZmlsbGVyJ11cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLmlkKVwiPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgY2xhc3M9XCJ1LWVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5wcm9wZXJ0eSA9PT0gJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1tZXRhZGF0YSBbaXRlbV09XCJpdGVtXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5wcm9wZXJ0eSA9PT0gJ29DbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29udGVudC1pbWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtIHwgdHJhbnNsYXRlSXRlbVRvU3ltYm9sIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiaXRlbS5vQ2xhc3MgfCB0cmFuc2xhdGVJZCA6IHsgdHlwZTogJ2NsYXNzJywgb3V0cHV0OiAnbmFtZScgfSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVsnbWV0YWRhdGEnLCAnb0NsYXNzJ10uaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1leHBhbmQtdmFsdWUgW3ZhbHVlXT1cIml0ZW0gfCBnZXRWYWx1ZSA6IGNvbHVtbi5wcm9wZXJ0eSB8IGFzeW5jXCI+PC9wcnktZXhwYW5kLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25cIiAqbmdJZj1cInBhZ2luYXRpb24udG90YWxQYWdlcyA+IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS10YWJsZS1wYWdpbmF0aW9uX19zcGFjaW5nXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJnb1RvUGFnZSgwKVwiIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uLnBhZ2UgPD0gMFwiPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2tpcC1sZWZ0LWZpbGxcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbi5wYWdlIC0gMSlcIiBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbi5wYWdlIDw9IDBcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93LWxlZnQtcy1maWxsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdfX2xhYmVsXCI+XG4gICAgICAgICAgICAgIDxwPnt7IHBhZ2luYXRpb24ucGFnZSArIDEgfX0gLyB7eyBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb24ucGFnZSArIDEpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbi5wYWdlICsgMSA+PSBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3ctcmlnaHQtcy1maWxsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbi5sb2FkZWRQYWdlcyAtIDEpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbi5wYWdlICsgMSA+PSBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwic2tpcC1yaWdodC1maWxsXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLXRhYmxlLXBhZ2luYXRpb25fX3NwYWNpbmdfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICh7e1xuICAgICAgICAgICAgICAgICdAcHJ5LndpZGdldC50YWJsZS5yZW1haW5pbmcnIHwgaTE4biA6IHsgcmVtYWluaW5nOiBwYWdpbmF0aW9uLnRvdGFsUGFnZXMgLSBwYWdpbmF0aW9uLmxvYWRlZFBhZ2VzIH1cbiAgICAgICAgICAgICAgfX0pXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -41,10 +41,29 @@ export class WidgetTileComponent extends DataWidgetComponent {
41
41
  ]).pipe(map(([classes, tileDefs, maxTilesAttributes]) => ({
42
42
  ...classes
43
43
  .map((clazz) => ({
44
- [clazz.id]: [...clazz.attributes.map((attr) => attr.name).filter((_, i) => i < maxTilesAttributes)]
44
+ [clazz.id]: [
45
+ ...clazz.attributes
46
+ .map((attr) => ({
47
+ label: attr.name,
48
+ prop: attr.technicalName
49
+ }))
50
+ .filter((_, i) => i < maxTilesAttributes)
51
+ ]
45
52
  }))
46
53
  .reduce((p, c) => ({ ...p, ...c }), {}),
47
- ...tileDefs
54
+ ...classes
55
+ .filter((clazz) => !!tileDefs[clazz.id])
56
+ .map((clazz) => ({
57
+ [clazz.id]: [
58
+ ...clazz.attributes
59
+ .filter((attr) => tileDefs[clazz.id].includes(attr.name))
60
+ .map((attr) => ({
61
+ label: attr.name,
62
+ prop: attr.technicalName
63
+ }))
64
+ ]
65
+ }))
66
+ .reduce((p, c) => ({ ...p, ...c }), {})
48
67
  })));
49
68
  this.subscriptions.add(this.store.select(FieldSelectors.fields).subscribe((fields) => (this.fields = fields)));
50
69
  this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));
@@ -106,10 +125,10 @@ export class WidgetTileComponent extends DataWidgetComponent {
106
125
  return Object.keys(value?.metadata ?? {}).length > 0;
107
126
  }
108
127
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetTileComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: WidgetTileComponent, selector: "pry-widget-tile", usesInheritance: true, ngImport: i0, template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property, item.oClass)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: ["item", "propertyName", "alt"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.WidgetMapComponent, selector: "pry-widget-map" }, { kind: "component", type: i7.PryWidgetTileCssComponent, selector: "pry-widget-tile-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: WidgetTileComponent, selector: "pry-widget-tile", usesInheritance: true, ngImport: i0, template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property.prop); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property.label }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property.label, item.oClass)\">\n {{ value?.value }}\n </p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property.label, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property.label\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.MetadataComponent, selector: "pry-metadata", inputs: ["item"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.VizualizeRawComponent, selector: "pry-vizualize-raw", inputs: ["item", "propertyName", "alt"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.WidgetMapComponent, selector: "pry-widget-map" }, { kind: "component", type: i7.PryWidgetTileCssComponent, selector: "pry-widget-tile-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i4.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
110
129
  }
111
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetTileComponent, decorators: [{
112
131
  type: Component,
113
- args: [{ selector: 'pry-widget-tile', template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property, item.oClass)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n" }]
132
+ args: [{ selector: 'pry-widget-tile', template: "<pry-widget-tile-css></pry-widget-tile-css>\n<div class=\"o-widget o-widget--tile\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"tile_classes\">{{ '@pry.widget.tile.classes' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeClasses($event)\"\n [items]=\"classes$ | async\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [ngModel]=\"optionsCopy.classes\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"tile_classes\"\n ></pry-select>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget--tile-wrapper\" [style.top]=\"(displayHeader$ | async) ? WIDGET_HEADER_HEIGHT + 'px' : 0\">\n <div class=\"no-result\" *ngIf=\"(items$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.tile.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.tile.empty' | i18n }}</span>\n </div>\n <ul class=\"o-widget--tile__list\">\n <li\n class=\"o-widget--tile__list__item\"\n *ngFor=\"let item of items$ | async; let index = index\"\n (contextmenu)=\"contextMenu($event, item)\"\n >\n <div class=\"o-widget--tile__list__item__header\">\n <img\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"item | translateItemToSymbol | async\"\n [alt]=\"item.oClass | translateId: { type: 'class', output: 'name' } | async\"\n />\n <h3 class=\"o-widget--tile__list__item__header__title\">\n {{\n item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <pry-checkbox\n [ngModel]=\"(selectedIds$ | async).includes(item.id)\"\n (click)=\"select($event, item)\"\n ></pry-checkbox>\n </div>\n <div class=\"o-properties\">\n <ul class=\"o-properties__list\">\n <ng-container *ngFor=\"let property of (propertiesToDisplay$ | async)![item.oClass]\">\n <li\n *ngFor=\"let value of getValue(item, property.prop); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property.label }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property.label, item.oClass)\">\n {{ value?.value }}\n </p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property.label, item.oClass)\">\n <pry-vizualize-raw [item]=\"item\" [propertyName]=\"property.label\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n <div (click)=\"toggleMap(index)\" class=\"o-widget--tile__list__item__footer\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-text -link-like\"\n aria-controls=\"tile-map-xxx\"\n aria-expanded=\"false\"\n >\n {{ '@pry.widget.tile.map' | i18n }}\n </button>\n </div>\n <div class=\"o-widget--tile__list__item__map\" *ngIf=\"maps[index]\" id=\"tile-map-xxx\">\n <pry-widget-map [staticManifest]=\"mapManifest\" [staticResultSet]=\"resultSetWithItem(item)\"></pry-widget-map>\n </div>\n </li>\n </ul>\n </div>\n</div>\n" }]
114
133
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ElementRef }] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGlsZS9jb21wb25lbnQvd2lkZ2V0LXRpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGlsZS9jb21wb25lbnQvd2lkZ2V0LXRpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBR0wsY0FBYyxFQUNkLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1Qsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFNN0MsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG1CQUFtQjtJQWtCMUQsWUFBWSxLQUFpQixFQUFFLEVBQWM7UUFDM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWZuQixTQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQUc7WUFDWixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlU2ltcGxlVmFsdWUsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBDb250ZXh0TWVudUFjdGlvbnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW0sXG4gIEl0ZW1VdGlscyxcbiAgUmVzdWx0U2V0LFxuICBUaWxlV2lkZ2V0T3B0aW9ucyxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LXRpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LXRpbGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFRpbGVDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8VGlsZVdpZGdldE9wdGlvbnM+O1xuICBpdGVtcyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPGFueT47XG4gIG1hcHM6IGJvb2xlYW5bXSA9IFtdO1xuICBtYXBNYW5pZmVzdCA9IHtcbiAgICB0eXBlOiAnbWFwJyxcbiAgICBoZWFkZXI6IGZhbHNlLFxuICAgIGxheW91dDogeyB4OiAxLCB5OiAxLCB3aWR0aDogMSwgaGVpZ2h0OiAxIH0sXG4gICAgb3B0aW9uczogeyBsYXllcnM6IFt7IHR5cGU6ICdtYXJrZXInIH1dLCBmaXQ6IHRydWUgfVxuICB9O1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgb3B0aW9uc0NvcHk6IFRpbGVXaWRnZXRPcHRpb25zID0ge307XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIHByb3BlcnRpZXNUb0Rpc3BsYXkkOiBPYnNlcnZhYmxlPHsgW3A6IHN0cmluZ106IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQ+O1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgY2xhc3NlczogQ2xhc3NbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZTxhbnk+LCBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy5vcHRpb25zJCA9IHRoaXMubWFuaWZlc3QkLnBpcGUobWFwKChtYW5pZmVzdCkgPT4gbWFuaWZlc3Qub3B0aW9ucyBhcyBUaWxlV2lkZ2V0T3B0aW9ucykpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSB7IC4uLihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSBhcyBUaWxlV2lkZ2V0T3B0aW9ucykgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLml0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5yZXN1bHRTZXQkLnBpcGUobWFwKChycykgPT4gT2JqZWN0LnZhbHVlcyhycy5pdGVtcykucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKSkpLFxuICAgICAgdGhpcy5vcHRpb25zJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgb3B0aW9uc10pID0+XG4gICAgICAgIGl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT4gIW9wdGlvbnMuY2xhc3NlcyB8fCBvcHRpb25zLmNsYXNzZXMubGVuZ3RoID09PSAwIHx8IG9wdGlvbnMuY2xhc3Nlcy5pbmNsdWRlcyhpdGVtLm9DbGFzcylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzVG9EaXNwbGF5JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy50aWxlQXR0cmlidXRlc0RlZmluaXRpb25zKSxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5tYXhBdHRyaWJ1dGVzSW5UaWxlcylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbY2xhc3NlcywgdGlsZURlZnMsIG1heFRpbGVzQXR0cmlidXRlc10pID0+ICh7XG4gICAgICAgIC4uLmNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gKHtcbiAgICAgICAgICAgIFtjbGF6ei5pZF06IFsuLi5jbGF6ei5hdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ci5uYW1lKS5maWx0ZXIoKF8sIGkpID0+IGkgPCBtYXhUaWxlc0F0dHJpYnV0ZXMpXVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIC4uLmMgfSksIHt9KSxcbiAgICAgICAgLi4udGlsZURlZnNcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpLnN1YnNjcmliZSgoZmllbGRzKSA9PiAodGhpcy5maWVsZHMgPSBmaWVsZHMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNsYXNzZXMkLnN1YnNjcmliZSgoY2xhc3NlcykgPT4gKHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMpKSk7XG4gIH1cblxuICBjb250ZXh0TWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICBpZiAodGhpcy5tYW5pZmVzdC5jb250ZXh0TWVudSAhPT0gZmFsc2UpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgQ29udGV4dE1lbnVBY3Rpb25zLm9wZW4oe1xuICAgICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgICBjbGllbnRYOiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICBjbGllbnRZOiAkZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICBmcm9tOiAndGlsZScsXG4gICAgICAgICAgYWxsb3dPYmplY3RDcmVhdGlvbjogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0KCRldmVudDogTW91c2VFdmVudCwgaXRlbTogSXRlbSkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IGl0ZW0uaWQsIGN1bXVsYXRpdmU6ICEkZXZlbnQuc2hpZnRLZXkgfSkpO1xuICB9XG5cbiAgdG9nZ2xlTWFwKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLm1hcHNbaW5kZXhdID0gIXRoaXMubWFwc1tpbmRleF07XG4gIH1cblxuICByZXN1bHRTZXRXaXRoSXRlbShpdGVtOiBJdGVtKTogUmVzdWx0U2V0IHtcbiAgICByZXR1cm4geyBpdGVtczogeyBbaXRlbS5vQ2xhc3NdOiBbaXRlbV0gfSwgcmVsYXRpb25zOiBbXSB9O1xuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zQ29weVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlQ2xhc3NlcygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuY2xhc3NlcyA9ICRldmVudDtcbiAgfVxuXG4gIGdldFZhbHVlKGl0ZW06IEl0ZW0sIHByb3BlcnR5OiBzdHJpbmcpOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBwcm9wZXJ0eSk7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICB9XG5cbiAgaXNSYXcocHJvcGVydHk6IHN0cmluZywgY2xhc3NJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xhenogPSB0aGlzLmNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBjbGFzc0lkKTtcbiAgICBpZiAoISFjbGF6eikge1xuICAgICAgY29uc3QgcHJvcCA9IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICBpZiAoISFwcm9wKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBwcm9wLmZpZWxkKTtcbiAgICAgICAgaWYgKCEhZmllbGQpIHtcbiAgICAgICAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLlJBVztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNNZXRhZGF0YSh2YWx1ZTogQXR0cmlidXRlU2ltcGxlVmFsdWUgfCBJdGVtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlPy5tZXRhZGF0YSA/PyB7fSkubGVuZ3RoID4gMDtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtdGlsZS1jc3M+PC9wcnktd2lkZ2V0LXRpbGUtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS10aWxlXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgI2hlYWRlclxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGlsZV9jbGFzc2VzXCI+e3sgJ0Bwcnkud2lkZ2V0LnRpbGUuY2xhc3NlcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbGFzc2VzKCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc109XCJjbGFzc2VzJCB8IGFzeW5jXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmNsYXNzZXNcIlxuICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICBpZD1cInRpbGVfY2xhc3Nlc1wiXG4gICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0LS10aWxlLXdyYXBwZXJcIiBbc3R5bGUudG9wXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/IFdJREdFVF9IRUFERVJfSEVJR0hUICsgJ3B4JyA6IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0XCIgKm5nSWY9XCIoaXRlbXMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50aWxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LnRpbGUuZW1wdHknIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8dWwgY2xhc3M9XCJvLXdpZGdldC0tdGlsZV9fbGlzdFwiPlxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnUoJGV2ZW50LCBpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tdGlsZV9fbGlzdF9faXRlbV9faGVhZGVyXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgW2hlaWdodF09XCIyNVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMjVcIlxuICAgICAgICAgICAgW3NyY109XCJpdGVtIHwgdHJhbnNsYXRlSXRlbVRvU3ltYm9sIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2FsdF09XCJpdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1fX2hlYWRlcl9fdGl0bGVcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGl0ZW0ub0NsYXNzXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVJZFxuICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsYXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfCBhc3luY1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIihzZWxlY3RlZElkcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbS5pZClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+PC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiAocHJvcGVydGllc1RvRGlzcGxheSQgfCBhc3luYykhW2l0ZW0ub0NsYXNzXVwiPlxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0VmFsdWUoaXRlbSwgcHJvcGVydHkpOyBsZXQgaSA9IGluZGV4OyBsZXQgYyA9IGNvdW50XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdF9faXRlbVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdF9faXRlbV9fbGFiZWxcIiAqbmdJZj1cImkgPT09IDBcIj57eyBwcm9wZXJ0eSB9fTo8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvLXByb3BlcnRpZXNfX2xpc3RfX2l0ZW1fX3ZhbHVlXCIgKm5nSWY9XCIhaXNSYXcocHJvcGVydHksIGl0ZW0ub0NsYXNzKVwiPnt7IHZhbHVlPy52YWx1ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdF9faXRlbV9fcmF3XCIgKm5nSWY9XCJpc1Jhdyhwcm9wZXJ0eSwgaXRlbS5vQ2xhc3MpXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LXZpenVhbGl6ZS1yYXcgW2l0ZW1dPVwiaXRlbVwiIFtwcm9wZXJ0eU5hbWVdPVwicHJvcGVydHlcIj48L3ByeS12aXp1YWxpemUtcmF3PlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTWV0YWRhdGEodmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LW1ldGFkYXRhIFtpdGVtXT1cInZhbHVlXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlTWFwKGluZGV4KVwiIGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1fX2Zvb3RlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi10ZXh0IC1saW5rLWxpa2VcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInRpbGUtbWFwLXh4eFwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC50aWxlLm1hcCcgfCBpMThuIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1fX21hcFwiICpuZ0lmPVwibWFwc1tpbmRleF1cIiBpZD1cInRpbGUtbWFwLXh4eFwiPlxuICAgICAgICAgIDxwcnktd2lkZ2V0LW1hcCBbc3RhdGljTWFuaWZlc3RdPVwibWFwTWFuaWZlc3RcIiBbc3RhdGljUmVzdWx0U2V0XT1cInJlc3VsdFNldFdpdGhJdGVtKGl0ZW0pXCI+PC9wcnktd2lkZ2V0LW1hcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXRpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGlsZS9jb21wb25lbnQvd2lkZ2V0LXRpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdGlsZS9jb21wb25lbnQvd2lkZ2V0LXRpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBR0wsY0FBYyxFQUNkLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBR1Qsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFNN0MsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG1CQUFtQjtJQWtCMUQsWUFBWSxLQUFpQixFQUFFLEVBQWM7UUFDM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQWZuQixTQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQUc7WUFDWixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUMzQyxPQUFPLEVB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SyxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNaLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBa0M7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDOzhHQTVJVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw4RUMzQmhDLCs3SUFnSEE7OzJGRHJGYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIFJlc3VsdFNldCxcbiAgVGlsZVdpZGdldE9wdGlvbnMsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC10aWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC10aWxlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRUaWxlQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCB7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPFRpbGVXaWRnZXRPcHRpb25zPjtcbiAgaXRlbXMkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBtYXBzOiBib29sZWFuW10gPSBbXTtcbiAgbWFwTWFuaWZlc3QgPSB7XG4gICAgdHlwZTogJ21hcCcsXG4gICAgaGVhZGVyOiBmYWxzZSxcbiAgICBsYXlvdXQ6IHsgeDogMSwgeTogMSwgd2lkdGg6IDEsIGhlaWdodDogMSB9LFxuICAgIG9wdGlvbnM6IHsgbGF5ZXJzOiBbeyB0eXBlOiAnbWFya2VyJyB9XSwgZml0OiB0cnVlIH1cbiAgfTtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIG9wdGlvbnNDb3B5OiBUaWxlV2lkZ2V0T3B0aW9ucyA9IHt9O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBwcm9wZXJ0aWVzVG9EaXNwbGF5JDogT2JzZXJ2YWJsZTx7IFtwOiBzdHJpbmddOiB7IGxhYmVsOiBzdHJpbmc7IHByb3A6IHN0cmluZyB9W10gfSB8IHVuZGVmaW5lZD47XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc3RvcmU6IFN0b3JlPGFueT4sIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIFRpbGVXaWRnZXRPcHRpb25zKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHsgLi4uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpIGFzIFRpbGVXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuaXRlbXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBPYmplY3QudmFsdWVzKHJzLml0ZW1zKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pKSksXG4gICAgICB0aGlzLm9wdGlvbnMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2l0ZW1zLCBvcHRpb25zXSkgPT5cbiAgICAgICAgaXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChpdGVtKSA9PiAhb3B0aW9ucy5jbGFzc2VzIHx8IG9wdGlvbnMuY2xhc3Nlcy5sZW5ndGggPT09IDAgfHwgb3B0aW9ucy5jbGFzc2VzLmluY2x1ZGVzKGl0ZW0ub0NsYXNzKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnByb3BlcnRpZXNUb0Rpc3BsYXkkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLnRpbGVBdHRyaWJ1dGVzRGVmaW5pdGlvbnMpLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1heEF0dHJpYnV0ZXNJblRpbGVzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCB0aWxlRGVmcywgbWF4VGlsZXNBdHRyaWJ1dGVzXSkgPT4gKHtcbiAgICAgICAgLi4uY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiAoe1xuICAgICAgICAgICAgW2NsYXp6LmlkXTogW1xuICAgICAgICAgICAgICAuLi5jbGF6ei5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgICAgICBwcm9wOiBhdHRyLnRlY2huaWNhbE5hbWVcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBpIDwgbWF4VGlsZXNBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIC4uLmMgfSksIHt9KSxcbiAgICAgICAgLi4uY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiAhIXRpbGVEZWZzW2NsYXp6LmlkXSlcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gKHtcbiAgICAgICAgICAgIFtjbGF6ei5pZF06IFtcbiAgICAgICAgICAgICAgLi4uY2xhenouYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+IHRpbGVEZWZzW2NsYXp6LmlkXS5pbmNsdWRlcyhhdHRyLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICAgICAgcHJvcDogYXR0ci50ZWNobmljYWxOYW1lXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSkpXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gKHsgLi4ucCwgLi4uYyB9KSwge30pXG4gICAgICB9KSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKS5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5jbGFzc2VzJC5zdWJzY3JpYmUoKGNsYXNzZXMpID0+ICh0aGlzLmNsYXNzZXMgPSBjbGFzc2VzKSkpO1xuICB9XG5cbiAgY29udGV4dE1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgaWYgKHRoaXMubWFuaWZlc3QuY29udGV4dE1lbnUgIT09IGZhbHNlKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICBpdGVtSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgY2xpZW50WDogJGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgZnJvbTogJ3RpbGUnLFxuICAgICAgICAgIGFsbG93T2JqZWN0Q3JlYXRpb246IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdCgkZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IEl0ZW0pIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiBpdGVtLmlkLCBjdW11bGF0aXZlOiAhJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgfVxuXG4gIHRvZ2dsZU1hcChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tYXBzW2luZGV4XSA9ICF0aGlzLm1hcHNbaW5kZXhdO1xuICB9XG5cbiAgcmVzdWx0U2V0V2l0aEl0ZW0oaXRlbTogSXRlbSk6IFJlc3VsdFNldCB7XG4gICAgcmV0dXJuIHsgaXRlbXM6IHsgW2l0ZW0ub0NsYXNzXTogW2l0ZW1dIH0sIHJlbGF0aW9uczogW10gfTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNsYXNzZXMoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmNsYXNzZXMgPSAkZXZlbnQ7XG4gIH1cblxuICBnZXRWYWx1ZShpdGVtOiBJdGVtLCBwcm9wZXJ0eTogc3RyaW5nKTogQXR0cmlidXRlU2ltcGxlVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuXG4gIGlzUmF3KHByb3BlcnR5OiBzdHJpbmcsIGNsYXNzSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsYXp6ID0gdGhpcy5jbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gY2xhc3NJZCk7XG4gICAgaWYgKCEhY2xhenopIHtcbiAgICAgIGNvbnN0IHByb3AgPSBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgaWYgKCEhcHJvcCkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gcHJvcC5maWVsZCk7XG4gICAgICAgIGlmICghIWZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5SQVc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzTWV0YWRhdGEodmFsdWU6IEF0dHJpYnV0ZVNpbXBsZVZhbHVlIHwgSXRlbSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZT8ubWV0YWRhdGEgPz8ge30pLmxlbmd0aCA+IDA7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LXRpbGUtY3NzPjwvcHJ5LXdpZGdldC10aWxlLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tdGlsZVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInRpbGVfY2xhc3Nlc1wiPnt7ICdAcHJ5LndpZGdldC50aWxlLmNsYXNzZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2xhc3NlcygkZXZlbnQpXCJcbiAgICAgICAgICBbaXRlbXNdPVwiY2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5jbGFzc2VzXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgaWQ9XCJ0aWxlX2NsYXNzZXNcIlxuICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG4gIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tdGlsZS13cmFwcGVyXCIgW3N0eWxlLnRvcF09XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAwXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGl0ZW1zJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQudGlsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC50aWxlLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHVsIGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RcIj5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cIm8td2lkZ2V0LS10aWxlX19saXN0X19pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1fX2hlYWRlclwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMjVcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjI1XCJcbiAgICAgICAgICAgIFtzcmNdPVwiaXRlbSB8IHRyYW5zbGF0ZUl0ZW1Ub1N5bWJvbCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFthbHRdPVwiaXRlbS5vQ2xhc3MgfCB0cmFuc2xhdGVJZDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiby13aWRnZXQtLXRpbGVfX2xpc3RfX2l0ZW1fX2hlYWRlcl9fdGl0bGVcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGl0ZW0ub0NsYXNzXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVJZFxuICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsYXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfCBhc3luY1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIihzZWxlY3RlZElkcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbS5pZClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+PC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1wcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiAocHJvcGVydGllc1RvRGlzcGxheSQgfCBhc3luYykhW2l0ZW0ub0NsYXNzXVwiPlxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0VmFsdWUoaXRlbSwgcHJvcGVydHkucHJvcCk7IGxldCBpID0gaW5kZXg7IGxldCBjID0gY291bnRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtX19sYWJlbFwiICpuZ0lmPVwiaSA9PT0gMFwiPnt7IHByb3BlcnR5LmxhYmVsIH19OjwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdF9faXRlbV9fdmFsdWVcIiAqbmdJZj1cIiFpc1Jhdyhwcm9wZXJ0eS5sYWJlbCwgaXRlbS5vQ2xhc3MpXCI+XG4gICAgICAgICAgICAgICAgICB7eyB2YWx1ZT8udmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvLXByb3BlcnRpZXNfX2xpc3RfX2l0ZW1fX3Jhd1wiICpuZ0lmPVwiaXNSYXcocHJvcGVydHkubGFiZWwsIGl0ZW0ub0NsYXNzKVwiPlxuICAgICAgICAgICAgICAgICAgPHByeS12aXp1YWxpemUtcmF3IFtpdGVtXT1cIml0ZW1cIiBbcHJvcGVydHlOYW1lXT1cInByb3BlcnR5LmxhYmVsXCI+PC9wcnktdml6dWFsaXplLXJhdz5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc01ldGFkYXRhKHZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1tZXRhZGF0YSBbaXRlbV09XCJ2YWx1ZVwiPjwvcHJ5LW1ldGFkYXRhPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZU1hcChpbmRleClcIiBjbGFzcz1cIm8td2lkZ2V0LS10aWxlX19saXN0X19pdGVtX19mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJ0aWxlLW1hcC14eHhcIlxuICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnQHByeS53aWRnZXQudGlsZS5tYXAnIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0LS10aWxlX19saXN0X19pdGVtX19tYXBcIiAqbmdJZj1cIm1hcHNbaW5kZXhdXCIgaWQ9XCJ0aWxlLW1hcC14eHhcIj5cbiAgICAgICAgICA8cHJ5LXdpZGdldC1tYXAgW3N0YXRpY01hbmlmZXN0XT1cIm1hcE1hbmlmZXN0XCIgW3N0YXRpY1Jlc3VsdFNldF09XCJyZXN1bHRTZXRXaXRoSXRlbShpdGVtKVwiPjwvcHJ5LXdpZGdldC1tYXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -29,7 +29,7 @@ export class WidgetVegaComponent extends DataWidgetComponent {
29
29
  const data = WidgetVegaComponent.getValues(rs);
30
30
  const vegaSpec = WidgetVegaComponent.placeData(options, JSON.parse(JSON.stringify(options.baseSpec)), data);
31
31
  vegaSpec.width = vegaSpec.width ?? size.width - 5;
32
- vegaSpec.height = vegaSpec.height ?? size.height - 5 - (header ? WIDGET_HEADER_HEIGHT : 0);
32
+ vegaSpec.height = vegaSpec.height ?? size.height - 5 - (header ? WIDGET_HEADER_HEIGHT.value : 0);
33
33
  vegaSpec.autosize = vegaSpec.autosize ?? { type: 'fit', contains: 'padding' };
34
34
  vegaSpec.padding = vegaSpec.padding ?? 15;
35
35
  console.log(JSON.stringify(vegaSpec, undefined, 4));
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
136
136
  type: ViewChild,
137
137
  args: ['vega']
138
138
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXZlZ2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdmVnYS9jb21wb25lbnQvd2lkZ2V0LXZlZ2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdmVnYS9jb21wb25lbnQvd2lkZ2V0LXZlZ2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsU0FBUyxFQUFjLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUVMLG1CQUFtQixFQU9uQixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sS0FBNEIsTUFBTSxZQUFZLENBQUM7Ozs7OztBQU10RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBVTFELFlBQ0UsS0FBaUIsRUFDVCxnQkFBZ0MsRUFDeEMsRUFBYyxFQUNZLFFBQWtCLEVBQ3BDLFlBQWdDO1FBRXhDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMVCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBRWQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFYMUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IsZ0JBQVcsR0FBc0IsRUFBRSxRQUFR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RyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYTtRQUN0QixJQUFJLENBQUM7WUFDSCxhQUFhO1lBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDakQsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUM7Z0JBQzNFLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDO2FBQ3JFLENBQUMsQ0FBQztZQUNILE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs4R0E5SVUsbUJBQW1CLCtGQWNwQixRQUFRO2tHQWRQLG1CQUFtQiw0S0N2QmhDLDhsREE4Q0E7OzJGRHZCYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCOzswQkFpQnhCLE1BQU07MkJBQUMsUUFBUTswRUFiQyxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBJdGVtLFxuICBQcnlJMThuU2VydmljZSxcbiAgUHJ5U25hY2tiYXJTZXJ2aWNlLFxuICBSZXN1bHRTZXQsXG4gIFZhbHVlVHlwZSxcbiAgVmVnYVdpZGdldE9wdGlvbnMsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFZpZXcgfSBmcm9tICd2ZWdhJztcbmltcG9ydCBlbWJlZCwgeyBWaXN1YWxpemF0aW9uU3BlYyB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LXZlZ2EnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LXZlZ2EuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFZlZ2FDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgdmlldz86IFZpZXc7XG4gIHZlZ2FTcGVjJDogT2JzZXJ2YWJsZTxWaXN1YWxpemF0aW9uU3BlYz47XG4gIHRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8YW55PjtcbiAgb3B0aW9uc0NvcHk6IFZlZ2FXaWRnZXRPcHRpb25zID0geyBiYXNlU3BlYzoge30sIHBsYWNlRGF0YTogW10gfTtcbiAgZm9ybWF0dGVkQmFzZVNwZWM6IHN0cmluZyA9ICd7fSc7XG4gIGluaXRpYWxGb3JtYXR0ZWRCYXNlU3BlYzogc3RyaW5nID0gJ3t9JztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgc25hY2tTZXJ2aWNlOiBQcnlTbmFja2JhclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IChtYW5pZmVzdC5vcHRpb25zID8/IHt9KSBhcyBhbnkpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLmZvcm1hdHRlZEJhc2VTcGVjID0gSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zQ29weS5iYXNlU3BlYywgdW5kZWZpbmVkLCA0KTtcbiAgICAgICAgdGhpcy5pbml0aWFsRm9ybWF0dGVkQmFzZVNwZWMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5LmJhc2VTcGVjLCB1bmRlZmluZWQsIDQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52ZWdhU3BlYyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLnJlc3VsdFNldCQsIHRoaXMud2lkZ2V0U2l6ZSQsIHRoaXMuZGlzcGxheUhlYWRlciRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbb3B0aW9ucywgcnMsIHNpemUsIGhlYWRlcl0pID0+ICEhcnMpLFxuICAgICAgbWFwKChbb3B0aW9ucywgcnMsIHNpemUsIGhlYWRlcl0pID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IFdpZGdldFZlZ2FDb21wb25lbnQuZ2V0VmFsdWVzKHJzKTtcblxuICAgICAgICBjb25zdCB2ZWdhU3BlYyA9IFdpZGdldFZlZ2FDb21wb25lbnQucGxhY2VEYXRhKG9wdGlvbnMsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5iYXNlU3BlYykpLCBkYXRhKTtcblxuICAgICAgICB2ZWdhU3BlYy53aWR0aCA9IHZlZ2FTcGVjLndpZHRoID8/IHNpemUud2lkdGggLSA1O1xuICAgICAgICB2ZWdhU3BlYy5oZWlnaHQgPSB2ZWdhU3BlYy5oZWlnaHQgPz8gc2l6ZS5oZWlnaHQgLSA1IC0gKGhlYWRlciA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCk7XG4gICAgICAgIHZlZ2FTcGVjLmF1dG9zaXplID0gdmVnYVNwZWMuYXV0b3NpemUgPz8geyB0eXBlOiAnZml0JywgY29udGFpbnM6ICdwYWRkaW5nJyB9O1xuICAgICAgICB2ZWdhU3BlYy5wYWRkaW5nID0gdmVnYVNwZWMucGFkZGluZyA/PyAxNTtcblxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh2ZWdhU3BlYywgdW5kZWZpbmVkLCA0KSk7XG5cbiAgICAgICAgcmV0dXJuIHZlZ2FTcGVjO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGdldFZhbHVlcyhkYXRhOiBSZXN1bHRTZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YS5pdGVtcylcbiAgICAgIC5tYXAoKGNsYXp6KSA9PiBkYXRhLml0ZW1zW2NsYXp6XS5tYXAoKGl0ZW0pID0+IFdpZGdldFZlZ2FDb21wb25lbnQudHJhbnNmb3JtUHJvdm9seU1vZGVsVG9DbGFzc2ljKGl0ZW0pKSlcbiAgICAgIC5mbGF0KCk7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtUHJvdm9seU1vZGVsVG9DbGFzc2ljKHZhbHVlczogSXRlbSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogVmFsdWVUeXBlIH07XG4gICAgT2JqZWN0LmtleXModmFsdWVzLmF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcmVzdWx0W2tleV0gPSAodmFsdWVzLmF0dHJpYnV0ZXNba2V5XSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHBsYWNlRGF0YShvcHRpb25zOiBWZWdhV2lkZ2V0T3B0aW9ucywgYmFzZVNwZWM6IGFueSwgZGF0YTogeyBba2V5OiBzdHJpbmddOiBWYWx1ZVR5cGUgfVtdKSB7XG4gICAgY29uc3QgY2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJhc2VTcGVjKSk7XG4gICAgbGV0IHJlZiA9IGNsb25lO1xuICAgIChvcHRpb25zLnBsYWNlRGF0YSA/PyBbXSkuZm9yRWFjaCgocHJvcCwgaWR4LCBhcnIpID0+IHtcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgaWYgKGlkeCA8IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmVmID0gcmVmW3Byb3BdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZltwcm9wXSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmVnYVNwZWMkLCB0aGlzLnRyaWdnZXIkLCB0aGlzLndpZGdldFNpemUkXSkuc3Vic2NyaWJlKChbc3BlYywgXywgc2l6ZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcblxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudC5kZWJ1Z0ZOVFAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYywgdW5kZWZpbmVkLCA0KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW1iZWQodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3BlYykpLCB7XG4gICAgICAgICAgICBhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbmRlcmVyOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGZvcm1hdExvY2FsZToge1xuICAgICAgICAgICAgICBkZWNpbWFsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS5mb3JtYXQuZGVjaW1hbCcpLFxuICAgICAgICAgICAgICB0aG91c2FuZHM6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LmZvcm1hdC50aG91c2FuZHMnKSxcbiAgICAgICAgICAgICAgZ3JvdXBpbmc6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LmZvcm1hdC5ncm91cGluZycpLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkuZm9ybWF0LmN1cnJlbmN5JyksXG4gICAgICAgICAgICAgIHBlcmNlbnQ6ICdcXHUyMDJmJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyJC5uZXh0KCksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKVswXS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlUGxhY2VEYXRhKCRldmVudDogRXZlbnQpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgZXhwciA9ICRldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMub3B0aW9uc0NvcHkucGxhY2VEYXRhID0gZXhwclxuICAgICAgLnNwbGl0KCcuJylcbiAgICAgIC5tYXAoKHZhbDogc3RyaW5nKSA9PiAocGFyc2VJbnQodmFsKSArICcnID09PSBgJHt2YWx9YCA/IHBhcnNlSW50KHZhbCkgOiB2YWwpKTtcbiAgfVxuXG4gIGNoYW5nZVNwZWMoJGV2ZW50OiBFdmVudCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmJhc2VTcGVjID0gSlNPTi5wYXJzZSgkZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuc25hY2tTZXJ2aWNlLm5vdE1pdGlnYXRlZE9wZW4oe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQudmVnYS5ub3RQYXJzZWFibGVTcGVjJyksXG4gICAgICAgIGFjdGlvbjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LnZlZ2Euc3BlY1JlaW5pdCcpXG4gICAgICB9KTtcbiAgICAgIG1lc3NhZ2U/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuYmFzZVNwZWMgPSB0aGlzLmluaXRpYWxGb3JtYXR0ZWRCYXNlU3BlYztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPHByeS13aWRnZXQtdmVnYS1jc3M+PC9wcnktd2lkZ2V0LXZlZ2EtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1jaGFydFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19maWVsZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJwbGFjZURhdGFfc3JjXCI+e3sgJ0Bwcnkud2lkZ2V0LnZlZ2EucGxhY2VEYXRhJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgaWQ9XCJwbGFjZURhdGFfc3JjXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCIob3B0aW9uc0NvcHkucGxhY2VEYXRhID8/IFtdKS5qb2luKCcuJylcIlxuICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBsYWNlRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInNwZWNfc3JjXCI+e3sgJ0Bwcnkud2lkZ2V0LnZlZ2Euc3BlYycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkIGEtdGV4dC1hcmVhXCJcbiAgICAgICAgICAgIGlkPVwic3BlY19zcmNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1hdHRlZEJhc2VTcGVjXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VTcGVjKCRldmVudClcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWNoYXJ0LS1jaGFydFwiICN2ZWdhPjwvZGl2PlxuPC9kaXY+XG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXZlZ2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdmVnYS9jb21wb25lbnQvd2lkZ2V0LXZlZ2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtdmVnYS9jb21wb25lbnQvd2lkZ2V0LXZlZ2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsU0FBUyxFQUFjLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUVMLG1CQUFtQixFQU9uQixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sS0FBNEIsTUFBTSxZQUFZLENBQUM7Ozs7OztBQU10RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBVTFELFlBQ0UsS0FBaUIsRUFDVCxnQkFBZ0MsRUFDeEMsRUFBYyxFQUNZLFFBQWtCLEVBQ3BDLFlBQWdDO1FBRXhDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMVCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBRWQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFYMUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IsZ0JBQVcsR0FBc0IsRUFBRSxRQUFR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RyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWE7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsYUFBYTtZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2pELElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDO2dCQUMzRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQzthQUNyRSxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBOUlVLG1CQUFtQiwrRkFjcEIsUUFBUTtrR0FkUCxtQkFBbUIsNEtDdkJoQyw4bERBOENBOzsyRkR2QmEsbUJBQW1CO2tCQUovQixTQUFTOytCQUNFLGlCQUFpQjs7MEJBaUJ4QixNQUFNOzJCQUFDLFFBQVE7MEVBYkMsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFByeVNuYWNrYmFyU2VydmljZSxcbiAgUmVzdWx0U2V0LFxuICBWYWx1ZVR5cGUsXG4gIFZlZ2FXaWRnZXRPcHRpb25zLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgVmlzdWFsaXphdGlvblNwZWMgfSBmcm9tICd2ZWdhLWVtYmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC12ZWdhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC12ZWdhLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRWZWdhQ29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2ZWdhJykgdmVnYSE6IEVsZW1lbnRSZWY7XG4gIHZpZXc/OiBWaWV3O1xuICB2ZWdhU3BlYyQ6IE9ic2VydmFibGU8VmlzdWFsaXphdGlvblNwZWM+O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT47XG4gIG9wdGlvbnNDb3B5OiBWZWdhV2lkZ2V0T3B0aW9ucyA9IHsgYmFzZVNwZWM6IHt9LCBwbGFjZURhdGE6IFtdIH07XG4gIGZvcm1hdHRlZEJhc2VTcGVjOiBzdHJpbmcgPSAne30nO1xuICBpbml0aWFsRm9ybWF0dGVkQmFzZVNwZWM6IHN0cmluZyA9ICd7fSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIHNuYWNrU2VydmljZTogUHJ5U25hY2tiYXJTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiAobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkgYXMgYW55KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRCYXNlU3BlYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuYmFzZVNwZWMsIHVuZGVmaW5lZCwgNCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbEZvcm1hdHRlZEJhc2VTcGVjID0gSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zQ29weS5iYXNlU3BlYywgdW5kZWZpbmVkLCA0KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMudmVnYVNwZWMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zJCwgdGhpcy5yZXN1bHRTZXQkLCB0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW29wdGlvbnMsIHJzLCBzaXplLCBoZWFkZXJdKSA9PiAhIXJzKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIHJzLCBzaXplLCBoZWFkZXJdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBXaWRnZXRWZWdhQ29tcG9uZW50LmdldFZhbHVlcyhycyk7XG5cbiAgICAgICAgY29uc3QgdmVnYVNwZWMgPSBXaWRnZXRWZWdhQ29tcG9uZW50LnBsYWNlRGF0YShvcHRpb25zLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYmFzZVNwZWMpKSwgZGF0YSk7XG5cbiAgICAgICAgdmVnYVNwZWMud2lkdGggPSB2ZWdhU3BlYy53aWR0aCA/PyBzaXplLndpZHRoIC0gNTtcbiAgICAgICAgdmVnYVNwZWMuaGVpZ2h0ID0gdmVnYVNwZWMuaGVpZ2h0ID8/IHNpemUuaGVpZ2h0IC0gNSAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApO1xuICAgICAgICB2ZWdhU3BlYy5hdXRvc2l6ZSA9IHZlZ2FTcGVjLmF1dG9zaXplID8/IHsgdHlwZTogJ2ZpdCcsIGNvbnRhaW5zOiAncGFkZGluZycgfTtcbiAgICAgICAgdmVnYVNwZWMucGFkZGluZyA9IHZlZ2FTcGVjLnBhZGRpbmcgPz8gMTU7XG5cbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodmVnYVNwZWMsIHVuZGVmaW5lZCwgNCkpO1xuXG4gICAgICAgIHJldHVybiB2ZWdhU3BlYztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRWYWx1ZXMoZGF0YTogUmVzdWx0U2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEuaXRlbXMpXG4gICAgICAubWFwKChjbGF6eikgPT4gZGF0YS5pdGVtc1tjbGF6el0ubWFwKChpdGVtKSA9PiBXaWRnZXRWZWdhQ29tcG9uZW50LnRyYW5zZm9ybVByb3ZvbHlNb2RlbFRvQ2xhc3NpYyhpdGVtKSkpXG4gICAgICAuZmxhdCgpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zZm9ybVByb3ZvbHlNb2RlbFRvQ2xhc3NpYyh2YWx1ZXM6IEl0ZW0pIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IFZhbHVlVHlwZSB9O1xuICAgIE9iamVjdC5rZXlzKHZhbHVlcy5hdHRyaWJ1dGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHJlc3VsdFtrZXldID0gKHZhbHVlcy5hdHRyaWJ1dGVzW2tleV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBwbGFjZURhdGEob3B0aW9uczogVmVnYVdpZGdldE9wdGlvbnMsIGJhc2VTcGVjOiBhbnksIGRhdGE6IHsgW2tleTogc3RyaW5nXTogVmFsdWVUeXBlIH1bXSkge1xuICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShiYXNlU3BlYykpO1xuICAgIGxldCByZWYgPSBjbG9uZTtcbiAgICAob3B0aW9ucy5wbGFjZURhdGEgPz8gW10pLmZvckVhY2goKHByb3AsIGlkeCwgYXJyKSA9PiB7XG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGlmIChpZHggPCBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJlZiA9IHJlZltwcm9wXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZbcHJvcF0gPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnZlZ2FTcGVjJCwgdGhpcy50cmlnZ2VyJCwgdGhpcy53aWRnZXRTaXplJF0pLnN1YnNjcmliZSgoW3NwZWMsIF8sIHNpemVdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZlZ2EpIHtcbiAgICAgICAgICB0aGlzLnZpZXc/LmZpbmFsaXplKCk7XG5cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuZGVidWdGTlRQICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHNwZWMsIHVuZGVmaW5lZCwgNCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ2NhbnZhcycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6IHtcbiAgICAgICAgICAgICAgZGVjaW1hbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkuZm9ybWF0LmRlY2ltYWwnKSxcbiAgICAgICAgICAgICAgdGhvdXNhbmRzOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS5mb3JtYXQudGhvdXNhbmRzJyksXG4gICAgICAgICAgICAgIGdyb3VwaW5nOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS5mb3JtYXQuZ3JvdXBpbmcnKSxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LmZvcm1hdC5jdXJyZW5jeScpLFxuICAgICAgICAgICAgICBwZXJjZW50OiAnXFx1MjAyZiUnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiAodGhpcy52aWV3ID0gcmVzdWx0LnZpZXcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJylbMF0udG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDogeyAuLi50aGlzLm1hbmlmZXN0LCBvcHRpb25zOiB0aGlzLm9wdGlvbnNDb3B5IH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZVBsYWNlRGF0YSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGV4cHIgPSAkZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnBsYWNlRGF0YSA9IGV4cHJcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAubWFwKCh2YWw6IHN0cmluZykgPT4gKHBhcnNlSW50KHZhbCkgKyAnJyA9PT0gYCR7dmFsfWAgPyBwYXJzZUludCh2YWwpIDogdmFsKSk7XG4gIH1cblxuICBjaGFuZ2VTcGVjKCRldmVudDogRXZlbnQpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5vcHRpb25zQ29weS5iYXNlU3BlYyA9IEpTT04ucGFyc2UoJGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnNuYWNrU2VydmljZS5ub3RNaXRpZ2F0ZWRPcGVuKHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LnZlZ2Eubm90UGFyc2VhYmxlU3BlYycpLFxuICAgICAgICBhY3Rpb246IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC52ZWdhLnNwZWNSZWluaXQnKVxuICAgICAgfSk7XG4gICAgICBtZXNzYWdlPy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmJhc2VTcGVjID0gdGhpcy5pbml0aWFsRm9ybWF0dGVkQmFzZVNwZWM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LXZlZ2EtY3NzPjwvcHJ5LXdpZGdldC12ZWdhLWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fZmllbGRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwicGxhY2VEYXRhX3NyY1wiPnt7ICdAcHJ5LndpZGdldC52ZWdhLnBsYWNlRGF0YScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIGlkPVwicGxhY2VEYXRhX3NyY1wiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiKG9wdGlvbnNDb3B5LnBsYWNlRGF0YSA/PyBbXSkuam9pbignLicpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQbGFjZURhdGEoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJzcGVjX3NyY1wiPnt7ICdAcHJ5LndpZGdldC52ZWdhLnNwZWMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZCBhLXRleHQtYXJlYVwiXG4gICAgICAgICAgICBpZD1cInNwZWNfc3JjXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtYXR0ZWRCYXNlU3BlY1wiXG4gICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlU3BlYygkZXZlbnQpXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0LS1jaGFydC0tY2hhcnRcIiAjdmVnYT48L2Rpdj5cbjwvZGl2PlxuIl19
@@ -2795,7 +2795,7 @@ class AdminSelectDatasetComponent extends SubscriptionnerDirective {
2795
2795
  }));
2796
2796
  }
2797
2797
  ngOnInit() {
2798
- this.subscriptions.add(this.selectedDataset$.subscribe((dataset) => {
2798
+ this.subscriptions.add(combineLatest([this.selectedDataset$, this.store.select(DataSourceSelectors.datasetVersions)]).subscribe(([dataset, versions]) => {
2799
2799
  if (dataset) {
2800
2800
  this.accessGroups = dataset?.groups ?? [];
2801
2801
  const editPath = this.router.createUrlTree(['.', 'dataset', 'edit', dataset.id], {
@@ -2824,7 +2824,8 @@ class AdminSelectDatasetComponent extends SubscriptionnerDirective {
2824
2824
  icon: 'delete',
2825
2825
  moduleAccess: 'admin',
2826
2826
  pageAccess: 'dataset',
2827
- actionAccess: 'write'
2827
+ actionAccess: 'write',
2828
+ disabled: versions.filter((v) => v.dataset === dataset.id).length > 0
2828
2829
  }
2829
2830
  ]
2830
2831
  }));