nuxeo-development-framework 6.1.8 → 6.1.9

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 (21) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +6024 -5961
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/tables/dynamic-table/dynamic-table/dynamic-table.component.js +2 -2
  4. package/esm2015/lib/components/tables/dynamic-table/public-api.js +1 -2
  5. package/esm2015/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.js +28 -26
  6. package/esm2015/lib/components/tables/ndf-table/services/ndf-table.service.js +10 -14
  7. package/esm2015/lib/components/tables/public-api.js +4 -3
  8. package/esm2015/lib/components/tables/shared/index.js +2 -0
  9. package/esm2015/lib/components/tables/shared/table-hooks.service.js +84 -0
  10. package/fesm2015/nuxeo-development-framework.js +6219 -6194
  11. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  12. package/lib/components/tables/dynamic-table/dynamic-table/dynamic-table.component.d.ts +1 -16
  13. package/lib/components/tables/dynamic-table/public-api.d.ts +0 -1
  14. package/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.d.ts +3 -1
  15. package/lib/components/tables/ndf-table/services/ndf-table.service.d.ts +0 -2
  16. package/lib/components/tables/public-api.d.ts +3 -2
  17. package/lib/components/tables/shared/index.d.ts +1 -0
  18. package/lib/components/tables/shared/table-hooks.service.d.ts +36 -0
  19. package/package.json +1 -1
  20. package/esm2015/lib/components/tables/dynamic-table/services/table-hooks.service.js +0 -56
  21. package/lib/components/tables/dynamic-table/services/table-hooks.service.d.ts +0 -13
@@ -1,8 +1,8 @@
1
1
  import { __rest } from "tslib";
2
2
  import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
3
3
  import _, { merge } from 'lodash';
4
- import { BehaviorSubject, combineLatest, forkJoin, of } from 'rxjs';
5
- import { catchError, filter, map, startWith, switchMap, takeUntil } from 'rxjs/operators';
4
+ import { BehaviorSubject, combineLatest, forkJoin, from, of, } from 'rxjs';
5
+ import { catchError, filter, map, startWith, switchMap, takeUntil, } from 'rxjs/operators';
6
6
  import { DestroySubject } from '../../../../../shared/components';
7
7
  import { COMPARISON_OPERATOR, HtmlDialogComponent, } from '../../../../ndf-filters';
8
8
  import { PAGE_SIZE } from '../../constants';
@@ -14,29 +14,30 @@ import * as i2 from "../../../dynamic-table";
14
14
  import * as i3 from "@ngx-translate/core";
15
15
  import * as i4 from "../../services";
16
16
  import * as i5 from "../../../../custom-toastr/services/custom-toastr.service";
17
- import * as i6 from "@angular/material/dialog";
18
- import * as i7 from "../../../../ndf-filters/containers/filters-panel/filters-panel.component";
19
- import * as i8 from "@angular/material/button";
20
- import * as i9 from "@angular/material/icon";
21
- import * as i10 from "../../components/text-search/text-search.component";
22
- import * as i11 from "../../../../ndf-config-editor/public/editor-navigate-button";
23
- import * as i12 from "../../components/table-export/table-export.component";
24
- import * as i13 from "../../components/sorting-list/sorting-list.component";
25
- import * as i14 from "../../components/table-columns-toggler/table-columns-toggler.component";
26
- import * as i15 from "../../components/mode-toggler/mode-toggler.component";
27
- import * as i16 from "../../../dynamic-table/dynamic-table/dynamic-table.component";
28
- import * as i17 from "@angular/material/progress-spinner";
29
- import * as i18 from "../../../../no-data-found/no-data-found.component";
30
- import * as i19 from "../../../table/table/table.component";
31
- import * as i20 from "@angular/common";
32
- import * as i21 from "../../../../../shared/directives/fluid-height.directive";
33
- import * as i22 from "@angular/cdk/bidi";
34
- import * as i23 from "../../../dynamic-table/directives/empty-state.directive";
17
+ import * as i6 from "../../../shared";
18
+ import * as i7 from "@angular/material/dialog";
19
+ import * as i8 from "../../../../ndf-filters/containers/filters-panel/filters-panel.component";
20
+ import * as i9 from "@angular/material/button";
21
+ import * as i10 from "@angular/material/icon";
22
+ import * as i11 from "../../components/text-search/text-search.component";
23
+ import * as i12 from "../../../../ndf-config-editor/public/editor-navigate-button";
24
+ import * as i13 from "../../components/table-export/table-export.component";
25
+ import * as i14 from "../../components/sorting-list/sorting-list.component";
26
+ import * as i15 from "../../components/table-columns-toggler/table-columns-toggler.component";
27
+ import * as i16 from "../../components/mode-toggler/mode-toggler.component";
28
+ import * as i17 from "../../../dynamic-table/dynamic-table/dynamic-table.component";
29
+ import * as i18 from "@angular/material/progress-spinner";
30
+ import * as i19 from "../../../../no-data-found/no-data-found.component";
31
+ import * as i20 from "../../../table/table/table.component";
32
+ import * as i21 from "@angular/common";
33
+ import * as i22 from "../../../../../shared/directives/fluid-height.directive";
34
+ import * as i23 from "@angular/cdk/bidi";
35
+ import * as i24 from "../../../dynamic-table/directives/empty-state.directive";
35
36
  export class NdfTableComponent extends DestroySubject {
36
37
  /**
37
38
  *
38
39
  */
39
- constructor(_filtersMapper, _dynamicTableService, _translateService, _ngTableService, _toastrService, _ndfTableConfigurationService, _dialog) {
40
+ constructor(_filtersMapper, _dynamicTableService, _translateService, _ngTableService, _toastrService, _ndfTableConfigurationService, _tableHooksService, _dialog) {
40
41
  super();
41
42
  this._filtersMapper = _filtersMapper;
42
43
  this._dynamicTableService = _dynamicTableService;
@@ -44,6 +45,7 @@ export class NdfTableComponent extends DestroySubject {
44
45
  this._ngTableService = _ngTableService;
45
46
  this._toastrService = _toastrService;
46
47
  this._ndfTableConfigurationService = _ndfTableConfigurationService;
48
+ this._tableHooksService = _tableHooksService;
47
49
  this._dialog = _dialog;
48
50
  this._aggregationsSub = new BehaviorSubject(null);
49
51
  this._displayedColumnsSub = new BehaviorSubject([]);
@@ -284,7 +286,7 @@ export class NdfTableComponent extends DestroySubject {
284
286
  payload.reportMetaData.headers = headers.map((col) => _.get(currentTranslations, col));
285
287
  payload.reportMetaData.blobName = _.get(translations['ar'], blobNameKey);
286
288
  payload.reportMetaData.blobNameEn = _.get(translations['en'], blobNameKey);
287
- return this._ngTableService.exportTable(request, payload).pipe(catchError((_) => {
289
+ return from(this._tableHooksService.executeBeforeExport(payload, request)).pipe(switchMap(({ payload, request }) => this._ngTableService.exportTable(request, payload)), catchError(() => {
288
290
  this._toastrService.error('TABLE.EXPORT.RequestError');
289
291
  return of(false);
290
292
  }));
@@ -408,8 +410,8 @@ export class NdfTableComponent extends DestroySubject {
408
410
  });
409
411
  }
410
412
  }
411
- NdfTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableComponent, deps: [{ token: i1.FiltersMapperService }, { token: i2.DynamicTableService }, { token: i3.TranslateService }, { token: i4.NdfTableService }, { token: i5.CustomToastrService }, { token: i4.NdfTableConfigurationService }, { token: i6.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
412
- NdfTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NdfTableComponent, selector: "app-ndf-table", inputs: { rows: "rows", totalRecords: "totalRecords", autoCalculateHeight: "autoCalculateHeight", emptyMessage: "emptyMessage", activeQuery: "activeQuery", configPath: "configPath", styleClass: "styleClass", configTransformer: "configTransformer", tableKey: "tableKey", jsonEditorEnabled: "jsonEditorEnabled", config: "config", customCriteria: "customCriteria", searchTerm: "searchTerm" }, outputs: { onRowSelected: "onRowSelected", onRowIndexSelected: "onRowIndexSelected", actionOnRow: "actionOnRow", onGettingData: "onGettingData", onMultiRowSelected: "onMultiRowSelected", onLoading: "onLoading", onPage: "onPage", onInitialized: "onInitialized", onLoaded: "onLoaded", onQueryChange: "onQueryChange", onSort: "onSort" }, host: { properties: { "dir": "direction" }, classAttribute: "ndf-table" }, queries: [{ propertyName: "actionsTableTemplate", first: true, predicate: ACTIONS_TABLE_TEMPLATE, descendants: true, read: TemplateRef }, { propertyName: "searchTableTemplate", first: true, predicate: SEARCH_TABLE_TEMPLATE, descendants: true, read: TemplateRef }, { propertyName: "filterCustomTemplate", first: true, predicate: FILTER_CUSTOM_TEMPLATE, descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n *ngIf=\"tableConfig\"\r\n class=\"ndf-table__container\"\r\n [class.panel-opened]=\"isPanelOpened && filtersConfig\"\r\n [dir]=\"direction\"\r\n ndfFluidHeight\r\n cssVar=\"--ndf-table-height\"\r\n [calculate]=\"autoCalculateHeight\"\r\n>\r\n <div class=\"ndf-table__panel\" *ngIf=\"filtersConfig?.fields\">\r\n <app-filters-panel\r\n [fields]=\"filtersConfig.fields\"\r\n [aggregations]=\"aggregations$ | async\"\r\n (filterChanged)=\"filterChanged($event)\"\r\n [activeQuery]=\"activeQuery\"\r\n class=\"ndf-table__filters\"\r\n [customTemplateRef]=\"filterCustomTemplate\"\r\n ></app-filters-panel>\r\n </div>\r\n <div class=\"ndf-table__content\">\r\n <div class=\"ndf-table__header flex\">\r\n <div class=\"ndf-table__header__custom-actions flex gap-x-4 items-center\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"searchTableTemplate || defaultActionTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: tableConfig,\r\n panelOpened: isPanelOpened,\r\n togglePanel: togglePanel,\r\n openModal: openSearchModal,\r\n search: onTextSearch,\r\n clear: onClearSearch\r\n }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultActionTemplate>\r\n <button\r\n mat-stroked-button\r\n *ngIf=\"isPanelToggleAvailable && !!filtersConfig.fields?.length\"\r\n class=\"toggle-button\"\r\n (click)=\"togglePanel()\"\r\n >\r\n <mat-icon> filter_alt</mat-icon>\r\n </button>\r\n <app-text-search\r\n *ngIf=\"textSearchConfig\"\r\n [searchConfig]=\"textSearchConfig\"\r\n (openModal)=\"openSearchModal()\"\r\n [search]=\"textSearch$ | async\"\r\n (searchChange)=\"onTextSearch($event)\"\r\n (clear)=\"onClearSearch()\"\r\n ></app-text-search>\r\n </ng-template>\r\n </div>\r\n <div class=\"ndf-table__header__actions flex gap-x-4 items-center\">\r\n <app-editor-button\r\n *ngIf=\"jsonEditorEnabled && (tableKey || tableConfig?.key)\"\r\n [key]=\"tableKey || tableConfig?.key\"\r\n [type]=\"editorType\"\r\n ></app-editor-button>\r\n <ndf-table-export\r\n *ngIf=\"exportTableConfig?.enabled\"\r\n [config]=\"exportTableConfig\"\r\n (onExport)=\"exportTable($event)\"\r\n ></ndf-table-export>\r\n\r\n <table-sorting-list\r\n *ngIf=\"!!sortList?.length\"\r\n [sortList]=\"sortList\"\r\n (sortChanged)=\"sortChanged($event)\"\r\n ></table-sorting-list>\r\n <table-columns-toggler\r\n *ngIf=\"columnToggle\"\r\n [columns]=\"tableConfig.columns\"\r\n [prefix]=\"tableConfig.prefix\"\r\n [sortable]=\"columnsOptions?.sortable\"\r\n (columnsChanged)=\"columnsChanged($event)\"\r\n ></table-columns-toggler>\r\n <mode-toggler\r\n *ngIf=\"tableMode?.toggleMode\"\r\n [mode]=\"tableMode.mode || 'list'\"\r\n [modesList]=\"tableMode?.availableMode\"\r\n (modeChanged)=\"modeChanged($event)\"\r\n ></mode-toggler>\r\n <ng-container\r\n [ngTemplateOutlet]=\"actionsTableTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: tableConfig,\r\n panelOpened: isPanelOpened,\r\n togglePanel: togglePanel,\r\n openModal: openSearchModal,\r\n search: onTextSearch,\r\n clear: onClearSearch\r\n }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <cts-dynamic-table\r\n *ngIf=\"!tableConfig.isDataProvided\"\r\n class=\"ndf-table__table table-style\"\r\n [ngClass]=\"styleClass\"\r\n [columns]=\"displayedColumns$ | async\"\r\n [responsiveColumns]=\"displayedColumns$ | async\"\r\n [fullWidth]=\"tableConfig.fullWidth || 'auto'\"\r\n [pageSize]=\"tableConfig.pageSize || 10\"\r\n [pageNumber]=\"tableConfig.pageNumber || 1\"\r\n [pageProvider]=\"tableConfig.pageProvider\"\r\n [customUrl]=\"tableConfig.customUrl\"\r\n [quickFilter]=\"\r\n tableConfig.quickFilters\r\n ? { quickFilters: tableConfig.quickFilters }\r\n : undefined\r\n \"\r\n [defultSort]=\"tableConfig.defaultSort || defaultSort\"\r\n [sortingBy]=\"sortOption$ | async\"\r\n [entityType]=\"'all'\"\r\n [fields]=\"tableConfig.fields\"\r\n [tableMode]=\"viewMode$ | async\"\r\n [componentName]=\"tableMode?.['componentName']\"\r\n [range]=\"tableConfig?.range\"\r\n [isSearchPage]=\"tableConfig?.isSearchPage\"\r\n [multiSelectRows]=\"tableConfig?.multiSelectRows\"\r\n [customFirstRow]=\"tableConfig?.customFirstRow\"\r\n [highlightSelectedCard]=\"tableConfig?.highlightSelectedCard\"\r\n [showActionsAsMenu]=\"tableConfig?.showActionsAsMenu\"\r\n [filterParams]=\"tableConfig?.filterParams\"\r\n [format]=\"tableConfig?.format || 'MMMM d, y'\"\r\n [pageSizes]=\"tableConfig?.pageSizes || defaultPageSizes\"\r\n [prefix]=\"tableConfig.prefix || ''\"\r\n [rowCursor]=\"true\"\r\n [queryParam]=\"tableConfig.queryParam\"\r\n [customFilters]=\"searchAndFilters$ | async\"\r\n [tableActions]=\"tableConfig.tableActions\"\r\n [requestActions]=\"tableConfig?.requestActions\"\r\n [headers]=\"tableConfig.headers\"\r\n (onRowSelected)=\"onRowSelected.emit($event)\"\r\n (onRowIndexSelected)=\"onRowIndexSelected.emit($event)\"\r\n (actionOnRow)=\"actionOnRow.emit($event)\"\r\n (onGettingData)=\"onGettingData.emit($event)\"\r\n (onLoad)=\"onLoad($event)\"\r\n (onInitialize)=\"onInitialize($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelected.emit($event)\"\r\n (onLoading)=\"onLoading.emit($event)\"\r\n (onPage)=\"onPageChanged($event)\"\r\n [isLegacyMode]=\"false\"\r\n [showTotalRecord]=\"true\"\r\n (sortChanged)=\"onSortChanged($event)\"\r\n >\r\n <ng-template\r\n emptyTemplate\r\n let-isLoading\r\n let-rows=\"rows\"\r\n let-initialized=\"initialized\"\r\n >\r\n <div class=\"loading-data\" *ngIf=\"isLoading && initialized\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-center h-5/6\"\r\n *ngIf=\"!isLoading && !rows.length\"\r\n >\r\n <app-no-data-found\r\n class=\"mt-4\"\r\n [message]=\"emptyMessage\"\r\n ></app-no-data-found>\r\n </div>\r\n </ng-template>\r\n </cts-dynamic-table>\r\n\r\n <cts-table\r\n *ngIf=\"tableConfig.isDataProvided\"\r\n [ngClass]=\"styleClass\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [columns]=\"displayedColumns$ | async\"\r\n [responsiveColumns]=\"displayedColumns$ | async\"\r\n [rowCursor]=\"true\"\r\n [fullWidth]=\"tableConfig.fullWidth || 'auto'\"\r\n [entityType]=\"'all'\"\r\n [prefix]=\"tableConfig.prefix || ''\"\r\n [tableMode]=\"viewMode$ | async\"\r\n [componentName]=\"tableMode?.['componentName']\"\r\n [multiSelectRows]=\"tableConfig?.multiSelectRows\"\r\n [customFirstRow]=\"tableConfig?.customFirstRow\"\r\n [tableActions]=\"tableConfig.tableActions\"\r\n [showActionsAsMenu]=\"tableConfig?.showActionsAsMenu\"\r\n [defultSort]=\"tableConfig.defaultSort || defaultSort\"\r\n [format]=\"tableConfig?.format || 'MMMM d, y'\"\r\n [highlightSelectedCard]=\"tableConfig?.highlightSelectedCard\"\r\n (onRowSelected)=\"onRowSelected.emit($event)\"\r\n (onRowIndexSelected)=\"onRowIndexSelected.emit($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelected.emit($event)\"\r\n (actionOnRow)=\"actionOnRow.emit($event)\"\r\n (onSorting)=\"onSortChanged($event)\"\r\n ></cts-table>\r\n </div>\r\n</div>\r\n", styles: [":host{padding-inline:var(--ndf-tbl-inline-padding, 1rem);padding-block:var(--ndf-tbl-block-padding, 1rem);border:var(--ndf-tbl-border, solid transparent);border-width:var(--ndf-table-border-width, 0);border-radius:var(--ndf-tbl-border-radius, 0);height:100%;position:relative;display:flex;flex-direction:column;background-color:var(--ndf-tbl-background, #fff);box-sizing:border-box;max-width:100%;flex:0 0 100%}:host [dir=ltr]{--ndf-tbl-panel-translateX: -100%}:host:before,:host:after{box-sizing:border-box}::ng-deep .wrapping,::ng-deep .wrapping .table-reposition{overflow:visible}.ndf-table__container{--table-div-height: auto;--table-reposition-overflow-y: visible;--table-div-overflow: visible;--panel-width: var(--ndf-tbl-panel-width, 18rem);position:relative;overflow:hidden;display:grid;transition:all .2s;max-width:100%;width:100%;height:var(--ndf-tbl-height, calc(var(--ndf-table-height, auto) - calc(var(--ndf-tbl-block-padding, 1rem) * 2.5)));flex-grow:1;grid-gap:var(--ndf-table-container-gap, .5rem);gap:var(--ndf-table-container-gap, .5rem)}.ndf-table__container.panel-opened{--ndf-tbl-panel-translateX: 0;--ndf-tbl-content-pis: var(--panel-width)}.ndf-table__panel,.ndf-table__content{overflow:auto;transition:all .2s}.ndf-table__panel{position:absolute;width:var(--panel-width);height:100%;transform:translate(var(--ndf-tbl-panel-translateX, 100%));padding-inline:var(--ndf-tbl-panel-inline-padding, .5rem);padding-block:var(--ndf-tbl-panel-block-padding, .5rem);background:var(--ndf-tbl-panel-background, #fff);z-index:1}.ndf-table__content{flex-grow:1;padding-inline-start:var(--ndf-tbl-content-pis, 0);padding-block-end:var(--ndf-tbl-content-pbe, 1rem);overflow-y:var(--ndf-tbl-content-overflow-y, auto);max-height:var(--ndf-tbl-content-max-height, var(--ndf-table-height));display:flex;flex-direction:column;height:var(--ndf-tbl-content-height, auto)}.ndf-table__header{background-color:var(--ndf-tbl-background, #fff);flex-direction:var(--ndf-tbl-header-direction, row);justify-content:var(--ndf-tbl-header-justify, space-between);align-items:var(--ndf-tbl-header-items, center);padding-inline:var(--ndf-tbl-header-padding-inline, .5rem);padding-block:var(--ndf-tbl-header-padding-block, 0 .5rem);position:var(--ndf-tbl-header-position, sticky);top:0;z-index:1}.ndf-table__header__actions{justify-content:var(--ndf-tbl-actions-justify, flex-end)}.ndf-table__header__custom-actions .toggle-button{min-width:0;padding:0 10px}.ndf-table__table{flex-grow:1;display:flex;flex-direction:column}.ndf-table__table.no-data{--table-div-height: auto}.loading-data{position:absolute;inset:0;display:grid;place-items:center;background:var(--loading-data-background, rgba(255, 255, 255, .2));-webkit-backdrop-filter:var(--loading-data-backdrop-filter, blur(3px));backdrop-filter:var(--loading-data-backdrop-filter, blur(3px))}\n"], components: [{ type: i7.FiltersPanelComponent, selector: "app-filters-panel", inputs: ["aggregations", "fields", "activeQuery"], outputs: ["filterChanged"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.TextSearchComponent, selector: "app-text-search", inputs: ["searchConfig", "search"], outputs: ["searchChange", "openModal", "clear"] }, { type: i11.EditorButtonComponent, selector: "app-editor-button", inputs: ["type", "key"] }, { type: i12.TableExportComponent, selector: "ndf-table-export", inputs: ["config"], outputs: ["onExport"] }, { type: i13.SortingListComponent, selector: "table-sorting-list", inputs: ["sortList"], outputs: ["sortChanged"] }, { type: i14.TableColumnsTogglerComponent, selector: "table-columns-toggler", inputs: ["prefix", "sortable", "columns"], outputs: ["columnsChanged"] }, { type: i15.ModeTogglerComponent, selector: "mode-toggler", inputs: ["modesList", "mode"], outputs: ["modeChanged"] }, { type: i16.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "higlightUnread", "isLegacyMode", "showTotalRecord", "pageNumber", "sortingBy", "queryParam", "customFilters", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "componentName", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "skipAggregation", "customUrl", "format", "requestActions", "pageSizes"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading", "sortChanged", "onPageChange", "onPage", "onLoad", "onInitialize"] }, { type: i17.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i18.NoDataFoundComponent, selector: "app-no-data-found", inputs: ["message", "width", "height"] }, { type: i19.TableComponent, selector: "cts-table", inputs: ["rows", "columns", "responsiveColumns", "entityType", "prefix", "pageCount", "totalRecords", "rowCursor", "fullWidth", "vocItemTranslationPrefix", "higlightUnread", "tableMode", "componentName", "tableActions", "format", "defultSort", "highlightSelectedCard", "multiSelectRows", "customFirstRow", "showActionsAsMenu", "messages", "defaultColumnSize"], outputs: ["onRowSelected", "onRowIndexSelected", "onIconSelected", "actionOnRow", "onSorting", "onMultiRowSelected"] }], directives: [{ type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.FluidHeightDirective, selector: "[ndfFluidHeight]", inputs: ["minHeight", "ndfFluidHeight", "subtractItems", "decrease", "delay", "cssVar", "calculate", "inlineStyle"], exportAs: ["ndfFluidHeight"] }, { type: i22.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i20.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i23.EmptyTemplateDirective, selector: "[emptyTemplate]" }], pipes: { "async": i20.AsyncPipe } });
413
+ NdfTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableComponent, deps: [{ token: i1.FiltersMapperService }, { token: i2.DynamicTableService }, { token: i3.TranslateService }, { token: i4.NdfTableService }, { token: i5.CustomToastrService }, { token: i4.NdfTableConfigurationService }, { token: i6.TableHooksService }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
414
+ NdfTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NdfTableComponent, selector: "app-ndf-table", inputs: { rows: "rows", totalRecords: "totalRecords", autoCalculateHeight: "autoCalculateHeight", emptyMessage: "emptyMessage", activeQuery: "activeQuery", configPath: "configPath", styleClass: "styleClass", configTransformer: "configTransformer", tableKey: "tableKey", jsonEditorEnabled: "jsonEditorEnabled", config: "config", customCriteria: "customCriteria", searchTerm: "searchTerm" }, outputs: { onRowSelected: "onRowSelected", onRowIndexSelected: "onRowIndexSelected", actionOnRow: "actionOnRow", onGettingData: "onGettingData", onMultiRowSelected: "onMultiRowSelected", onLoading: "onLoading", onPage: "onPage", onInitialized: "onInitialized", onLoaded: "onLoaded", onQueryChange: "onQueryChange", onSort: "onSort" }, host: { properties: { "dir": "direction" }, classAttribute: "ndf-table" }, queries: [{ propertyName: "actionsTableTemplate", first: true, predicate: ACTIONS_TABLE_TEMPLATE, descendants: true, read: TemplateRef }, { propertyName: "searchTableTemplate", first: true, predicate: SEARCH_TABLE_TEMPLATE, descendants: true, read: TemplateRef }, { propertyName: "filterCustomTemplate", first: true, predicate: FILTER_CUSTOM_TEMPLATE, descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n *ngIf=\"tableConfig\"\r\n class=\"ndf-table__container\"\r\n [class.panel-opened]=\"isPanelOpened && filtersConfig\"\r\n [dir]=\"direction\"\r\n ndfFluidHeight\r\n cssVar=\"--ndf-table-height\"\r\n [calculate]=\"autoCalculateHeight\"\r\n>\r\n <div class=\"ndf-table__panel\" *ngIf=\"filtersConfig?.fields\">\r\n <app-filters-panel\r\n [fields]=\"filtersConfig.fields\"\r\n [aggregations]=\"aggregations$ | async\"\r\n (filterChanged)=\"filterChanged($event)\"\r\n [activeQuery]=\"activeQuery\"\r\n class=\"ndf-table__filters\"\r\n [customTemplateRef]=\"filterCustomTemplate\"\r\n ></app-filters-panel>\r\n </div>\r\n <div class=\"ndf-table__content\">\r\n <div class=\"ndf-table__header flex\">\r\n <div class=\"ndf-table__header__custom-actions flex gap-x-4 items-center\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"searchTableTemplate || defaultActionTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: tableConfig,\r\n panelOpened: isPanelOpened,\r\n togglePanel: togglePanel,\r\n openModal: openSearchModal,\r\n search: onTextSearch,\r\n clear: onClearSearch\r\n }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultActionTemplate>\r\n <button\r\n mat-stroked-button\r\n *ngIf=\"isPanelToggleAvailable && !!filtersConfig.fields?.length\"\r\n class=\"toggle-button\"\r\n (click)=\"togglePanel()\"\r\n >\r\n <mat-icon> filter_alt</mat-icon>\r\n </button>\r\n <app-text-search\r\n *ngIf=\"textSearchConfig\"\r\n [searchConfig]=\"textSearchConfig\"\r\n (openModal)=\"openSearchModal()\"\r\n [search]=\"textSearch$ | async\"\r\n (searchChange)=\"onTextSearch($event)\"\r\n (clear)=\"onClearSearch()\"\r\n ></app-text-search>\r\n </ng-template>\r\n </div>\r\n <div class=\"ndf-table__header__actions flex gap-x-4 items-center\">\r\n <app-editor-button\r\n *ngIf=\"jsonEditorEnabled && (tableKey || tableConfig?.key)\"\r\n [key]=\"tableKey || tableConfig?.key\"\r\n [type]=\"editorType\"\r\n ></app-editor-button>\r\n <ndf-table-export\r\n *ngIf=\"exportTableConfig?.enabled\"\r\n [config]=\"exportTableConfig\"\r\n (onExport)=\"exportTable($event)\"\r\n ></ndf-table-export>\r\n\r\n <table-sorting-list\r\n *ngIf=\"!!sortList?.length\"\r\n [sortList]=\"sortList\"\r\n (sortChanged)=\"sortChanged($event)\"\r\n ></table-sorting-list>\r\n <table-columns-toggler\r\n *ngIf=\"columnToggle\"\r\n [columns]=\"tableConfig.columns\"\r\n [prefix]=\"tableConfig.prefix\"\r\n [sortable]=\"columnsOptions?.sortable\"\r\n (columnsChanged)=\"columnsChanged($event)\"\r\n ></table-columns-toggler>\r\n <mode-toggler\r\n *ngIf=\"tableMode?.toggleMode\"\r\n [mode]=\"tableMode.mode || 'list'\"\r\n [modesList]=\"tableMode?.availableMode\"\r\n (modeChanged)=\"modeChanged($event)\"\r\n ></mode-toggler>\r\n <ng-container\r\n [ngTemplateOutlet]=\"actionsTableTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: tableConfig,\r\n panelOpened: isPanelOpened,\r\n togglePanel: togglePanel,\r\n openModal: openSearchModal,\r\n search: onTextSearch,\r\n clear: onClearSearch\r\n }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <cts-dynamic-table\r\n *ngIf=\"!tableConfig.isDataProvided\"\r\n class=\"ndf-table__table table-style\"\r\n [ngClass]=\"styleClass\"\r\n [columns]=\"displayedColumns$ | async\"\r\n [responsiveColumns]=\"displayedColumns$ | async\"\r\n [fullWidth]=\"tableConfig.fullWidth || 'auto'\"\r\n [pageSize]=\"tableConfig.pageSize || 10\"\r\n [pageNumber]=\"tableConfig.pageNumber || 1\"\r\n [pageProvider]=\"tableConfig.pageProvider\"\r\n [customUrl]=\"tableConfig.customUrl\"\r\n [quickFilter]=\"\r\n tableConfig.quickFilters\r\n ? { quickFilters: tableConfig.quickFilters }\r\n : undefined\r\n \"\r\n [defultSort]=\"tableConfig.defaultSort || defaultSort\"\r\n [sortingBy]=\"sortOption$ | async\"\r\n [entityType]=\"'all'\"\r\n [fields]=\"tableConfig.fields\"\r\n [tableMode]=\"viewMode$ | async\"\r\n [componentName]=\"tableMode?.['componentName']\"\r\n [range]=\"tableConfig?.range\"\r\n [isSearchPage]=\"tableConfig?.isSearchPage\"\r\n [multiSelectRows]=\"tableConfig?.multiSelectRows\"\r\n [customFirstRow]=\"tableConfig?.customFirstRow\"\r\n [highlightSelectedCard]=\"tableConfig?.highlightSelectedCard\"\r\n [showActionsAsMenu]=\"tableConfig?.showActionsAsMenu\"\r\n [filterParams]=\"tableConfig?.filterParams\"\r\n [format]=\"tableConfig?.format || 'MMMM d, y'\"\r\n [pageSizes]=\"tableConfig?.pageSizes || defaultPageSizes\"\r\n [prefix]=\"tableConfig.prefix || ''\"\r\n [rowCursor]=\"true\"\r\n [queryParam]=\"tableConfig.queryParam\"\r\n [customFilters]=\"searchAndFilters$ | async\"\r\n [tableActions]=\"tableConfig.tableActions\"\r\n [requestActions]=\"tableConfig?.requestActions\"\r\n [headers]=\"tableConfig.headers\"\r\n (onRowSelected)=\"onRowSelected.emit($event)\"\r\n (onRowIndexSelected)=\"onRowIndexSelected.emit($event)\"\r\n (actionOnRow)=\"actionOnRow.emit($event)\"\r\n (onGettingData)=\"onGettingData.emit($event)\"\r\n (onLoad)=\"onLoad($event)\"\r\n (onInitialize)=\"onInitialize($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelected.emit($event)\"\r\n (onLoading)=\"onLoading.emit($event)\"\r\n (onPage)=\"onPageChanged($event)\"\r\n [isLegacyMode]=\"false\"\r\n [showTotalRecord]=\"true\"\r\n (sortChanged)=\"onSortChanged($event)\"\r\n >\r\n <ng-template\r\n emptyTemplate\r\n let-isLoading\r\n let-rows=\"rows\"\r\n let-initialized=\"initialized\"\r\n >\r\n <div class=\"loading-data\" *ngIf=\"isLoading && initialized\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-center h-5/6\"\r\n *ngIf=\"!isLoading && !rows.length\"\r\n >\r\n <app-no-data-found\r\n class=\"mt-4\"\r\n [message]=\"emptyMessage\"\r\n ></app-no-data-found>\r\n </div>\r\n </ng-template>\r\n </cts-dynamic-table>\r\n\r\n <cts-table\r\n *ngIf=\"tableConfig.isDataProvided\"\r\n [ngClass]=\"styleClass\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [columns]=\"displayedColumns$ | async\"\r\n [responsiveColumns]=\"displayedColumns$ | async\"\r\n [rowCursor]=\"true\"\r\n [fullWidth]=\"tableConfig.fullWidth || 'auto'\"\r\n [entityType]=\"'all'\"\r\n [prefix]=\"tableConfig.prefix || ''\"\r\n [tableMode]=\"viewMode$ | async\"\r\n [componentName]=\"tableMode?.['componentName']\"\r\n [multiSelectRows]=\"tableConfig?.multiSelectRows\"\r\n [customFirstRow]=\"tableConfig?.customFirstRow\"\r\n [tableActions]=\"tableConfig.tableActions\"\r\n [showActionsAsMenu]=\"tableConfig?.showActionsAsMenu\"\r\n [defultSort]=\"tableConfig.defaultSort || defaultSort\"\r\n [format]=\"tableConfig?.format || 'MMMM d, y'\"\r\n [highlightSelectedCard]=\"tableConfig?.highlightSelectedCard\"\r\n (onRowSelected)=\"onRowSelected.emit($event)\"\r\n (onRowIndexSelected)=\"onRowIndexSelected.emit($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelected.emit($event)\"\r\n (actionOnRow)=\"actionOnRow.emit($event)\"\r\n (onSorting)=\"onSortChanged($event)\"\r\n ></cts-table>\r\n </div>\r\n</div>\r\n", styles: [":host{padding-inline:var(--ndf-tbl-inline-padding, 1rem);padding-block:var(--ndf-tbl-block-padding, 1rem);border:var(--ndf-tbl-border, solid transparent);border-width:var(--ndf-table-border-width, 0);border-radius:var(--ndf-tbl-border-radius, 0);height:100%;position:relative;display:flex;flex-direction:column;background-color:var(--ndf-tbl-background, #fff);box-sizing:border-box;max-width:100%;flex:0 0 100%}:host [dir=ltr]{--ndf-tbl-panel-translateX: -100%}:host:before,:host:after{box-sizing:border-box}::ng-deep .wrapping,::ng-deep .wrapping .table-reposition{overflow:visible}.ndf-table__container{--table-div-height: auto;--table-reposition-overflow-y: visible;--table-div-overflow: visible;--panel-width: var(--ndf-tbl-panel-width, 18rem);position:relative;overflow:hidden;display:grid;transition:all .2s;max-width:100%;width:100%;height:var(--ndf-tbl-height, calc(var(--ndf-table-height, auto) - calc(var(--ndf-tbl-block-padding, 1rem) * 2.5)));flex-grow:1;grid-gap:var(--ndf-table-container-gap, .5rem);gap:var(--ndf-table-container-gap, .5rem)}.ndf-table__container.panel-opened{--ndf-tbl-panel-translateX: 0;--ndf-tbl-content-pis: var(--panel-width)}.ndf-table__panel,.ndf-table__content{overflow:auto;transition:all .2s}.ndf-table__panel{position:absolute;width:var(--panel-width);height:100%;transform:translate(var(--ndf-tbl-panel-translateX, 100%));padding-inline:var(--ndf-tbl-panel-inline-padding, .5rem);padding-block:var(--ndf-tbl-panel-block-padding, .5rem);background:var(--ndf-tbl-panel-background, #fff);z-index:1}.ndf-table__content{flex-grow:1;padding-inline-start:var(--ndf-tbl-content-pis, 0);padding-block-end:var(--ndf-tbl-content-pbe, 1rem);overflow-y:var(--ndf-tbl-content-overflow-y, auto);max-height:var(--ndf-tbl-content-max-height, var(--ndf-table-height));display:flex;flex-direction:column;height:var(--ndf-tbl-content-height, auto)}.ndf-table__header{background-color:var(--ndf-tbl-background, #fff);flex-direction:var(--ndf-tbl-header-direction, row);justify-content:var(--ndf-tbl-header-justify, space-between);align-items:var(--ndf-tbl-header-items, center);padding-inline:var(--ndf-tbl-header-padding-inline, .5rem);padding-block:var(--ndf-tbl-header-padding-block, 0 .5rem);position:var(--ndf-tbl-header-position, sticky);top:0;z-index:1}.ndf-table__header__actions{justify-content:var(--ndf-tbl-actions-justify, flex-end)}.ndf-table__header__custom-actions .toggle-button{min-width:0;padding:0 10px}.ndf-table__table{flex-grow:1;display:flex;flex-direction:column}.ndf-table__table.no-data{--table-div-height: auto}.loading-data{position:absolute;inset:0;display:grid;place-items:center;background:var(--loading-data-background, rgba(255, 255, 255, .2));-webkit-backdrop-filter:var(--loading-data-backdrop-filter, blur(3px));backdrop-filter:var(--loading-data-backdrop-filter, blur(3px))}\n"], components: [{ type: i8.FiltersPanelComponent, selector: "app-filters-panel", inputs: ["aggregations", "fields", "activeQuery"], outputs: ["filterChanged"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.TextSearchComponent, selector: "app-text-search", inputs: ["searchConfig", "search"], outputs: ["searchChange", "openModal", "clear"] }, { type: i12.EditorButtonComponent, selector: "app-editor-button", inputs: ["type", "key"] }, { type: i13.TableExportComponent, selector: "ndf-table-export", inputs: ["config"], outputs: ["onExport"] }, { type: i14.SortingListComponent, selector: "table-sorting-list", inputs: ["sortList"], outputs: ["sortChanged"] }, { type: i15.TableColumnsTogglerComponent, selector: "table-columns-toggler", inputs: ["prefix", "sortable", "columns"], outputs: ["columnsChanged"] }, { type: i16.ModeTogglerComponent, selector: "mode-toggler", inputs: ["modesList", "mode"], outputs: ["modeChanged"] }, { type: i17.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "higlightUnread", "isLegacyMode", "showTotalRecord", "pageNumber", "sortingBy", "queryParam", "customFilters", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "componentName", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "skipAggregation", "customUrl", "format", "requestActions", "pageSizes"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading", "sortChanged", "onPageChange", "onPage", "onLoad", "onInitialize"] }, { type: i18.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i19.NoDataFoundComponent, selector: "app-no-data-found", inputs: ["message", "width", "height"] }, { type: i20.TableComponent, selector: "cts-table", inputs: ["rows", "columns", "responsiveColumns", "entityType", "prefix", "pageCount", "totalRecords", "rowCursor", "fullWidth", "vocItemTranslationPrefix", "higlightUnread", "tableMode", "componentName", "tableActions", "format", "defultSort", "highlightSelectedCard", "multiSelectRows", "customFirstRow", "showActionsAsMenu", "messages", "defaultColumnSize"], outputs: ["onRowSelected", "onRowIndexSelected", "onIconSelected", "actionOnRow", "onSorting", "onMultiRowSelected"] }], directives: [{ type: i21.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i22.FluidHeightDirective, selector: "[ndfFluidHeight]", inputs: ["minHeight", "ndfFluidHeight", "subtractItems", "decrease", "delay", "cssVar", "calculate", "inlineStyle"], exportAs: ["ndfFluidHeight"] }, { type: i23.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i21.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i21.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i24.EmptyTemplateDirective, selector: "[emptyTemplate]" }], pipes: { "async": i21.AsyncPipe } });
413
415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableComponent, decorators: [{
414
416
  type: Component,
415
417
  args: [{
@@ -421,7 +423,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
421
423
  '[dir]': 'direction',
422
424
  },
423
425
  }]
424
- }], ctorParameters: function () { return [{ type: i1.FiltersMapperService }, { type: i2.DynamicTableService }, { type: i3.TranslateService }, { type: i4.NdfTableService }, { type: i5.CustomToastrService }, { type: i4.NdfTableConfigurationService }, { type: i6.MatDialog }]; }, propDecorators: { rows: [{
426
+ }], ctorParameters: function () { return [{ type: i1.FiltersMapperService }, { type: i2.DynamicTableService }, { type: i3.TranslateService }, { type: i4.NdfTableService }, { type: i5.CustomToastrService }, { type: i4.NdfTableConfigurationService }, { type: i6.TableHooksService }, { type: i7.MatDialog }]; }, propDecorators: { rows: [{
425
427
  type: Input
426
428
  }], totalRecords: [{
427
429
  type: Input
@@ -479,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
479
481
  type: ContentChild,
480
482
  args: [FILTER_CUSTOM_TEMPLATE, { read: TemplateRef }]
481
483
  }] } });
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL25kZi10YWJsZS9jb250YWluZXJzL25kZi10YWJsZS9uZGYtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvbmRmLXRhYmxlL2NvbnRhaW5lcnMvbmRmLXRhYmxlL25kZi10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDTixlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFFUixFQUFFLEVBQ0YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixHQUFHLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEUsT0FBTyxFQUVOLG1CQUFtQixFQUVuQixtQkFBbUIsR0FFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIscUJBQXFCLEdBQ3JCLE1BQU0s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Q0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdPLE1BQU07c0JBQWxCLEtBQUs7Z0JBUU8sY0FBYztzQkFBMUIsS0FBSztnQkFNTyxVQUFVO3NCQUF0QixLQUFLO2dCQU1JLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUdQLG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzNELG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzFELG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XHJcbmltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdENvbnRlbnRDaGlsZCxcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5wdXQsXHJcblx0T25DaGFuZ2VzLFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFRlbXBsYXRlUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3IvcGFnaW5hdG9yJztcclxuaW1wb3J0IF8sIHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQge1xyXG5cdEJlaGF2aW9yU3ViamVjdCxcclxuXHRjb21iaW5lTGF0ZXN0LFxyXG5cdGZvcmtKb2luLFxyXG5cdE9ic2VydmFibGUsXHJcblx0b2ZcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuXHRjYXRjaEVycm9yLFxyXG5cdGZpbHRlcixcclxuXHRtYXAsXHJcblx0c3RhcnRXaXRoLFxyXG5cdHN3aXRjaE1hcCxcclxuXHR0YWtlVW50aWxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERlc3Ryb3lTdWJqZWN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBOdXhlb1BhZ2luYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRBZ2dyZWdhdGlvblJlc3BvbnNlLFxyXG5cdENPTVBBUklTT05fT1BFUkFUT1IsXHJcblx0Rm9ybVF1ZXJ5TW9kZWwsXHJcblx0SHRtbERpYWxvZ0NvbXBvbmVudCxcclxuXHRIdG1sRGlhbG9nQ29uZmlnLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL25kZi1maWx0ZXJzJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2R5bmFtaWMtdGFibGUnO1xyXG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdEFDVElPTlNfVEFCTEVfVEVNUExBVEUsXHJcblx0RklMVEVSX0NVU1RPTV9URU1QTEFURSxcclxuXHRTRUFSQ0hfVEFCTEVfVEVNUExBVEUsXHJcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7XHJcblx0Q3VzdG9tQ3JpdGVyaWFNb2RlbCxcclxuXHRFeHBvcnRUeXBlLFxyXG5cdE5kZkV4cG9ydFBheWxvYWQsXHJcblx0TmRmVGFibGVDb25maWcsXHJcblx0U29ydFRhYmxlSXRlbSxcclxuXHRUYWJsZUNvbHVtbkNvbmZpZyxcclxuXHRUYWJsZVNvcnRPcHRpb25zLFxyXG5cdFRhYmxlVmlld01vZGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTmRmVGFibGVDb25maWd1cmF0aW9uU2VydmljZSwgTmRmVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5cclxuaW1wb3J0IHsgTkRGX0VESVRPUl9UWVBFIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkJztcclxuaW1wb3J0IHsgRmlsdGVyc01hcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9uZGYtZmlsdGVycy9zZXJ2aWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1uZGYtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZGYtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25kZi10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAnbmRmLXRhYmxlJyxcclxuICAgICdbZGlyXSc6ICdkaXJlY3Rpb24nLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZGZUYWJsZUNvbXBvbmVudCBleHRlbmRzIERlc3Ryb3lTdWJqZWN0IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9hZ2dyZWdhdGlvbnNTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgUmVjb3JkPHN0cmluZywgQWdncmVnYXRpb25SZXNwb25zZT5cclxuICA+KG51bGwpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BsYXllZENvbHVtbnNTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgVGFibGVDb2x1bW5Db25maWdbXVxyXG4gID4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnRPcHRpb25TdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlU29ydE9wdGlvbnM+KG51bGwpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdNb2RlU3ViID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZVZpZXdNb2RlPignbGlzdCcpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RleHRTZWFyY2hTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZENyaXRlcmlhU3ViID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICBwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgY3VycmVudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gIH0+KG51bGwpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21Dcml0ZXJpYVN1YiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEN1c3RvbUNyaXRlcmlhTW9kZWw+KHtcclxuICAgICAgcGFyYW1zOiB7fSxcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIHByZWRpY2F0ZUxpc3Q6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0aW9ucyQgPSB0aGlzLl9hZ2dyZWdhdGlvbnNTdWIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcmVhZG9ubHkgZGlzcGxheWVkQ29sdW1ucyQgPSB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zU3ViLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJlYWRvbmx5IHNvcnRPcHRpb24kID0gdGhpcy5fc29ydE9wdGlvblN1Yi5hc09ic2VydmFibGUoKTtcclxuICByZWFkb25seSB2aWV3TW9kZSQgPSB0aGlzLl92aWV3TW9kZVN1Yi5hc09ic2VydmFibGUoKTtcclxuICByZWFkb25seSBjdXN0b21GaWx0ZXJzJCA9IHRoaXMuX2N1c3RvbUNyaXRlcmlhU3ViLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJlYWRvbmx5IHRleHRTZWFyY2gkID0gdGhpcy5fdGV4dFNlYXJjaFN1Yi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcmVhZG9ubHkgc2VhcmNoQW5kRmlsdGVycyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgIHRoaXMudGV4dFNlYXJjaCQsXHJcbiAgICB0aGlzLmN1c3RvbUZpbHRlcnMkLFxyXG4gIF0pLnBpcGUobWFwKChyZXMpID0+IHRoaXMuX3ByZXBhcmVTZWFyY2gocmVzKSkpO1xyXG4gIEBJbnB1dCgpIHJvd3M6IEFycmF5PHVua25vd24+O1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGF1dG9DYWxjdWxhdGVIZWlnaHQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICd0YWJsZV9ub0RhdGEnO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZVF1ZXJ5OiBGb3JtUXVlcnlNb2RlbDtcclxuICBASW5wdXQoKSBjb25maWdQYXRoOiBzdHJpbmcgPSAndGFibGVzJztcclxuICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgY29uZmlnVHJhbnNmb3JtZXI6IChcclxuICAgIGNvbmZpZzogTmRmVGFibGVDb25maWdcclxuICApID0+IE9ic2VydmFibGU8TmRmVGFibGVDb25maWc+O1xyXG4gIEBJbnB1dCgpIHRhYmxlS2V5OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGpzb25FZGl0b3JFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2NvbmZpZzogTmRmVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgc2V0IGNvbmZpZyhjb25maWc6IE5kZlRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgfVxyXG5cclxuICBnZXQgdGFibGVDb25maWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVDb25maWdTdWIuZ2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBjdXN0b21Dcml0ZXJpYShjcml0ZXJpYTogQ3VzdG9tQ3JpdGVyaWFNb2RlbCkge1xyXG4gICAgaWYgKGNyaXRlcmlhKSB7XHJcbiAgICAgIHRoaXMuX2N1c3RvbUNyaXRlcmlhU3ViLm5leHQoY3JpdGVyaWEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHNlYXJjaFRlcm0odmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3RleHRTZWFyY2hTdWIubmV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Sb3dJbmRleFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25PblJvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25HZXR0aW5nRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25NdWx0aVJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25Jbml0aWFsaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8TnV4ZW9QYWdpbmF0aW9uPGFueT4+KCk7XHJcbiAgQE91dHB1dCgpIG9uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOdXhlb1BhZ2luYXRpb248YW55Pj4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uUXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0T3B0aW9ucz4oKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBQ1RJT05TX1RBQkxFX1RFTVBMQVRFLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgYWN0aW9uc1RhYmxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChTRUFSQ0hfVEFCTEVfVEVNUExBVEUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBzZWFyY2hUYWJsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBDb250ZW50Q2hpbGQoRklMVEVSX0NVU1RPTV9URU1QTEFURSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGZpbHRlckN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBwcml2YXRlIF90YWJsZUNvbmZpZ1N1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmRmVGFibGVDb25maWc+KG51bGwpO1xyXG5cclxuICBnZXQgb3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcnNDb25maWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnRMaXN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uc29ydExpc3QgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXQgY29sdW1uc09wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZz8ub3B0aW9ucz8uY29sdW1ucztcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5Ub2dnbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zT3B0aW9ucz8udG9nZ2xlID8/IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQgdGFibGVNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8udGFibGVNb2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhbmVsQ29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVycz8ucGFuZWw7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNQYW5lbFRvZ2dsZUF2YWlsYWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnBhbmVsQ29uZmlnPy50b2dnbGVCdXR0b24gPz8gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldCB0ZXh0U2VhcmNoQ29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uc2VhcmNoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlclJlbG9hZENvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LmZpbHRlcnM/LnJlbG9hZDtcclxuICB9XHJcblxyXG4gIGdldCBleHBvcnRUYWJsZUNvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LmV4cG9ydDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGRlZmF1bHRTb3J0ID0gW3sgcHJvcDogJ3Byb3BlcnRpZXMuY3JlYXRlZEF0JywgZGlyOiAnZGVzYycgfV07XHJcblxyXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uID0gJ3J0bCc7XHJcbiAgaXNQYW5lbE9wZW5lZCA9IGZhbHNlO1xyXG4gIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZXMgPSBQQUdFX1NJWkU7XHJcblxyXG4gIHByaXZhdGUgX2lzQ29uZmlnQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RhYmxlSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9wYWdlQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FjdGl2ZVBhZ2U6IFBhZ2VFdmVudCA9IHtcclxuICAgIHBhZ2VJbmRleDogMSxcclxuICAgIHBhZ2VTaXplOiAxMCxcclxuICAgIGxlbmd0aDogMCxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0VmFsdWU6IFRhYmxlU29ydE9wdGlvbnM7XHJcblxyXG4gIGVkaXRvclR5cGUgPSBOREZfRURJVE9SX1RZUEUuVEFCTEVTO1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9maWx0ZXJzTWFwcGVyOiBGaWx0ZXJzTWFwcGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2R5bmFtaWNUYWJsZVNlcnZpY2U6IER5bmFtaWNUYWJsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbmdUYWJsZVNlcnZpY2U6IE5kZlRhYmxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RvYXN0clNlcnZpY2U6IEN1c3RvbVRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZGZUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBOZGZUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2dcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzdGFydFdpdGgoeyBsYW5nOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcmVzLmxhbmcgPT09ICdhcicgPyAncnRsJyA6ICdsdHInO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgdG9nZ2xlUGFuZWwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzUGFuZWxPcGVuZWQgPSAhdGhpcy5pc1BhbmVsT3BlbmVkO1xyXG4gIH07XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IHRhYmxlS2V5ID0gY2hhbmdlcy50YWJsZUtleT8uY3VycmVudFZhbHVlO1xyXG4gICAgY29uc3QgY29uZmlnID0gY2hhbmdlcy5jb25maWc/LmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICBpZiAodGFibGVLZXkgJiYgY29uZmlnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnWW91IGNhbm5vdCBzZXQgYm90aCB0YWJsZUtleSBhbmQgdGFibGVDb25maWcgYXQgdGhlIHNhbWUgdGltZS4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLl9hcHBseVRhYmxlQ29uZmlnKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRhYmxlS2V5KSB7XHJcbiAgICAgIHRoaXMuX2xvYWRUYWJsZUNvbmZpZyh0YWJsZUtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkxvYWQoZGF0YTogTnV4ZW9QYWdpbmF0aW9uPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMub25Mb2FkZWQuZW1pdChkYXRhKTtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuX3RhYmxlSW5pdGlhbGl6ZWQgfHxcclxuICAgICAgdGhpcy5maWx0ZXJSZWxvYWRDb25maWc/LnN0cmF0ZWd5ID09PSAnbmV2ZXInIHx8XHJcbiAgICAgIHRoaXMuX3BhZ2VDaGFuZ2VkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5faXNDb25maWdDaGFuZ2VkIHx8XHJcbiAgICAgIHRoaXMuZmlsdGVyUmVsb2FkQ29uZmlnPy5zdHJhdGVneSA9PT0gJ2Fsd2F5cydcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9hZ2dyZWdhdGlvbnNTdWIubmV4dChkYXRhPy5hZ2dyZWdhdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUmVsb2FkQ29uZmlnPy5zdHJhdGVneSA9PT0gJ29uQ2hhbmdlJykge1xyXG4gICAgICBjb25zdCBhY3RpdmF0ZWRRdWVyeSA9IHRoaXMuX2FjdGl2YXRlZENyaXRlcmlhU3ViLmdldFZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFjdGl2YXRlZFF1ZXJ5Py5jdXJyZW50VmFsdWUgfHwge307XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBhY3RpdmF0ZWRRdWVyeT8ucHJldmlvdXNWYWx1ZSB8fCB7fTtcclxuXHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRLZXlzID0gXy51bmlvbihcclxuICAgICAgICBfLmtleXMocHJldmlvdXNWYWx1ZSksXHJcbiAgICAgICAgXy5rZXlzKGN1cnJlbnRWYWx1ZSlcclxuICAgICAgKS5maWx0ZXIoKGtleSkgPT4gIV8uaXNFcXVhbChwcmV2aW91c1ZhbHVlW2tleV0sIGN1cnJlbnRWYWx1ZVtrZXldKSk7XHJcblxyXG4gICAgICBjb25zdCB0cmlnZ2VyS2V5cyA9IHRoaXMuZmlsdGVyUmVsb2FkQ29uZmlnLnRyaWdnZXJGaWVsZHMgfHwgW107XHJcbiAgICAgIGNvbnN0IHNob3VsZFJlbG9hZCA9IHRyaWdnZXJLZXlzLnNvbWUoKGtleSkgPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoa2V5KSk7XHJcbiAgICAgIGlmIChzaG91bGRSZWxvYWQpIHtcclxuICAgICAgICB0aGlzLl9hZ2dyZWdhdGlvbnNTdWIubmV4dChkYXRhPy5hZ2dyZWdhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkluaXRpYWxpemUoZGF0YTogTnV4ZW9QYWdpbmF0aW9uPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2FnZ3JlZ2F0aW9uc1N1Yi5uZXh0KGRhdGE/LmFnZ3JlZ2F0aW9ucyk7XHJcbiAgICB0aGlzLl90YWJsZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2lzQ29uZmlnQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkluaXRpYWxpemVkLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjb2x1bW5zQ2hhbmdlZChjb2x1bW5zOiBUYWJsZUNvbHVtbkNvbmZpZ1tdKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zU3ViLm5leHQoY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBzb3J0Q2hhbmdlZChzb3J0OiBTb3J0VGFibGVJdGVtKSB7XHJcbiAgICB0aGlzLl9zb3J0VmFsdWUgPSB7IHNvcnRCeTogc29ydC52YWx1ZSwgc29ydE9yZGVyOiBzb3J0LmRpcmVjdGlvbiB9O1xyXG4gICAgdGhpcy5fc29ydE9wdGlvblN1Yi5uZXh0KHRoaXMuX3NvcnRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBtb2RlQ2hhbmdlZChtb2RlOiBUYWJsZVZpZXdNb2RlKSB7XHJcbiAgICB0aGlzLl92aWV3TW9kZVN1Yi5uZXh0KG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25Tb3J0Q2hhbmdlZChzb3J0OiBUYWJsZVNvcnRPcHRpb25zKSB7XHJcbiAgICB0aGlzLl9zb3J0VmFsdWUgPSBzb3J0O1xyXG4gICAgdGhpcy5vblNvcnQuZW1pdChzb3J0KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFRhYmxlKHR5cGU6IEV4cG9ydFR5cGUpIHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSBfLmNsb25lRGVlcCh0aGlzLmV4cG9ydFRhYmxlQ29uZmlnPy5yZXF1ZXN0KTtcclxuICAgIGlmICghcmVxdWVzdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fZGlzcGxheWVkQ29sdW1uc1N1Yi5nZXRWYWx1ZSgpO1xyXG4gICAgY29uc3QgZmllbGRzID0gY29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmhlYWRlckNsYXNzIHx8IGNvbD8uZmlsZWRLZXkpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IGNvbHVtbnMubWFwKFxyXG4gICAgICAoY29sKSA9PiAodGhpcy50YWJsZUNvbmZpZy5wcmVmaXggfHwgJycpICsgY29sLm5hbWVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLl9jdXN0b21Dcml0ZXJpYVN1Yi5nZXRWYWx1ZSgpO1xyXG5cclxuICAgIHJlcXVlc3QucGFyYW1zID0gbWVyZ2UoXHJcbiAgICAgIHt9LFxyXG4gICAgICBjcml0ZXJpYS5wYXJhbXMsXHJcbiAgICAgIHRoaXMuX3NvcnRWYWx1ZSB8fCB7fSxcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZz8ucXVpY2tGaWx0ZXJzXHJcbiAgICAgICAgPyB7IHF1aWNrRmlsdGVyczogdGhpcy50YWJsZUNvbmZpZy5xdWlja0ZpbHRlcnMgfVxyXG4gICAgICAgIDoge30sXHJcbiAgICAgIHJlcXVlc3Q/LnBhcmFtc1xyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBibG9iTmFtZUtleSA9IHRoaXMuZXhwb3J0VGFibGVDb25maWc/LmJsb2JOYW1lO1xyXG4gICAgY29uc3QgcGF5bG9hZDogTmRmRXhwb3J0UGF5bG9hZCA9IG1lcmdlKFxyXG4gICAgICB7fSxcclxuICAgICAgcmVxdWVzdD8ucGF5bG9hZCB8fCB7fSxcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBwcmVkaWNhdGVMaXN0OiBjcml0ZXJpYS5wYXlsb2FkLnByZWRpY2F0ZUxpc3QgfHwgW10sXHJcbiAgICAgICAgcmVwb3J0TWV0YURhdGE6IHtcclxuICAgICAgICAgIGJsb2JOYW1lOiAnJyxcclxuICAgICAgICAgIGRvY1R5cGVOYW1lOiB0aGlzLmV4cG9ydFRhYmxlQ29uZmlnLmRvY1R5cGVOYW1lLFxyXG4gICAgICAgICAgZmlsZVR5cGU6IHR5cGUsXHJcbiAgICAgICAgICBsb2NhbGU6XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0VGFibGVDb25maWc/LmxvY2FsZSB8fFxyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmV4cG9ydFRhYmxlQ29uZmlnPy5maWVsZHMgfHwgZmllbGRzLFxyXG4gICAgICAgICAgaGVhZGVyczogW10sXHJcbiAgICAgICAgfSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGFyOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKCdhcicpLFxyXG4gICAgICBlbjogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbignZW4nKSxcclxuICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb25zID1cclxuICAgICAgICAgICAgdHJhbnNsYXRpb25zW3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmddO1xyXG4gICAgICAgICAgcGF5bG9hZC5yZXBvcnRNZXRhRGF0YS5oZWFkZXJzID0gaGVhZGVycy5tYXAoKGNvbCkgPT5cclxuICAgICAgICAgICAgXy5nZXQoY3VycmVudFRyYW5zbGF0aW9ucywgY29sKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHBheWxvYWQucmVwb3J0TWV0YURhdGEuYmxvYk5hbWUgPSBfLmdldChcclxuICAgICAgICAgICAgdHJhbnNsYXRpb25zWydhciddLFxyXG4gICAgICAgICAgICBibG9iTmFtZUtleVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHBheWxvYWQucmVwb3J0TWV0YURhdGEuYmxvYk5hbWVFbiA9IF8uZ2V0KFxyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnNbJ2VuJ10sXHJcbiAgICAgICAgICAgIGJsb2JOYW1lS2V5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX25nVGFibGVTZXJ2aWNlLmV4cG9ydFRhYmxlKHJlcXVlc3QsIHBheWxvYWQpLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKF8pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl90b2FzdHJTZXJ2aWNlLmVycm9yKCdUQUJMRS5FWFBPUlQuUmVxdWVzdEVycm9yJyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLl90b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoJ1RBQkxFLkVYUE9SVC5yZXF1ZXN0U3VjY2VzcycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl90b2FzdHJTZXJ2aWNlLmVycm9yKCdUQUJMRS5FWFBPUlQucmVxdWVzdEVycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGZpbHRlckNoYW5nZWQoY3JpdGVyaWE6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIHRoaXMuX3RyaWdnZXJDcml0ZXJpYUNoYW5nZXMoY3JpdGVyaWEpO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyc0NvbmZpZz8ubW9kZSAhPT0gJ3BheWxvYWQnKSB7XHJcbiAgICAgIGNvbnN0IGlzU3RyaW5naWZ5UGFyYW1zID0gdGhpcy5maWx0ZXJzQ29uZmlnPy5zdHJpbmdpZnlQYXJhbXM7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gIWlzU3RyaW5naWZ5UGFyYW1zXHJcbiAgICAgICAgPyBjcml0ZXJpYVxyXG4gICAgICAgIDogdGhpcy5fc3RyaW5naWZ5VmFsdWVzKGNyaXRlcmlhKTtcclxuICAgICAgdGhpcy5fZHluYW1pY1RhYmxlU2VydmljZS5yZWZyZXNoRGF0YS5uZXh0KHZhbHVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLl9maWx0ZXJzTWFwcGVyLnByZXBhcmVQYXlsb2FkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuZmllbGRzLFxyXG4gICAgICBjcml0ZXJpYVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2N1c3RvbUNyaXRlcmlhU3ViLm5leHQocGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBvblRleHRTZWFyY2ggPSAodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMudGV4dFNlYXJjaENvbmZpZz8uZmllbGRLZXkgfHwgdHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRleHQpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyU2VhcmNoKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3RleHRTZWFyY2hTdWIubmV4dCh0ZXh0KTtcclxuICB9O1xyXG5cclxuICBvcGVuU2VhcmNoTW9kYWwgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBfZGlhbG9nQ29uZmlnID0gdGhpcy50ZXh0U2VhcmNoQ29uZmlnPy5zdWZmaXg/LmRpYWxvZztcclxuICAgIGlmICghX2RpYWxvZ0NvbmZpZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IG9wdGlvbnMsIC4uLmRhdGEgfSA9IF9kaWFsb2dDb25maWc7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbjxIdG1sRGlhbG9nQ29tcG9uZW50LCBIdG1sRGlhbG9nQ29uZmlnPihcclxuICAgICAgSHRtbERpYWxvZ0NvbXBvbmVudCxcclxuICAgICAge1xyXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdwLTAnLFxyXG4gICAgICAgIG1pbldpZHRoOiAnbWluKDUwMHB4LDYwdncpJyxcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uLFxyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBvbkNsZWFyU2VhcmNoID0gKCkgPT4ge1xyXG4gICAgdGhpcy5fdGV4dFNlYXJjaFN1Yi5uZXh0KG51bGwpO1xyXG4gIH07XHJcblxyXG4gIG9uUGFnZUNoYW5nZWQocGFnZTogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLl9wYWdlQ2hhbmdlZCA9XHJcbiAgICAgIHRoaXMuX2FjdGl2ZVBhZ2UucGFnZUluZGV4ICE9PSBwYWdlLnBhZ2VJbmRleCB8fFxyXG4gICAgICB0aGlzLl9hY3RpdmVQYWdlLnBhZ2VTaXplICE9PSBwYWdlLnBhZ2VTaXplO1xyXG4gICAgaWYgKHRoaXMuX3BhZ2VDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMub25QYWdlLmVtaXQocGFnZSk7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZVBhZ2UgPSBwYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyQnlWaXNpYmlsaXR5KFxyXG4gICAgY29sdW1uczogVGFibGVDb2x1bW5Db25maWdbXVxyXG4gICk6IFRhYmxlQ29sdW1uQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5kZWZhdWx0VmlzaWJsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VhcmNoKFtzZWFyY2gsIGZpbHRlcnNdOiBbXHJcbiAgICBzdHJpbmcsXHJcbiAgICB7XHJcbiAgICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgIHBheWxvYWQ/OiB7IHByZWRpY2F0ZUxpc3Q6IGFueVtdIH0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgfVxyXG4gIF0pOiBhbnkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCB7IHByZWRpY2F0ZUxpc3QgfSA9IGZpbHRlcnM/LnBheWxvYWQgfHwgeyBwcmVkaWNhdGVMaXN0OiBbXSB9O1xyXG4gICAgICBjb25zdCBfa2V5ID0gdGhpcy50ZXh0U2VhcmNoQ29uZmlnPy5maWVsZEtleTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5kZXggPSBwcmVkaWNhdGVMaXN0LmZpbmRJbmRleCgoaXRtKSA9PiBpdG0ubmFtZSA9PT0gX2tleSk7XHJcbiAgICAgIGlmIChzZWFyY2ggJiYgX2tleSkge1xyXG4gICAgICAgIGlmIChzZWFyY2hJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICBwcmVkaWNhdGVMaXN0W3NlYXJjaEluZGV4XS52YWx1ZSA9IGAnJHtzZWFyY2h9J2A7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZWRpY2F0ZUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IF9rZXksXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOlxyXG4gICAgICAgICAgICAgIHRoaXMudGV4dFNlYXJjaENvbmZpZz8ub3BlcmF0b3IgfHwgQ09NUEFSSVNPTl9PUEVSQVRPUi5lcXVhbHMsXHJcbiAgICAgICAgICAgIHZhbHVlOiBgJyR7c2VhcmNofSdgLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaEluZGV4ID49IDApIHtcclxuICAgICAgICBwcmVkaWNhdGVMaXN0LnNwbGljZShzZWFyY2hJbmRleCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHsgLi4uZmlsdGVycyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0cmluZ2lmeVZhbHVlcyhjcml0ZXJpYTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNyaXRlcmlhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGFjY1trZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiB2YWx1ZTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyaWdnZXJDcml0ZXJpYUNoYW5nZXMoY3JpdGVyaWE6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIGlmICh0aGlzLl90YWJsZUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMub25RdWVyeUNoYW5nZS5lbWl0KGNyaXRlcmlhKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFjdGl2YXRlZFF1ZXJ5ID0geyAuLi50aGlzLl9hY3RpdmF0ZWRDcml0ZXJpYVN1Yi5nZXRWYWx1ZSgpIH07XHJcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gYWN0aXZhdGVkUXVlcnk/LmN1cnJlbnRWYWx1ZTtcclxuICAgIHRoaXMuX2FjdGl2YXRlZENyaXRlcmlhU3ViLm5leHQoe1xyXG4gICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxyXG4gICAgICBjdXJyZW50VmFsdWU6IGNyaXRlcmlhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IHRoZSB0YWJsZSBjb25maWd1cmF0aW9uLlxyXG4gICAqIEBwYXJhbSBjb25maWcgTmRmVGFibGVDb25maWdcclxuICAgKi9cclxuICBwcml2YXRlIF9hcHBseVRhYmxlQ29uZmlnKGNvbmZpZzogTmRmVGFibGVDb25maWcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RhYmxlQ29uZmlnU3ViLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuaXNQYW5lbE9wZW5lZCA9IGNvbmZpZz8ub3B0aW9ucz8uZmlsdGVycz8ucGFuZWw/LnZpc2libGUgPz8gdHJ1ZTtcclxuICAgIHRoaXMuX2lzQ29uZmlnQ2hhbmdlZCA9ICEhY29uZmlnO1xyXG4gICAgaWYgKGNvbmZpZy5jb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnNTdWIubmV4dCh0aGlzLl9maWx0ZXJCeVZpc2liaWxpdHkoY29uZmlnLmNvbHVtbnMpKTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcuc29ydGluZ0J5KSB7XHJcbiAgICAgIHRoaXMuX3NvcnRWYWx1ZSA9IGNvbmZpZy5zb3J0aW5nQnk7XHJcbiAgICAgIHRoaXMuX3NvcnRPcHRpb25TdWIubmV4dChjb25maWcuc29ydGluZ0J5KTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWc/Lm9wdGlvbnM/LnRhYmxlTW9kZT8ubW9kZSkge1xyXG4gICAgICB0aGlzLl92aWV3TW9kZVN1Yi5uZXh0KGNvbmZpZy5vcHRpb25zLnRhYmxlTW9kZS5tb2RlKTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcucGFnZVNpemUpIHtcclxuICAgICAgdGhpcy5fYWN0aXZlUGFnZS5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQGRlc2NyaXB0aW9uIExvYWRzIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBrZXkgYW5kIGFwcGxpZXMgaXQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdXNlZCB0byBmZXRjaCB0aGUgdGFibGUgY29uZmlndXJhdGlvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9sb2FkVGFibGVDb25maWcoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX25kZlRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2VcclxuICAgICAgLmdldFRhYmxlQ29uZmlndXJhdGlvbihrZXksIHRoaXMuY29uZmlnUGF0aClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChjb25maWcpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1RyYW5zZm9ybWVyICYmIF8uaXNGdW5jdGlvbih0aGlzLmNvbmZpZ1RyYW5zZm9ybWVyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWdUcmFuc2Zvcm1lcihjb25maWcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG9mKGNvbmZpZyk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlUYWJsZUNvbmZpZyhjb25maWcpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICpuZ0lmPVwidGFibGVDb25maWdcIlxyXG4gIGNsYXNzPVwibmRmLXRhYmxlX19jb250YWluZXJcIlxyXG4gIFtjbGFzcy5wYW5lbC1vcGVuZWRdPVwiaXNQYW5lbE9wZW5lZCAmJiBmaWx0ZXJzQ29uZmlnXCJcclxuICBbZGlyXT1cImRpcmVjdGlvblwiXHJcbiAgbmRmRmx1aWRIZWlnaHRcclxuICBjc3NWYXI9XCItLW5kZi10YWJsZS1oZWlnaHRcIlxyXG4gIFtjYWxjdWxhdGVdPVwiYXV0b0NhbGN1bGF0ZUhlaWdodFwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwibmRmLXRhYmxlX19wYW5lbFwiICpuZ0lmPVwiZmlsdGVyc0NvbmZpZz8uZmllbGRzXCI+XHJcbiAgICA8YXBwLWZpbHRlcnMtcGFuZWxcclxuICAgICAgW2ZpZWxkc109XCJmaWx0ZXJzQ29uZmlnLmZpZWxkc1wiXHJcbiAgICAgIFthZ2dyZWdhdGlvbnNdPVwiYWdncmVnYXRpb25zJCB8IGFzeW5jXCJcclxuICAgICAgKGZpbHRlckNoYW5nZWQpPVwiZmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW2FjdGl2ZVF1ZXJ5XT1cImFjdGl2ZVF1ZXJ5XCJcclxuICAgICAgY2xhc3M9XCJuZGYtdGFibGVfX2ZpbHRlcnNcIlxyXG4gICAgICBbY3VzdG9tVGVtcGxhdGVSZWZdPVwiZmlsdGVyQ3VzdG9tVGVtcGxhdGVcIlxyXG4gICAgPjwvYXBwLWZpbHRlcnMtcGFuZWw+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm5kZi10YWJsZV9fY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5kZi10YWJsZV9faGVhZGVyIGZsZXhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5kZi10YWJsZV9faGVhZGVyX19jdXN0b20tYWN0aW9ucyBmbGV4IGdhcC14LTQgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VhcmNoVGFibGVUZW1wbGF0ZSB8fCBkZWZhdWx0QWN0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgJGltcGxpY2l0OiB0YWJsZUNvbmZpZyxcclxuICAgICAgICAgICAgcGFuZWxPcGVuZWQ6IGlzUGFuZWxPcGVuZWQsXHJcbiAgICAgICAgICAgIHRvZ2dsZVBhbmVsOiB0b2dnbGVQYW5lbCxcclxuICAgICAgICAgICAgb3Blbk1vZGFsOiBvcGVuU2VhcmNoTW9kYWwsXHJcbiAgICAgICAgICAgIHNlYXJjaDogb25UZXh0U2VhcmNoLFxyXG4gICAgICAgICAgICBjbGVhcjogb25DbGVhclNlYXJjaFxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBY3Rpb25UZW1wbGF0ZT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNQYW5lbFRvZ2dsZUF2YWlsYWJsZSAmJiAhIWZpbHRlcnNDb25maWcuZmllbGRzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1idXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj4gZmlsdGVyX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxhcHAtdGV4dC1zZWFyY2hcclxuICAgICAgICAgICAgKm5nSWY9XCJ0ZXh0U2VhcmNoQ29uZmlnXCJcclxuICAgICAgICAgICAgW3NlYXJjaENvbmZpZ109XCJ0ZXh0U2VhcmNoQ29uZmlnXCJcclxuICAgICAgICAgICAgKG9wZW5Nb2RhbCk9XCJvcGVuU2VhcmNoTW9kYWwoKVwiXHJcbiAgICAgICAgICAgIFtzZWFyY2hdPVwidGV4dFNlYXJjaCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25UZXh0U2VhcmNoKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhclNlYXJjaCgpXCJcclxuICAgICAgICAgID48L2FwcC10ZXh0LXNlYXJjaD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5kZi10YWJsZV9faGVhZGVyX19hY3Rpb25zIGZsZXggZ2FwLXgtNCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8YXBwLWVkaXRvci1idXR0b25cclxuICAgICAgICAgICpuZ0lmPVwianNvbkVkaXRvckVuYWJsZWQgJiYgKHRhYmxlS2V5IHx8IHRhYmxlQ29uZmlnPy5rZXkpXCJcclxuICAgICAgICAgIFtrZXldPVwidGFibGVLZXkgfHwgdGFibGVDb25maWc/LmtleVwiXHJcbiAgICAgICAgICBbdHlwZV09XCJlZGl0b3JUeXBlXCJcclxuICAgICAgICA+PC9hcHAtZWRpdG9yLWJ1dHRvbj5cclxuICAgICAgICA8bmRmLXRhYmxlLWV4cG9ydFxyXG4gICAgICAgICAgKm5nSWY9XCJleHBvcnRUYWJsZUNvbmZpZz8uZW5hYmxlZFwiXHJcbiAgICAgICAgICBbY29uZmlnXT1cImV4cG9ydFRhYmxlQ29uZmlnXCJcclxuICAgICAgICAgIChvbkV4cG9ydCk9XCJleHBvcnRUYWJsZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9uZGYtdGFibGUtZXhwb3J0PlxyXG5cclxuICAgICAgICA8dGFibGUtc29ydGluZy1saXN0XHJcbiAgICAgICAgICAqbmdJZj1cIiEhc29ydExpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICBbc29ydExpc3RdPVwic29ydExpc3RcIlxyXG4gICAgICAgICAgKHNvcnRDaGFuZ2VkKT1cInNvcnRDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgID48L3RhYmxlLXNvcnRpbmctbGlzdD5cclxuICAgICAgICA8dGFibGUtY29sdW1ucy10b2dnbGVyXHJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtblRvZ2dsZVwiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJ0YWJsZUNvbmZpZy5jb2x1bW5zXCJcclxuICAgICAgICAgIFtwcmVmaXhdPVwidGFibGVDb25maWcucHJlZml4XCJcclxuICAgICAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW5zT3B0aW9ucz8uc29ydGFibGVcIlxyXG4gICAgICAgICAgKGNvbHVtbnNDaGFuZ2VkKT1cImNvbHVtbnNDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgID48L3RhYmxlLWNvbHVtbnMtdG9nZ2xlcj5cclxuICAgICAgICA8bW9kZS10b2dnbGVyXHJcbiAgICAgICAgICAqbmdJZj1cInRhYmxlTW9kZT8udG9nZ2xlTW9kZVwiXHJcbiAgICAgICAgICBbbW9kZV09XCJ0YWJsZU1vZGUubW9kZSB8fCAnbGlzdCdcIlxyXG4gICAgICAgICAgW21vZGVzTGlzdF09XCJ0YWJsZU1vZGU/LmF2YWlsYWJsZU1vZGVcIlxyXG4gICAgICAgICAgKG1vZGVDaGFuZ2VkKT1cIm1vZGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgID48L21vZGUtdG9nZ2xlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3Rpb25zVGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICBwYW5lbE9wZW5lZDogaXNQYW5lbE9wZW5lZCxcclxuICAgICAgICAgICAgdG9nZ2xlUGFuZWw6IHRvZ2dsZVBhbmVsLFxyXG4gICAgICAgICAgICBvcGVuTW9kYWw6IG9wZW5TZWFyY2hNb2RhbCxcclxuICAgICAgICAgICAgc2VhcmNoOiBvblRleHRTZWFyY2gsXHJcbiAgICAgICAgICAgIGNsZWFyOiBvbkNsZWFyU2VhcmNoXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGN0cy1keW5hbWljLXRhYmxlXHJcbiAgICAgICpuZ0lmPVwiIXRhYmxlQ29uZmlnLmlzRGF0YVByb3ZpZGVkXCJcclxuICAgICAgY2xhc3M9XCJuZGYtdGFibGVfX3RhYmxlIHRhYmxlLXN0eWxlXCJcclxuICAgICAgW25nQ2xhc3NdPVwic3R5bGVDbGFzc1wiXHJcbiAgICAgIFtjb2x1bW5zXT1cImRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmNcIlxyXG4gICAgICBbcmVzcG9uc2l2ZUNvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luY1wiXHJcbiAgICAgIFtmdWxsV2lkdGhdPVwidGFibGVDb25maWcuZnVsbFdpZHRoIHx8ICdhdXRvJ1wiXHJcbiAgICAgIFtwYWdlU2l6ZV09XCJ0YWJsZUNvbmZpZy5wYWdlU2l6ZSB8fCAxMFwiXHJcbiAgICAgIFtwYWdlTnVtYmVyXT1cInRhYmxlQ29uZmlnLnBhZ2VOdW1iZXIgfHwgMVwiXHJcbiAgICAgIFtwYWdlUHJvdmlkZXJdPVwidGFibGVDb25maWcucGFnZVByb3ZpZGVyXCJcclxuICAgICAgW2N1c3RvbVVybF09XCJ0YWJsZUNvbmZpZy5jdXN0b21VcmxcIlxyXG4gICAgICBbcXVpY2tGaWx0ZXJdPVwiXHJcbiAgICAgICAgdGFibGVDb25maWcucXVpY2tGaWx0ZXJzXHJcbiAgICAgICAgICA/IHsgcXVpY2tGaWx0ZXJzOiB0YWJsZUNvbmZpZy5xdWlja0ZpbHRlcnMgfVxyXG4gICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgXCJcclxuICAgICAgW2RlZnVsdFNvcnRdPVwidGFibGVDb25maWcuZGVmYXVsdFNvcnQgfHwgZGVmYXVsdFNvcnRcIlxyXG4gICAgICBbc29ydGluZ0J5XT1cInNvcnRPcHRpb24kIHwgYXN5bmNcIlxyXG4gICAgICBbZW50aXR5VHlwZV09XCInYWxsJ1wiXHJcbiAgICAgIFtmaWVsZHNdPVwidGFibGVDb25maWcuZmllbGRzXCJcclxuICAgICAgW3RhYmxlTW9kZV09XCJ2aWV3TW9kZSQgfCBhc3luY1wiXHJcbiAgICAgIFtjb21wb25lbnROYW1lXT1cInRhYmxlTW9kZT8uWydjb21wb25lbnROYW1lJ11cIlxyXG4gICAgICBbcmFuZ2VdPVwidGFibGVDb25maWc/LnJhbmdlXCJcclxuICAgICAgW2lzU2VhcmNoUGFnZV09XCJ0YWJsZUNvbmZpZz8uaXNTZWFyY2hQYWdlXCJcclxuICAgICAgW211bHRpU2VsZWN0Um93c109XCJ0YWJsZUNvbmZpZz8ubXVsdGlTZWxlY3RSb3dzXCJcclxuICAgICAgW2N1c3RvbUZpcnN0Um93XT1cInRhYmxlQ29uZmlnPy5jdXN0b21GaXJzdFJvd1wiXHJcbiAgICAgIFtoaWdobGlnaHRTZWxlY3RlZENhcmRdPVwidGFibGVDb25maWc/LmhpZ2hsaWdodFNlbGVjdGVkQ2FyZFwiXHJcbiAgICAgIFtzaG93QWN0aW9uc0FzTWVudV09XCJ0YWJsZUNvbmZpZz8uc2hvd0FjdGlvbnNBc01lbnVcIlxyXG4gICAgICBbZmlsdGVyUGFyYW1zXT1cInRhYmxlQ29uZmlnPy5maWx0ZXJQYXJhbXNcIlxyXG4gICAgICBbZm9ybWF0XT1cInRhYmxlQ29uZmlnPy5mb3JtYXQgfHwgJ01NTU0gZCwgeSdcIlxyXG4gICAgICBbcGFnZVNpemVzXT1cInRhYmxlQ29uZmlnPy5wYWdlU2l6ZXMgfHwgZGVmYXVsdFBhZ2VTaXplc1wiXHJcbiAgICAgIFtwcmVmaXhdPVwidGFibGVDb25maWcucHJlZml4IHx8ICcnXCJcclxuICAgICAgW3Jvd0N1cnNvcl09XCJ0cnVlXCJcclxuICAgICAgW3F1ZXJ5UGFyYW1dPVwidGFibGVDb25maWcucXVlcnlQYXJhbVwiXHJcbiAgICAgIFtjdXN0b21GaWx0ZXJzXT1cInNlYXJjaEFuZEZpbHRlcnMkIHwgYXN5bmNcIlxyXG4gICAgICBbdGFibGVBY3Rpb25zXT1cInRhYmxlQ29uZmlnLnRhYmxlQWN0aW9uc1wiXHJcbiAgICAgIFtyZXF1ZXN0QWN0aW9uc109XCJ0YWJsZUNvbmZpZz8ucmVxdWVzdEFjdGlvbnNcIlxyXG4gICAgICBbaGVhZGVyc109XCJ0YWJsZUNvbmZpZy5oZWFkZXJzXCJcclxuICAgICAgKG9uUm93U2VsZWN0ZWQpPVwib25Sb3dTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25Sb3dJbmRleFNlbGVjdGVkKT1cIm9uUm93SW5kZXhTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAoYWN0aW9uT25Sb3cpPVwiYWN0aW9uT25Sb3cuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgKG9uR2V0dGluZ0RhdGEpPVwib25HZXR0aW5nRGF0YS5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25Mb2FkKT1cIm9uTG9hZCgkZXZlbnQpXCJcclxuICAgICAgKG9uSW5pdGlhbGl6ZSk9XCJvbkluaXRpYWxpemUoJGV2ZW50KVwiXHJcbiAgICAgIChvbk11bHRpUm93U2VsZWN0ZWQpPVwib25NdWx0aVJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvbkxvYWRpbmcpPVwib25Mb2FkaW5nLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvblBhZ2UpPVwib25QYWdlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW2lzTGVnYWN5TW9kZV09XCJmYWxzZVwiXHJcbiAgICAgIFtzaG93VG90YWxSZWNvcmRdPVwidHJ1ZVwiXHJcbiAgICAgIChzb3J0Q2hhbmdlZCk9XCJvblNvcnRDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICBlbXB0eVRlbXBsYXRlXHJcbiAgICAgICAgbGV0LWlzTG9hZGluZ1xyXG4gICAgICAgIGxldC1yb3dzPVwicm93c1wiXHJcbiAgICAgICAgbGV0LWluaXRpYWxpemVkPVwiaW5pdGlhbGl6ZWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctZGF0YVwiICpuZ0lmPVwiaXNMb2FkaW5nICYmIGluaXRpYWxpemVkXCI+XHJcbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLTUvNlwiXHJcbiAgICAgICAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIXJvd3MubGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YXBwLW5vLWRhdGEtZm91bmRcclxuICAgICAgICAgICAgY2xhc3M9XCJtdC00XCJcclxuICAgICAgICAgICAgW21lc3NhZ2VdPVwiZW1wdHlNZXNzYWdlXCJcclxuICAgICAgICAgID48L2FwcC1uby1kYXRhLWZvdW5kPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9jdHMtZHluYW1pYy10YWJsZT5cclxuXHJcbiAgICA8Y3RzLXRhYmxlXHJcbiAgICAgICpuZ0lmPVwidGFibGVDb25maWcuaXNEYXRhUHJvdmlkZWRcIlxyXG4gICAgICBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCJcclxuICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgICAgW2NvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luY1wiXHJcbiAgICAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jXCJcclxuICAgICAgW3Jvd0N1cnNvcl09XCJ0cnVlXCJcclxuICAgICAgW2Z1bGxXaWR0aF09XCJ0YWJsZUNvbmZpZy5mdWxsV2lkdGggfHwgJ2F1dG8nXCJcclxuICAgICAgW2VudGl0eVR5cGVdPVwiJ2FsbCdcIlxyXG4gICAgICBbcHJlZml4XT1cInRhYmxlQ29uZmlnLnByZWZpeCB8fCAnJ1wiXHJcbiAgICAgIFt0YWJsZU1vZGVdPVwidmlld01vZGUkIHwgYXN5bmNcIlxyXG4gICAgICBbY29tcG9uZW50TmFtZV09XCJ0YWJsZU1vZGU/LlsnY29tcG9uZW50TmFtZSddXCJcclxuICAgICAgW211bHRpU2VsZWN0Um93c109XCJ0YWJsZUNvbmZpZz8ubXVsdGlTZWxlY3RSb3dzXCJcclxuICAgICAgW2N1c3RvbUZpcnN0Um93XT1cInRhYmxlQ29uZmlnPy5jdXN0b21GaXJzdFJvd1wiXHJcbiAgICAgIFt0YWJsZUFjdGlvbnNdPVwidGFibGVDb25maWcudGFibGVBY3Rpb25zXCJcclxuICAgICAgW3Nob3dBY3Rpb25zQXNNZW51XT1cInRhYmxlQ29uZmlnPy5zaG93QWN0aW9uc0FzTWVudVwiXHJcbiAgICAgIFtkZWZ1bHRTb3J0XT1cInRhYmxlQ29uZmlnLmRlZmF1bHRTb3J0IHx8IGRlZmF1bHRTb3J0XCJcclxuICAgICAgW2Zvcm1hdF09XCJ0YWJsZUNvbmZpZz8uZm9ybWF0IHx8ICdNTU1NIGQsIHknXCJcclxuICAgICAgW2hpZ2hsaWdodFNlbGVjdGVkQ2FyZF09XCJ0YWJsZUNvbmZpZz8uaGlnaGxpZ2h0U2VsZWN0ZWRDYXJkXCJcclxuICAgICAgKG9uUm93U2VsZWN0ZWQpPVwib25Sb3dTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25Sb3dJbmRleFNlbGVjdGVkKT1cIm9uUm93SW5kZXhTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25NdWx0aVJvd1NlbGVjdGVkKT1cIm9uTXVsdGlSb3dTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAoYWN0aW9uT25Sb3cpPVwiYWN0aW9uT25Sb3cuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgKG9uU29ydGluZyk9XCJvblNvcnRDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgPjwvY3RzLXRhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL25kZi10YWJsZS9jb250YWluZXJzL25kZi10YWJsZS9uZGYtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvbmRmLXRhYmxlL2NvbnRhaW5lcnMvbmRmLXRhYmxlL25kZi10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFFBQVEsRUFDUixJQUFJLEVBRUosRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sR0FBRyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2xFLE9BQU8sRUFFTCxtQkFBbUIsRUFFbkIsbUJBQW1CLEdBRXBCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixH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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvci9wYWdpbmF0b3InO1xyXG5pbXBvcnQgXywgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmVoYXZpb3JTdWJqZWN0LFxyXG4gIGNvbWJpbmVMYXRlc3QsXHJcbiAgZm9ya0pvaW4sXHJcbiAgZnJvbSxcclxuICBPYnNlcnZhYmxlLFxyXG4gIG9mLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIGNhdGNoRXJyb3IsXHJcbiAgZmlsdGVyLFxyXG4gIG1hcCxcclxuICBzdGFydFdpdGgsXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERlc3Ryb3lTdWJqZWN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBOdXhlb1BhZ2luYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvbW9kZWxzJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBBZ2dyZWdhdGlvblJlc3BvbnNlLFxyXG4gIENPTVBBUklTT05fT1BFUkFUT1IsXHJcbiAgRm9ybVF1ZXJ5TW9kZWwsXHJcbiAgSHRtbERpYWxvZ0NvbXBvbmVudCxcclxuICBIdG1sRGlhbG9nQ29uZmlnLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL25kZi1maWx0ZXJzJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2R5bmFtaWMtdGFibGUnO1xyXG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG4gIEFDVElPTlNfVEFCTEVfVEVNUExBVEUsXHJcbiAgRklMVEVSX0NVU1RPTV9URU1QTEFURSxcclxuICBTRUFSQ0hfVEFCTEVfVEVNUExBVEUsXHJcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7XHJcbiAgQ3VzdG9tQ3JpdGVyaWFNb2RlbCxcclxuICBFeHBvcnRUeXBlLFxyXG4gIE5kZkV4cG9ydFBheWxvYWQsXHJcbiAgTmRmVGFibGVDb25maWcsXHJcbiAgU29ydFRhYmxlSXRlbSxcclxuICBUYWJsZUNvbHVtbkNvbmZpZyxcclxuICBUYWJsZVNvcnRPcHRpb25zLFxyXG4gIFRhYmxlVmlld01vZGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTmRmVGFibGVDb25maWd1cmF0aW9uU2VydmljZSwgTmRmVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5cclxuaW1wb3J0IHsgTkRGX0VESVRPUl9UWVBFIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkJztcclxuaW1wb3J0IHsgRmlsdGVyc01hcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9uZGYtZmlsdGVycy9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRhYmxlSG9va3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW5kZi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25kZi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmRmLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgY2xhc3M6ICduZGYtdGFibGUnLFxyXG4gICAgJ1tkaXJdJzogJ2RpcmVjdGlvbicsXHJcbiAgfSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5kZlRhYmxlQ29tcG9uZW50IGV4dGVuZHMgRGVzdHJveVN1YmplY3QgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FnZ3JlZ2F0aW9uc1N1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGlvblJlc3BvbnNlPlxyXG4gID4obnVsbCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcGxheWVkQ29sdW1uc1N1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUYWJsZUNvbHVtbkNvbmZpZ1tdXHJcbiAgPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc29ydE9wdGlvblN1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVTb3J0T3B0aW9ucz4obnVsbCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld01vZGVTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlVmlld01vZGU+KCdsaXN0Jyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdGV4dFNlYXJjaFN1YiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZhdGVkQ3JpdGVyaWFTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcclxuICAgIHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICBjdXJyZW50VmFsdWU6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgfT4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbUNyaXRlcmlhU3ViID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Q3VzdG9tQ3JpdGVyaWFNb2RlbD4oe1xyXG4gICAgICBwYXJhbXM6IHt9LFxyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgcHJlZGljYXRlTGlzdDogW10sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgYWdncmVnYXRpb25zJCA9IHRoaXMuX2FnZ3JlZ2F0aW9uc1N1Yi5hc09ic2VydmFibGUoKTtcclxuICByZWFkb25seSBkaXNwbGF5ZWRDb2x1bW5zJCA9IHRoaXMuX2Rpc3BsYXllZENvbHVtbnNTdWIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcmVhZG9ubHkgc29ydE9wdGlvbiQgPSB0aGlzLl9zb3J0T3B0aW9uU3ViLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJlYWRvbmx5IHZpZXdNb2RlJCA9IHRoaXMuX3ZpZXdNb2RlU3ViLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHJlYWRvbmx5IGN1c3RvbUZpbHRlcnMkID0gdGhpcy5fY3VzdG9tQ3JpdGVyaWFTdWIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcmVhZG9ubHkgdGV4dFNlYXJjaCQgPSB0aGlzLl90ZXh0U2VhcmNoU3ViLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICByZWFkb25seSBzZWFyY2hBbmRGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgdGhpcy50ZXh0U2VhcmNoJCxcclxuICAgIHRoaXMuY3VzdG9tRmlsdGVycyQsXHJcbiAgXSkucGlwZShtYXAoKHJlcykgPT4gdGhpcy5fcHJlcGFyZVNlYXJjaChyZXMpKSk7XHJcbiAgQElucHV0KCkgcm93czogQXJyYXk8dW5rbm93bj47XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXV0b0NhbGN1bGF0ZUhlaWdodCA9IHRydWU7XHJcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ3RhYmxlX25vRGF0YSc7XHJcbiAgQElucHV0KCkgYWN0aXZlUXVlcnk6IEZvcm1RdWVyeU1vZGVsO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ1BhdGg6IHN0cmluZyA9ICd0YWJsZXMnO1xyXG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjb25maWdUcmFuc2Zvcm1lcjogKFxyXG4gICAgY29uZmlnOiBOZGZUYWJsZUNvbmZpZ1xyXG4gICkgPT4gT2JzZXJ2YWJsZTxOZGZUYWJsZUNvbmZpZz47XHJcbiAgQElucHV0KCkgdGFibGVLZXk6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkganNvbkVkaXRvckVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfY29uZmlnOiBOZGZUYWJsZUNvbmZpZztcclxuICBASW5wdXQoKSBzZXQgY29uZmlnKGNvbmZpZzogTmRmVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZUNvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZUNvbmZpZ1N1Yi5nZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGN1c3RvbUNyaXRlcmlhKGNyaXRlcmlhOiBDdXN0b21Dcml0ZXJpYU1vZGVsKSB7XHJcbiAgICBpZiAoY3JpdGVyaWEpIHtcclxuICAgICAgdGhpcy5fY3VzdG9tQ3JpdGVyaWFTdWIubmV4dChjcml0ZXJpYSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2VhcmNoVGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fdGV4dFNlYXJjaFN1Yi5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblJvd0luZGV4U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbk9uUm93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkdldHRpbmdEYXRhID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbk11bHRpUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uTG9hZGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uUGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvbkluaXRpYWxpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxOdXhlb1BhZ2luYXRpb248YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgb25Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE51eGVvUGFnaW5hdGlvbjxhbnk+PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25RdWVyeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Tb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRPcHRpb25zPigpO1xyXG5cclxuICBAQ29udGVudENoaWxkKEFDVElPTlNfVEFCTEVfVEVNUExBVEUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBhY3Rpb25zVGFibGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAQ29udGVudENoaWxkKFNFQVJDSF9UQUJMRV9URU1QTEFURSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIHNlYXJjaFRhYmxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChGSUxURVJfQ1VTVE9NX1RFTVBMQVRFLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXHJcbiAgZmlsdGVyQ3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnU3ViID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZGZUYWJsZUNvbmZpZz4obnVsbCk7XHJcblxyXG4gIGdldCBvcHRpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVDb25maWc/Lm9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyc0NvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnM/LmZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBnZXQgc29ydExpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5zb3J0TGlzdCB8fCBbXTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5vcHRpb25zPy5jb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtblRvZ2dsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnNPcHRpb25zPy50b2dnbGUgPz8gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZU1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy50YWJsZU1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFuZWxDb25maWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXJzPy5wYW5lbDtcclxuICB9XHJcblxyXG4gIGdldCBpc1BhbmVsVG9nZ2xlQXZhaWxhYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFuZWxDb25maWc/LnRvZ2dsZUJ1dHRvbiA/PyB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRleHRTZWFyY2hDb25maWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5zZWFyY2g7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyUmVsb2FkQ29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVycz8ucmVsb2FkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4cG9ydFRhYmxlQ29uZmlnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZXhwb3J0O1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgZGVmYXVsdFNvcnQgPSBbeyBwcm9wOiAncHJvcGVydGllcy5jcmVhdGVkQXQnLCBkaXI6ICdkZXNjJyB9XTtcclxuXHJcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24gPSAncnRsJztcclxuICBpc1BhbmVsT3BlbmVkID0gZmFsc2U7XHJcbiAgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplcyA9IFBBR0VfU0laRTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNDb25maWdDaGFuZ2VkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdGFibGVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BhZ2VDaGFuZ2VkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZTogUGFnZUV2ZW50ID0ge1xyXG4gICAgcGFnZUluZGV4OiAxLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgbGVuZ3RoOiAwLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRWYWx1ZTogVGFibGVTb3J0T3B0aW9ucztcclxuXHJcbiAgZWRpdG9yVHlwZSA9IE5ERl9FRElUT1JfVFlQRS5UQUJMRVM7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2ZpbHRlcnNNYXBwZXI6IEZpbHRlcnNNYXBwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHluYW1pY1RhYmxlU2VydmljZTogRHluYW1pY1RhYmxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZ1RhYmxlU2VydmljZTogTmRmVGFibGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdG9hc3RyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgX25kZlRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2U6IE5kZlRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90YWJsZUhvb2tzU2VydmljZTogVGFibGVIb29rc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCh7IGxhbmc6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgfSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSByZXMubGFuZyA9PT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICB0b2dnbGVQYW5lbCA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNQYW5lbE9wZW5lZCA9ICF0aGlzLmlzUGFuZWxPcGVuZWQ7XHJcbiAgfTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgdGFibGVLZXkgPSBjaGFuZ2VzLnRhYmxlS2V5Py5jdXJyZW50VmFsdWU7XHJcbiAgICBjb25zdCBjb25maWcgPSBjaGFuZ2VzLmNvbmZpZz8uY3VycmVudFZhbHVlO1xyXG5cclxuICAgIGlmICh0YWJsZUtleSAmJiBjb25maWcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdZb3UgY2Fubm90IHNldCBib3RoIHRhYmxlS2V5IGFuZCB0YWJsZUNvbmZpZyBhdCB0aGUgc2FtZSB0aW1lLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuX2FwcGx5VGFibGVDb25maWcoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFibGVLZXkpIHtcclxuICAgICAgdGhpcy5fbG9hZFRhYmxlQ29uZmlnKHRhYmxlS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTG9hZChkYXRhOiBOdXhlb1BhZ2luYXRpb248YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5vbkxvYWRlZC5lbWl0KGRhdGEpO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5fdGFibGVJbml0aWFsaXplZCB8fFxyXG4gICAgICB0aGlzLmZpbHRlclJlbG9hZENvbmZpZz8uc3RyYXRlZ3kgPT09ICduZXZlcicgfHxcclxuICAgICAgdGhpcy5fcGFnZUNoYW5nZWRcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9wYWdlQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9pc0NvbmZpZ0NoYW5nZWQgfHxcclxuICAgICAgdGhpcy5maWx0ZXJSZWxvYWRDb25maWc/LnN0cmF0ZWd5ID09PSAnYWx3YXlzJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uc1N1Yi5uZXh0KGRhdGE/LmFnZ3JlZ2F0aW9ucyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWx0ZXJSZWxvYWRDb25maWc/LnN0cmF0ZWd5ID09PSAnb25DaGFuZ2UnKSB7XHJcbiAgICAgIGNvbnN0IGFjdGl2YXRlZFF1ZXJ5ID0gdGhpcy5fYWN0aXZhdGVkQ3JpdGVyaWFTdWIuZ2V0VmFsdWUoKTtcclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gYWN0aXZhdGVkUXVlcnk/LmN1cnJlbnRWYWx1ZSB8fCB7fTtcclxuICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGFjdGl2YXRlZFF1ZXJ5Py5wcmV2aW91c1ZhbHVlIHx8IHt9O1xyXG5cclxuICAgICAgY29uc3QgdXBkYXRlZEtleXMgPSBfLnVuaW9uKFxyXG4gICAgICAgIF8ua2V5cyhwcmV2aW91c1ZhbHVlKSxcclxuICAgICAgICBfLmtleXMoY3VycmVudFZhbHVlKVxyXG4gICAgICApLmZpbHRlcigoa2V5KSA9PiAhXy5pc0VxdWFsKHByZXZpb3VzVmFsdWVba2V5XSwgY3VycmVudFZhbHVlW2tleV0pKTtcclxuXHJcbiAgICAgIGNvbnN0IHRyaWdnZXJLZXlzID0gdGhpcy5maWx0ZXJSZWxvYWRDb25maWcudHJpZ2dlckZpZWxkcyB8fCBbXTtcclxuICAgICAgY29uc3Qgc2hvdWxkUmVsb2FkID0gdHJpZ2dlcktleXMuc29tZSgoa2V5KSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhrZXkpKTtcclxuICAgICAgaWYgKHNob3VsZFJlbG9hZCkge1xyXG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uc1N1Yi5uZXh0KGRhdGE/LmFnZ3JlZ2F0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5pdGlhbGl6ZShkYXRhOiBOdXhlb1BhZ2luYXRpb248YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5fYWdncmVnYXRpb25zU3ViLm5leHQoZGF0YT8uYWdncmVnYXRpb25zKTtcclxuICAgIHRoaXMuX3RhYmxlSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5faXNDb25maWdDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uSW5pdGlhbGl6ZWQuZW1pdChkYXRhKTtcclxuICB9XHJcblxyXG4gIGNvbHVtbnNDaGFuZ2VkKGNvbHVtbnM6IFRhYmxlQ29sdW1uQ29uZmlnW10pIHtcclxuICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnNTdWIubmV4dChjb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIHNvcnRDaGFuZ2VkKHNvcnQ6IFNvcnRUYWJsZUl0ZW0pIHtcclxuICAgIHRoaXMuX3NvcnRWYWx1ZSA9IHsgc29ydEJ5OiBzb3J0LnZhbHVlLCBzb3J0T3JkZXI6IHNvcnQuZGlyZWN0aW9uIH07XHJcbiAgICB0aGlzLl9zb3J0T3B0aW9uU3ViLm5leHQodGhpcy5fc29ydFZhbHVlKTtcclxuICB9XHJcblxyXG4gIG1vZGVDaGFuZ2VkKG1vZGU6IFRhYmxlVmlld01vZGUpIHtcclxuICAgIHRoaXMuX3ZpZXdNb2RlU3ViLm5leHQobW9kZSk7XHJcbiAgfVxyXG5cclxuICBvblNvcnRDaGFuZ2VkKHNvcnQ6IFRhYmxlU29ydE9wdGlvbnMpIHtcclxuICAgIHRoaXMuX3NvcnRWYWx1ZSA9IHNvcnQ7XHJcbiAgICB0aGlzLm9uU29ydC5lbWl0KHNvcnQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0VGFibGUodHlwZTogRXhwb3J0VHlwZSkge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IF8uY2xvbmVEZWVwKHRoaXMuZXhwb3J0VGFibGVDb25maWc/LnJlcXVlc3QpO1xyXG4gICAgaWYgKCFyZXF1ZXN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zU3ViLmdldFZhbHVlKCk7XHJcbiAgICBjb25zdCBmaWVsZHMgPSBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuaGVhZGVyQ2xhc3MgfHwgY29sPy5maWxlZEtleSk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gY29sdW1ucy5tYXAoXHJcbiAgICAgIChjb2wpID0+ICh0aGlzLnRhYmxlQ29uZmlnLnByZWZpeCB8fCAnJykgKyBjb2wubmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuX2N1c3RvbUNyaXRlcmlhU3ViLmdldFZhbHVlKCk7XHJcblxyXG4gICAgcmVxdWVzdC5wYXJhbXMgPSBtZXJnZShcclxuICAgICAge30sXHJcbiAgICAgIGNyaXRlcmlhLnBhcmFtcyxcclxuICAgICAgdGhpcy5fc29ydFZhbHVlIHx8IHt9LFxyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnPy5xdWlja0ZpbHRlcnNcclxuICAgICAgICA/IHsgcXVpY2tGaWx0ZXJzOiB0aGlzLnRhYmxlQ29uZmlnLnF1aWNrRmlsdGVycyB9XHJcbiAgICAgICAgOiB7fSxcclxuICAgICAgcmVxdWVzdD8ucGFyYW1zXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJsb2JOYW1lS2V5ID0gdGhpcy5leHBvcnRUYWJsZUNvbmZpZz8uYmxvYk5hbWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBOZGZFeHBvcnRQYXlsb2FkID0gbWVyZ2UoXHJcbiAgICAgIHt9LFxyXG4gICAgICByZXF1ZXN0Py5wYXlsb2FkIHx8IHt9LFxyXG5cclxuICAgICAge1xyXG4gICAgICAgIHByZWRpY2F0ZUxpc3Q6IGNyaXRlcmlhLnBheWxvYWQucHJlZGljYXRlTGlzdCB8fCBbXSxcclxuICAgICAgICByZXBvcnRNZXRhRGF0YToge1xyXG4gICAgICAgICAgYmxvYk5hbWU6ICcnLFxyXG4gICAgICAgICAgZG9jVHlwZU5hbWU6IHRoaXMuZXhwb3J0VGFibGVDb25maWcuZG9jVHlwZU5hbWUsXHJcbiAgICAgICAgICBmaWxlVHlwZTogdHlwZSxcclxuICAgICAgICAgIGxvY2FsZTpcclxuICAgICAgICAgICAgdGhpcy5leHBvcnRUYWJsZUNvbmZpZz8ubG9jYWxlIHx8XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcsXHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMuZXhwb3J0VGFibGVDb25maWc/LmZpZWxkcyB8fCBmaWVsZHMsXHJcbiAgICAgICAgICBoZWFkZXJzOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgYXI6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oJ2FyJyksXHJcbiAgICAgIGVuOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKCdlbicpLFxyXG4gICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbnMgPVxyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnNbdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZ107XHJcbiAgICAgICAgICBwYXlsb2FkLnJlcG9ydE1ldGFEYXRhLmhlYWRlcnMgPSBoZWFkZXJzLm1hcCgoY29sKSA9PlxyXG4gICAgICAgICAgICBfLmdldChjdXJyZW50VHJhbnNsYXRpb25zLCBjb2wpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcGF5bG9hZC5yZXBvcnRNZXRhRGF0YS5ibG9iTmFtZSA9IF8uZ2V0KFxyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnNbJ2FyJ10sXHJcbiAgICAgICAgICAgIGJsb2JOYW1lS2V5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcGF5bG9hZC5yZXBvcnRNZXRhRGF0YS5ibG9iTmFtZUVuID0gXy5nZXQoXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uc1snZW4nXSxcclxuICAgICAgICAgICAgYmxvYk5hbWVLZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlSG9va3NTZXJ2aWNlLmV4ZWN1dGVCZWZvcmVFeHBvcnQocGF5bG9hZCwgcmVxdWVzdClcclxuICAgICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCh7IHBheWxvYWQsIHJlcXVlc3QgfSkgPT5cclxuICAgICAgICAgICAgICB0aGlzLl9uZ1RhYmxlU2VydmljZS5leHBvcnRUYWJsZShyZXF1ZXN0LCBwYXlsb2FkKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl90b2FzdHJTZXJ2aWNlLmVycm9yKCdUQUJMRS5FWFBPUlQuUmVxdWVzdEVycm9yJyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMuX3RvYXN0clNlcnZpY2Uuc3VjY2VzcygnVEFCTEUuRVhQT1JULnJlcXVlc3RTdWNjZXNzJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3RvYXN0clNlcnZpY2UuZXJyb3IoJ1RBQkxFLkVYUE9SVC5yZXF1ZXN0RXJyb3InKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQ2hhbmdlZChjcml0ZXJpYTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgdGhpcy5fdHJpZ2dlckNyaXRlcmlhQ2hhbmdlcyhjcml0ZXJpYSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJzQ29uZmlnPy5tb2RlICE9PSAncGF5bG9hZCcpIHtcclxuICAgICAgY29uc3QgaXNTdHJpbmdpZnlQYXJhbXMgPSB0aGlzLmZpbHRlcnNDb25maWc/LnN0cmluZ2lmeVBhcmFtcztcclxuICAgICAgY29uc3QgdmFsdWUgPSAhaXNTdHJpbmdpZnlQYXJhbXNcclxuICAgICAgICA/IGNyaXRlcmlhXHJcbiAgICAgICAgOiB0aGlzLl9zdHJpbmdpZnlWYWx1ZXMoY3JpdGVyaWEpO1xyXG4gICAgICB0aGlzLl9keW5hbWljVGFibGVTZXJ2aWNlLnJlZnJlc2hEYXRhLm5leHQodmFsdWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuX2ZpbHRlcnNNYXBwZXIucHJlcGFyZVBheWxvYWQoXHJcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5maWVsZHMsXHJcbiAgICAgIGNyaXRlcmlhXHJcbiAgICApO1xyXG4gICAgdGhpcy5fY3VzdG9tQ3JpdGVyaWFTdWIubmV4dChwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIG9uVGV4dFNlYXJjaCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgIGlmICghdGhpcy50ZXh0U2VhcmNoQ29uZmlnPy5maWVsZEtleSB8fCB0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICB0aGlzLm9uQ2xlYXJTZWFyY2goKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdGV4dFNlYXJjaFN1Yi5uZXh0KHRleHQpO1xyXG4gIH07XHJcblxyXG4gIG9wZW5TZWFyY2hNb2RhbCA9ICgpID0+IHtcclxuICAgIGNvbnN0IF9kaWFsb2dDb25maWcgPSB0aGlzLnRleHRTZWFyY2hDb25maWc/LnN1ZmZpeD8uZGlhbG9nO1xyXG4gICAgaWYgKCFfZGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgb3B0aW9ucywgLi4uZGF0YSB9ID0gX2RpYWxvZ0NvbmZpZztcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuPEh0bWxEaWFsb2dDb21wb25lbnQsIEh0bWxEaWFsb2dDb25maWc+KFxyXG4gICAgICBIdG1sRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGFuZWxDbGFzczogJ3AtMCcsXHJcbiAgICAgICAgbWluV2lkdGg6ICdtaW4oNTAwcHgsNjB2dyknLFxyXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24sXHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIG9uQ2xlYXJTZWFyY2ggPSAoKSA9PiB7XHJcbiAgICB0aGlzLl90ZXh0U2VhcmNoU3ViLm5leHQobnVsbCk7XHJcbiAgfTtcclxuXHJcbiAgb25QYWdlQ2hhbmdlZChwYWdlOiBQYWdlRXZlbnQpIHtcclxuICAgIHRoaXMuX3BhZ2VDaGFuZ2VkID1cclxuICAgICAgdGhpcy5fYWN0aXZlUGFnZS5wYWdlSW5kZXggIT09IHBhZ2UucGFnZUluZGV4IHx8XHJcbiAgICAgIHRoaXMuX2FjdGl2ZVBhZ2UucGFnZVNpemUgIT09IHBhZ2UucGFnZVNpemU7XHJcbiAgICBpZiAodGhpcy5fcGFnZUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5vblBhZ2UuZW1pdChwYWdlKTtcclxuICAgICAgdGhpcy5fYWN0aXZlUGFnZSA9IHBhZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJCeVZpc2liaWxpdHkoXHJcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbkNvbmZpZ1tdXHJcbiAgKTogVGFibGVDb2x1bW5Db25maWdbXSB7XHJcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmRlZmF1bHRWaXNpYmxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWFyY2goW3NlYXJjaCwgZmlsdGVyc106IFtcclxuICAgIHN0cmluZyxcclxuICAgIHtcclxuICAgICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgICAgcGF5bG9hZD86IHsgcHJlZGljYXRlTGlzdDogYW55W10gfSAmIFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICB9XHJcbiAgXSk6IGFueSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHsgcHJlZGljYXRlTGlzdCB9ID0gZmlsdGVycz8ucGF5bG9hZCB8fCB7IHByZWRpY2F0ZUxpc3Q6IFtdIH07XHJcbiAgICAgIGNvbnN0IF9rZXkgPSB0aGlzLnRleHRTZWFyY2hDb25maWc/LmZpZWxkS2V5O1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmRleCA9IHByZWRpY2F0ZUxpc3QuZmluZEluZGV4KChpdG0pID0+IGl0bS5uYW1lID09PSBfa2V5KTtcclxuICAgICAgaWYgKHNlYXJjaCAmJiBfa2V5KSB7XHJcbiAgICAgICAgaWYgKHNlYXJjaEluZGV4ID49IDApIHtcclxuICAgICAgICAgIHByZWRpY2F0ZUxpc3Rbc2VhcmNoSW5kZXhdLnZhbHVlID0gYCcke3NlYXJjaH0nYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlZGljYXRlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogX2tleSxcclxuICAgICAgICAgICAgb3BlcmF0b3I6XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXh0U2VhcmNoQ29uZmlnPy5vcGVyYXRvciB8fCBDT01QQVJJU09OX09QRVJBVE9SLmVxdWFscyxcclxuICAgICAgICAgICAgdmFsdWU6IGAnJHtzZWFyY2h9J2AsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoSW5kZXggPj0gMCkge1xyXG4gICAgICAgIHByZWRpY2F0ZUxpc3Quc3BsaWNlKHNlYXJjaEluZGV4KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAoeyAuLi5maWx0ZXJzIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RyaW5naWZ5VmFsdWVzKGNyaXRlcmlhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY3JpdGVyaWEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgYWNjW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IHZhbHVlO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJpZ2dlckNyaXRlcmlhQ2hhbmdlcyhjcml0ZXJpYTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgaWYgKHRoaXMuX3RhYmxlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5vblF1ZXJ5Q2hhbmdlLmVtaXQoY3JpdGVyaWEpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWN0aXZhdGVkUXVlcnkgPSB7IC4uLnRoaXMuX2FjdGl2YXRlZENyaXRlcmlhU3ViLmdldFZhbHVlKCkgfTtcclxuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBhY3RpdmF0ZWRRdWVyeT8uY3VycmVudFZhbHVlO1xyXG4gICAgdGhpcy5fYWN0aXZhdGVkQ3JpdGVyaWFTdWIubmV4dCh7XHJcbiAgICAgIHByZXZpb3VzVmFsdWU6IHByZXZpb3VzVmFsdWUsXHJcbiAgICAgIGN1cnJlbnRWYWx1ZTogY3JpdGVyaWEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHBhcmFtIGNvbmZpZyBOZGZUYWJsZUNvbmZpZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FwcGx5VGFibGVDb25maWcoY29uZmlnOiBOZGZUYWJsZUNvbmZpZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFibGVDb25maWdTdWIubmV4dChjb25maWcpO1xyXG4gICAgdGhpcy5pc1BhbmVsT3BlbmVkID0gY29uZmlnPy5vcHRpb25zPy5maWx0ZXJzPy5wYW5lbD8udmlzaWJsZSA/PyB0cnVlO1xyXG4gICAgdGhpcy5faXNDb25maWdDaGFuZ2VkID0gISFjb25maWc7XHJcbiAgICBpZiAoY29uZmlnLmNvbHVtbnMpIHtcclxuICAgICAgdGhpcy5fZGlzcGxheWVkQ29sdW1uc1N1Yi5uZXh0KHRoaXMuX2ZpbHRlckJ5VmlzaWJpbGl0eShjb25maWcuY29sdW1ucykpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZy5zb3J0aW5nQnkpIHtcclxuICAgICAgdGhpcy5fc29ydFZhbHVlID0gY29uZmlnLnNvcnRpbmdCeTtcclxuICAgICAgdGhpcy5fc29ydE9wdGlvblN1Yi5uZXh0KGNvbmZpZy5zb3J0aW5nQnkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZz8ub3B0aW9ucz8udGFibGVNb2RlPy5tb2RlKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU3ViLm5leHQoY29uZmlnLm9wdGlvbnMudGFibGVNb2RlLm1vZGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZy5wYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVQYWdlLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAZGVzY3JpcHRpb24gTG9hZHMgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGtleSBhbmQgYXBwbGllcyBpdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB1c2VkIHRvIGZldGNoIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2xvYWRUYWJsZUNvbmZpZyhrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmRmVGFibGVDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICAgICAuZ2V0VGFibGVDb25maWd1cmF0aW9uKGtleSwgdGhpcy5jb25maWdQYXRoKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnVHJhbnNmb3JtZXIgJiYgXy5pc0Z1bmN0aW9uKHRoaXMuY29uZmlnVHJhbnNmb3JtZXIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1RyYW5zZm9ybWVyKGNvbmZpZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gb2YoY29uZmlnKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+IHtcclxuICAgICAgICB0aGlzLl9hcHBseVRhYmxlQ29uZmlnKGNvbmZpZyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgKm5nSWY9XCJ0YWJsZUNvbmZpZ1wiXHJcbiAgY2xhc3M9XCJuZGYtdGFibGVfX2NvbnRhaW5lclwiXHJcbiAgW2NsYXNzLnBhbmVsLW9wZW5lZF09XCJpc1BhbmVsT3BlbmVkICYmIGZpbHRlcnNDb25maWdcIlxyXG4gIFtkaXJdPVwiZGlyZWN0aW9uXCJcclxuICBuZGZGbHVpZEhlaWdodFxyXG4gIGNzc1Zhcj1cIi0tbmRmLXRhYmxlLWhlaWdodFwiXHJcbiAgW2NhbGN1bGF0ZV09XCJhdXRvQ2FsY3VsYXRlSGVpZ2h0XCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJuZGYtdGFibGVfX3BhbmVsXCIgKm5nSWY9XCJmaWx0ZXJzQ29uZmlnPy5maWVsZHNcIj5cclxuICAgIDxhcHAtZmlsdGVycy1wYW5lbFxyXG4gICAgICBbZmllbGRzXT1cImZpbHRlcnNDb25maWcuZmllbGRzXCJcclxuICAgICAgW2FnZ3JlZ2F0aW9uc109XCJhZ2dyZWdhdGlvbnMkIHwgYXN5bmNcIlxyXG4gICAgICAoZmlsdGVyQ2hhbmdlZCk9XCJmaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICBbYWN0aXZlUXVlcnldPVwiYWN0aXZlUXVlcnlcIlxyXG4gICAgICBjbGFzcz1cIm5kZi10YWJsZV9fZmlsdGVyc1wiXHJcbiAgICAgIFtjdXN0b21UZW1wbGF0ZVJlZl09XCJmaWx0ZXJDdXN0b21UZW1wbGF0ZVwiXHJcbiAgICA+PC9hcHAtZmlsdGVycy1wYW5lbD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibmRmLXRhYmxlX19jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmRmLXRhYmxlX19oZWFkZXIgZmxleFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmRmLXRhYmxlX19oZWFkZXJfX2N1c3RvbS1hY3Rpb25zIGZsZXggZ2FwLXgtNCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWFyY2hUYWJsZVRlbXBsYXRlIHx8IGRlZmF1bHRBY3Rpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICBwYW5lbE9wZW5lZDogaXNQYW5lbE9wZW5lZCxcclxuICAgICAgICAgICAgdG9nZ2xlUGFuZWw6IHRvZ2dsZVBhbmVsLFxyXG4gICAgICAgICAgICBvcGVuTW9kYWw6IG9wZW5TZWFyY2hNb2RhbCxcclxuICAgICAgICAgICAgc2VhcmNoOiBvblRleHRTZWFyY2gsXHJcbiAgICAgICAgICAgIGNsZWFyOiBvbkNsZWFyU2VhcmNoXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFjdGlvblRlbXBsYXRlPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJpc1BhbmVsVG9nZ2xlQXZhaWxhYmxlICYmICEhZmlsdGVyc0NvbmZpZy5maWVsZHM/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uPiBmaWx0ZXJfYWx0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGFwcC10ZXh0LXNlYXJjaFxyXG4gICAgICAgICAgICAqbmdJZj1cInRleHRTZWFyY2hDb25maWdcIlxyXG4gICAgICAgICAgICBbc2VhcmNoQ29uZmlnXT1cInRleHRTZWFyY2hDb25maWdcIlxyXG4gICAgICAgICAgICAob3Blbk1vZGFsKT1cIm9wZW5TZWFyY2hNb2RhbCgpXCJcclxuICAgICAgICAgICAgW3NlYXJjaF09XCJ0ZXh0U2VhcmNoJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblRleHRTZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChjbGVhcik9XCJvbkNsZWFyU2VhcmNoKClcIlxyXG4gICAgICAgICAgPjwvYXBwLXRleHQtc2VhcmNoPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmRmLXRhYmxlX19oZWFkZXJfX2FjdGlvbnMgZmxleCBnYXAteC00IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxhcHAtZWRpdG9yLWJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJqc29uRWRpdG9yRW5hYmxlZCAmJiAodGFibGVLZXkgfHwgdGFibGVDb25maWc/LmtleSlcIlxyXG4gICAgICAgICAgW2tleV09XCJ0YWJsZUtleSB8fCB0YWJsZUNvbmZpZz8ua2V5XCJcclxuICAgICAgICAgIFt0eXBlXT1cImVkaXRvclR5cGVcIlxyXG4gICAgICAgID48L2FwcC1lZGl0b3ItYnV0dG9uPlxyXG4gICAgICAgIDxuZGYtdGFibGUtZXhwb3J0XHJcbiAgICAgICAgICAqbmdJZj1cImV4cG9ydFRhYmxlQ29uZmlnPy5lbmFibGVkXCJcclxuICAgICAgICAgIFtjb25maWddPVwiZXhwb3J0VGFibGVDb25maWdcIlxyXG4gICAgICAgICAgKG9uRXhwb3J0KT1cImV4cG9ydFRhYmxlKCRldmVudClcIlxyXG4gICAgICAgID48L25kZi10YWJsZS1leHBvcnQ+XHJcblxyXG4gICAgICAgIDx0YWJsZS1zb3J0aW5nLWxpc3RcclxuICAgICAgICAgICpuZ0lmPVwiISFzb3J0TGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICAgIFtzb3J0TGlzdF09XCJzb3J0TGlzdFwiXHJcbiAgICAgICAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvdGFibGUtc29ydGluZy1saXN0PlxyXG4gICAgICAgIDx0YWJsZS1jb2x1bW5zLXRvZ2dsZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uVG9nZ2xlXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cInRhYmxlQ29uZmlnLmNvbHVtbnNcIlxyXG4gICAgICAgICAgW3ByZWZpeF09XCJ0YWJsZUNvbmZpZy5wcmVmaXhcIlxyXG4gICAgICAgICAgW3NvcnRhYmxlXT1cImNvbHVtbnNPcHRpb25zPy5zb3J0YWJsZVwiXHJcbiAgICAgICAgICAoY29sdW1uc0NoYW5nZWQpPVwiY29sdW1uc0NoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvdGFibGUtY29sdW1ucy10b2dnbGVyPlxyXG4gICAgICAgIDxtb2RlLXRvZ2dsZXJcclxuICAgICAgICAgICpuZ0lmPVwidGFibGVNb2RlPy50b2dnbGVNb2RlXCJcclxuICAgICAgICAgIFttb2RlXT1cInRhYmxlTW9kZS5tb2RlIHx8ICdsaXN0J1wiXHJcbiAgICAgICAgICBbbW9kZXNMaXN0XT1cInRhYmxlTW9kZT8uYXZhaWxhYmxlTW9kZVwiXHJcbiAgICAgICAgICAobW9kZUNoYW5nZWQpPVwibW9kZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvbW9kZS10b2dnbGVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFjdGlvbnNUYWJsZVRlbXBsYXRlXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGFibGVDb25maWcsXHJcbiAgICAgICAgICAgIHBhbmVsT3BlbmVkOiBpc1BhbmVsT3BlbmVkLFxyXG4gICAgICAgICAgICB0b2dnbGVQYW5lbDogdG9nZ2xlUGFuZWwsXHJcbiAgICAgICAgICAgIG9wZW5Nb2RhbDogb3BlblNlYXJjaE1vZGFsLFxyXG4gICAgICAgICAgICBzZWFyY2g6IG9uVGV4dFNlYXJjaCxcclxuICAgICAgICAgICAgY2xlYXI6IG9uQ2xlYXJTZWFyY2hcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Y3RzLWR5bmFtaWMtdGFibGVcclxuICAgICAgKm5nSWY9XCIhdGFibGVDb25maWcuaXNEYXRhUHJvdmlkZWRcIlxyXG4gICAgICBjbGFzcz1cIm5kZi10YWJsZV9fdGFibGUgdGFibGUtc3R5bGVcIlxyXG4gICAgICBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCJcclxuICAgICAgW2NvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luY1wiXHJcbiAgICAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jXCJcclxuICAgICAgW2Z1bGxXaWR0aF09XCJ0YWJsZUNvbmZpZy5mdWxsV2lkdGggfHwgJ2F1dG8nXCJcclxuICAgICAgW3BhZ2VTaXplXT1cInRhYmxlQ29uZmlnLnBhZ2VTaXplIHx8IDEwXCJcclxuICAgICAgW3BhZ2VOdW1iZXJdPVwidGFibGVDb25maWcucGFnZU51bWJlciB8fCAxXCJcclxuICAgICAgW3BhZ2VQcm92aWRlcl09XCJ0YWJsZUNvbmZpZy5wYWdlUHJvdmlkZXJcIlxyXG4gICAgICBbY3VzdG9tVXJsXT1cInRhYmxlQ29uZmlnLmN1c3RvbVVybFwiXHJcbiAgICAgIFtxdWlja0ZpbHRlcl09XCJcclxuICAgICAgICB0YWJsZUNvbmZpZy5xdWlja0ZpbHRlcnNcclxuICAgICAgICAgID8geyBxdWlja0ZpbHRlcnM6IHRhYmxlQ29uZmlnLnF1aWNrRmlsdGVycyB9XHJcbiAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICBcIlxyXG4gICAgICBbZGVmdWx0U29ydF09XCJ0YWJsZUNvbmZpZy5kZWZhdWx0U29ydCB8fCBkZWZhdWx0U29ydFwiXHJcbiAgICAgIFtzb3J0aW5nQnldPVwic29ydE9wdGlvbiQgfCBhc3luY1wiXHJcbiAgICAgIFtlbnRpdHlUeXBlXT1cIidhbGwnXCJcclxuICAgICAgW2ZpZWxkc109XCJ0YWJsZUNvbmZpZy5maWVsZHNcIlxyXG4gICAgICBbdGFibGVNb2RlXT1cInZpZXdNb2RlJCB8IGFzeW5jXCJcclxuICAgICAgW2NvbXBvbmVudE5hbWVdPVwidGFibGVNb2RlPy5bJ2NvbXBvbmVudE5hbWUnXVwiXHJcbiAgICAgIFtyYW5nZV09XCJ0YWJsZUNvbmZpZz8ucmFuZ2VcIlxyXG4gICAgICBbaXNTZWFyY2hQYWdlXT1cInRhYmxlQ29uZmlnPy5pc1NlYXJjaFBhZ2VcIlxyXG4gICAgICBbbXVsdGlTZWxlY3RSb3dzXT1cInRhYmxlQ29uZmlnPy5tdWx0aVNlbGVjdFJvd3NcIlxyXG4gICAgICBbY3VzdG9tRmlyc3RSb3ddPVwidGFibGVDb25maWc/LmN1c3RvbUZpcnN0Um93XCJcclxuICAgICAgW2hpZ2hsaWdodFNlbGVjdGVkQ2FyZF09XCJ0YWJsZUNvbmZpZz8uaGlnaGxpZ2h0U2VsZWN0ZWRDYXJkXCJcclxuICAgICAgW3Nob3dBY3Rpb25zQXNNZW51XT1cInRhYmxlQ29uZmlnPy5zaG93QWN0aW9uc0FzTWVudVwiXHJcbiAgICAgIFtmaWx0ZXJQYXJhbXNdPVwidGFibGVDb25maWc/LmZpbHRlclBhcmFtc1wiXHJcbiAgICAgIFtmb3JtYXRdPVwidGFibGVDb25maWc/LmZvcm1hdCB8fCAnTU1NTSBkLCB5J1wiXHJcbiAgICAgIFtwYWdlU2l6ZXNdPVwidGFibGVDb25maWc/LnBhZ2VTaXplcyB8fCBkZWZhdWx0UGFnZVNpemVzXCJcclxuICAgICAgW3ByZWZpeF09XCJ0YWJsZUNvbmZpZy5wcmVmaXggfHwgJydcIlxyXG4gICAgICBbcm93Q3Vyc29yXT1cInRydWVcIlxyXG4gICAgICBbcXVlcnlQYXJhbV09XCJ0YWJsZUNvbmZpZy5xdWVyeVBhcmFtXCJcclxuICAgICAgW2N1c3RvbUZpbHRlcnNdPVwic2VhcmNoQW5kRmlsdGVycyQgfCBhc3luY1wiXHJcbiAgICAgIFt0YWJsZUFjdGlvbnNdPVwidGFibGVDb25maWcudGFibGVBY3Rpb25zXCJcclxuICAgICAgW3JlcXVlc3RBY3Rpb25zXT1cInRhYmxlQ29uZmlnPy5yZXF1ZXN0QWN0aW9uc1wiXHJcbiAgICAgIFtoZWFkZXJzXT1cInRhYmxlQ29uZmlnLmhlYWRlcnNcIlxyXG4gICAgICAob25Sb3dTZWxlY3RlZCk9XCJvblJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvblJvd0luZGV4U2VsZWN0ZWQpPVwib25Sb3dJbmRleFNlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChhY3Rpb25PblJvdyk9XCJhY3Rpb25PblJvdy5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25HZXR0aW5nRGF0YSk9XCJvbkdldHRpbmdEYXRhLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvbkxvYWQpPVwib25Mb2FkKCRldmVudClcIlxyXG4gICAgICAob25Jbml0aWFsaXplKT1cIm9uSW5pdGlhbGl6ZSgkZXZlbnQpXCJcclxuICAgICAgKG9uTXVsdGlSb3dTZWxlY3RlZCk9XCJvbk11bHRpUm93U2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgKG9uTG9hZGluZyk9XCJvbkxvYWRpbmcuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgKG9uUGFnZSk9XCJvblBhZ2VDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICBbaXNMZWdhY3lNb2RlXT1cImZhbHNlXCJcclxuICAgICAgW3Nob3dUb3RhbFJlY29yZF09XCJ0cnVlXCJcclxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgIGVtcHR5VGVtcGxhdGVcclxuICAgICAgICBsZXQtaXNMb2FkaW5nXHJcbiAgICAgICAgbGV0LXJvd3M9XCJyb3dzXCJcclxuICAgICAgICBsZXQtaW5pdGlhbGl6ZWQ9XCJpbml0aWFsaXplZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1kYXRhXCIgKm5nSWY9XCJpc0xvYWRpbmcgJiYgaW5pdGlhbGl6ZWRcIj5cclxuICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtNS82XCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAhcm93cy5sZW5ndGhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxhcHAtbm8tZGF0YS1mb3VuZFxyXG4gICAgICAgICAgICBjbGFzcz1cIm10LTRcIlxyXG4gICAgICAgICAgICBbbWVzc2FnZV09XCJlbXB0eU1lc3NhZ2VcIlxyXG4gICAgICAgICAgPjwvYXBwLW5vLWRhdGEtZm91bmQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2N0cy1keW5hbWljLXRhYmxlPlxyXG5cclxuICAgIDxjdHMtdGFibGVcclxuICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5pc0RhdGFQcm92aWRlZFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIlxyXG4gICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICBbY29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jXCJcclxuICAgICAgW3Jlc3BvbnNpdmVDb2x1bW5zXT1cImRpc3BsYXllZENvbHVtbnMkIHwgYXN5bmNcIlxyXG4gICAgICBbcm93Q3Vyc29yXT1cInRydWVcIlxyXG4gICAgICBbZnVsbFdpZHRoXT1cInRhYmxlQ29uZmlnLmZ1bGxXaWR0aCB8fCAnYXV0bydcIlxyXG4gICAgICBbZW50aXR5VHlwZV09XCInYWxsJ1wiXHJcbiAgICAgIFtwcmVmaXhdPVwidGFibGVDb25maWcucHJlZml4IHx8ICcnXCJcclxuICAgICAgW3RhYmxlTW9kZV09XCJ2aWV3TW9kZSQgfCBhc3luY1wiXHJcbiAgICAgIFtjb21wb25lbnROYW1lXT1cInRhYmxlTW9kZT8uWydjb21wb25lbnROYW1lJ11cIlxyXG4gICAgICBbbXVsdGlTZWxlY3RSb3dzXT1cInRhYmxlQ29uZmlnPy5tdWx0aVNlbGVjdFJvd3NcIlxyXG4gICAgICBbY3VzdG9tRmlyc3RSb3ddPVwidGFibGVDb25maWc/LmN1c3RvbUZpcnN0Um93XCJcclxuICAgICAgW3RhYmxlQWN0aW9uc109XCJ0YWJsZUNvbmZpZy50YWJsZUFjdGlvbnNcIlxyXG4gICAgICBbc2hvd0FjdGlvbnNBc01lbnVdPVwidGFibGVDb25maWc/LnNob3dBY3Rpb25zQXNNZW51XCJcclxuICAgICAgW2RlZnVsdFNvcnRdPVwidGFibGVDb25maWcuZGVmYXVsdFNvcnQgfHwgZGVmYXVsdFNvcnRcIlxyXG4gICAgICBbZm9ybWF0XT1cInRhYmxlQ29uZmlnPy5mb3JtYXQgfHwgJ01NTU0gZCwgeSdcIlxyXG4gICAgICBbaGlnaGxpZ2h0U2VsZWN0ZWRDYXJkXT1cInRhYmxlQ29uZmlnPy5oaWdobGlnaHRTZWxlY3RlZENhcmRcIlxyXG4gICAgICAob25Sb3dTZWxlY3RlZCk9XCJvblJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvblJvd0luZGV4U2VsZWN0ZWQpPVwib25Sb3dJbmRleFNlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChvbk11bHRpUm93U2VsZWN0ZWQpPVwib25NdWx0aVJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChhY3Rpb25PblJvdyk9XCJhY3Rpb25PblJvdy5lbWl0KCRldmVudClcIlxyXG4gICAgICAob25Tb3J0aW5nKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICA+PC9jdHMtdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -3,25 +3,21 @@ import { map } from 'rxjs/operators';
3
3
  import { BaseService } from '../../../../shared/services';
4
4
  import * as i0 from "@angular/core";
5
5
  export class NdfTableService extends BaseService {
6
- constructor(injector) {
7
- super(injector);
8
- }
9
6
  exportTable(request, payload) {
10
- return this.request({
11
- type: (`${request.method}`.toLowerCase() || 'post'),
12
- endpoint: request.url,
13
- headers: request === null || request === void 0 ? void 0 : request.headers,
14
- queryParams: request === null || request === void 0 ? void 0 : request.params,
15
- payload: payload
16
- }).pipe(map((res) => `${res === null || res === void 0 ? void 0 : res.Status}`.toLowerCase() === 'success'));
7
+ return this._callApiService
8
+ .customQuery({
9
+ url: request.url,
10
+ method: (request.method || 'POST'),
11
+ }, request === null || request === void 0 ? void 0 : request.headers, request === null || request === void 0 ? void 0 : request.params, payload)
12
+ .pipe(map((res) => `${res === null || res === void 0 ? void 0 : res.Status}`.toLowerCase() === 'success'));
17
13
  }
18
14
  }
19
- NdfTableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
15
+ NdfTableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
20
16
  NdfTableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableService, providedIn: 'root' });
21
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfTableService, decorators: [{
22
18
  type: Injectable,
23
19
  args: [{
24
- providedIn: 'root'
20
+ providedIn: 'root',
25
21
  }]
26
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXRhYmxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvc2VydmljZXMvbmRmLXRhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUsxRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBQy9DLFlBQVksUUFBa0I7UUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBeUIsRUFBRSxPQUF5QjtRQUMvRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQXFCO1lBQ3ZDLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sQ0FBMkI7WUFDN0UsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ3JCLE9BQU8sRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsT0FBTztZQUN6QixXQUFXLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU07WUFDNUIsT0FBTyxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQzs7NkdBWlcsZUFBZTtpSEFBZixlQUFlLGNBRmYsTUFBTTs0RkFFTixlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5kZkV4cG9ydFBheWxvYWQsIE5kZlJlcXVlc3RDb25maWcgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZGZUYWJsZVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcblx0XHRzdXBlcihpbmplY3Rvcik7XHJcblx0fVxyXG5cdGV4cG9ydFRhYmxlKHJlcXVlc3Q6IE5kZlJlcXVlc3RDb25maWcsIHBheWxvYWQ6IE5kZkV4cG9ydFBheWxvYWQpIHtcclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Q8eyBTdGF0dXM6IHN0cmluZyB9Pih7XHJcblx0XHRcdHR5cGU6IChgJHtyZXF1ZXN0Lm1ldGhvZH1gLnRvTG93ZXJDYXNlKCkgfHwgJ3Bvc3QnKSBhcyAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnLFxyXG5cdFx0XHRlbmRwb2ludDogcmVxdWVzdC51cmwsXHJcblx0XHRcdGhlYWRlcnM6IHJlcXVlc3Q/LmhlYWRlcnMsXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiByZXF1ZXN0Py5wYXJhbXMsXHJcblx0XHRcdHBheWxvYWQ6IHBheWxvYWRcclxuXHRcdH0pLnBpcGUobWFwKChyZXMpID0+IGAke3Jlcz8uU3RhdHVzfWAudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnKSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmRmLXRhYmxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvc2VydmljZXMvbmRmLXRhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUsxRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBQzlDLFdBQVcsQ0FBQyxPQUF5QixFQUFFLE9BQXlCO1FBQzlELE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsV0FBVyxDQUNWO1lBQ0UsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFtQjtTQUNyRCxFQUNELE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLEVBQ2hCLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLEVBQ2YsT0FBTyxDQUNSO2FBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDOzs2R0FiVSxlQUFlO2lIQUFmLGVBQWUsY0FGZCxNQUFNOzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZGZFeHBvcnRQYXlsb2FkLCBOZGZSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5kZlRhYmxlU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuICBleHBvcnRUYWJsZShyZXF1ZXN0OiBOZGZSZXF1ZXN0Q29uZmlnLCBwYXlsb2FkOiBOZGZFeHBvcnRQYXlsb2FkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsbEFwaVNlcnZpY2VcclxuICAgICAgLmN1c3RvbVF1ZXJ5KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXHJcbiAgICAgICAgICBtZXRob2Q6IChyZXF1ZXN0Lm1ldGhvZCB8fCAnUE9TVCcpIGFzICdQT1NUJyB8ICdHRVQnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVxdWVzdD8uaGVhZGVycyxcclxuICAgICAgICByZXF1ZXN0Py5wYXJhbXMsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiBgJHtyZXM/LlN0YXR1c31gLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJykpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,5 @@
1
- export * from './table';
2
- export * from './ndf-table';
3
1
  export * from './dynamic-table';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFibGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL25kZi10YWJsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy10YWJsZSc7XHJcbiJdfQ==
2
+ export * from './ndf-table';
3
+ export * from './shared';
4
+ export * from './table';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy10YWJsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbmRmLXRhYmxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zaGFyZWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RhYmxlJztcclxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './table-hooks.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFibGUtaG9va3Muc2VydmljZSc7XHJcbiJdfQ==