@trudb/tru-common-lib 0.1.313 → 0.1.317
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.
- package/esm2022/lib/base-views/detail/tru-detail-view-base.mjs +2 -2
- package/esm2022/lib/base-views/search-result/tru-search-result-view-base.mjs +1 -5
- package/esm2022/lib/components/data-grid/classes/tru-data-grid-config.mjs +1 -1
- package/esm2022/lib/components/data-grid/tru-data-grid.mjs +21 -24
- package/esm2022/lib/components/desktop/view/tru-desktop-view.mjs +6 -11
- package/esm2022/lib/services/tru-data-context.mjs +4 -4
- package/fesm2022/trudb-tru-common-lib.mjs +15 -25
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/base-views/search-result/tru-search-result-view-base.d.ts +1 -3
- package/lib/components/data-grid/classes/tru-data-grid-config.d.ts +2 -0
- package/lib/components/data-grid/tru-data-grid.d.ts +2 -4
- package/lib/components/desktop/view/tru-desktop-view.d.ts +1 -3
- package/package.json +1 -1
|
@@ -9,24 +9,22 @@ import { TruValidationDialogContext } from '../validation-dialog/tru-validation-
|
|
|
9
9
|
import { TruValidationDialog } from '../validation-dialog/tru-validation-dialog';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "../../services/tru-data-context";
|
|
12
|
-
import * as i2 from "
|
|
13
|
-
import * as i3 from "../../services/tru-
|
|
14
|
-
import * as i4 from "../../services/tru-
|
|
15
|
-
import * as i5 from "../../
|
|
16
|
-
import * as i6 from "../../services/tru-
|
|
17
|
-
import * as i7 from "../../services/tru-
|
|
18
|
-
import * as i8 from "
|
|
19
|
-
import * as i9 from "
|
|
20
|
-
import * as i10 from "
|
|
21
|
-
import * as i11 from "
|
|
22
|
-
import * as i12 from "../toolbar/tru-toolbar";
|
|
23
|
-
import * as i13 from "../toolbar/
|
|
24
|
-
import * as i14 from "../toolbar/
|
|
25
|
-
import * as i15 from "../toolbar/
|
|
26
|
-
import * as i16 from "../toolbar/separator/tru-toolbar-separator";
|
|
12
|
+
import * as i2 from "../../services/tru-search-result-view-manager";
|
|
13
|
+
import * as i3 from "../../services/tru-app-environment";
|
|
14
|
+
import * as i4 from "../../base-views/search/services/tru-search-view-event-handler";
|
|
15
|
+
import * as i5 from "../../services/tru-ui-notification";
|
|
16
|
+
import * as i6 from "../../services/tru-connection-hub";
|
|
17
|
+
import * as i7 from "../../services/tru-util";
|
|
18
|
+
import * as i8 from "../layout/tab/services/tru-tab-group-event-notifier";
|
|
19
|
+
import * as i9 from "@angular/common";
|
|
20
|
+
import * as i10 from "ag-grid-angular";
|
|
21
|
+
import * as i11 from "../toolbar/tru-toolbar";
|
|
22
|
+
import * as i12 from "../toolbar/menu/tru-toolbar-menu";
|
|
23
|
+
import * as i13 from "../toolbar/button/tru-toolbar-button";
|
|
24
|
+
import * as i14 from "../toolbar/dropdown/tru-toolbar-dropdown";
|
|
25
|
+
import * as i15 from "../toolbar/separator/tru-toolbar-separator";
|
|
27
26
|
export class TruDataGrid {
|
|
28
27
|
dataContext;
|
|
29
|
-
desktopViewEventNotifier;
|
|
30
28
|
searchResultViewManager;
|
|
31
29
|
appEnvironment;
|
|
32
30
|
searchViewEventHandler;
|
|
@@ -92,9 +90,8 @@ export class TruDataGrid {
|
|
|
92
90
|
api;
|
|
93
91
|
subs = [];
|
|
94
92
|
isActive = true;
|
|
95
|
-
constructor(dataContext,
|
|
93
|
+
constructor(dataContext, searchResultViewManager, appEnvironment, searchViewEventHandler, uiNotification, connectionHub, util, app, tabGroupEventNotifier) {
|
|
96
94
|
this.dataContext = dataContext;
|
|
97
|
-
this.desktopViewEventNotifier = desktopViewEventNotifier;
|
|
98
95
|
this.searchResultViewManager = searchResultViewManager;
|
|
99
96
|
this.appEnvironment = appEnvironment;
|
|
100
97
|
this.searchViewEventHandler = searchViewEventHandler;
|
|
@@ -144,7 +141,7 @@ export class TruDataGrid {
|
|
|
144
141
|
this.subs.push(this.searchViewEventHandler.onSearch().pipe(skip(1)).subscribe((setupQuery) => {
|
|
145
142
|
this.onSearch(setupQuery);
|
|
146
143
|
}));
|
|
147
|
-
this.subs.push(this.
|
|
144
|
+
this.subs.push(this.config.view.onActive().pipe(skip(1)).subscribe((isActive) => {
|
|
148
145
|
this.isActive = isActive;
|
|
149
146
|
if (this.isActive) {
|
|
150
147
|
this.config.reportConfig.menuItemsEnabled = () => { return this.rowData.length; };
|
|
@@ -161,7 +158,7 @@ export class TruDataGrid {
|
|
|
161
158
|
this.api.refreshCells({ force: true });
|
|
162
159
|
}));
|
|
163
160
|
this.subs.push(fromEvent(document, 'keydown').subscribe((event) => {
|
|
164
|
-
if (this.
|
|
161
|
+
if (this.config.view.active) {
|
|
165
162
|
let keySequence = this.util.getKeySequence(event);
|
|
166
163
|
if (keySequence === 'ctrl+i' || keySequence === 'meta+i') {
|
|
167
164
|
this.onAdd();
|
|
@@ -542,13 +539,13 @@ export class TruDataGrid {
|
|
|
542
539
|
ngOnDestroy() {
|
|
543
540
|
this.subs.forEach(s => s.unsubscribe());
|
|
544
541
|
}
|
|
545
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDataGrid, deps: [{ token: i1.TruDataContext }, { token: i2.
|
|
546
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruDataGrid, selector: "tru-data-grid", inputs: { config: "config", entity: "entity", name: "name" }, host: { properties: { "class.tru-data-grid": "true" } }, usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType == TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"reportMenus.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"reportMenus.length\">\r\n <tru-toolbar-menu *ngFor=\"let report of reportMenus\" [config]=\"report\"></tru-toolbar-menu>\r\n </div>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"25\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getRowCount()}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getSelectedRowCount()}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important;height:calc(100% - 23px)}.ag-root.ag-layout-normal{height:calc(100% - 23px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing{padding-left:0!important}.ag-cell-inline-editing{height:24px!important}.ag-cell{border-right:solid #dde2eb 1px!important}.ag-has-focus .ag-cell-focus:not(.invalid){border-right:solid #2196f3 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-pinned-left-cols-container .ag-cell:hover{background-color:#2196f31a!important}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:8px;height:8px;border-bottom:solid 4px transparent;border-right:solid 4px transparent;border-left:solid 4px red;border-top:solid 4px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i11.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i12.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i13.TruToolbarMenu, selector: "tru-toolbar-menu", inputs: ["config"] }, { kind: "component", type: i14.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i15.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i16.TruToolbarSeparator, selector: "tru-toolbar-separator" }], encapsulation: i0.ViewEncapsulation.None });
|
|
542
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDataGrid, deps: [{ token: i1.TruDataContext }, { token: i2.TruSearchResultViewManager }, { token: i3.TruAppEnvironment }, { token: i4.TruSearchViewEventHandler }, { token: i5.TruUiNotification }, { token: i6.TruConnectionHub }, { token: i7.TruUtil }, { token: i0.ApplicationRef }, { token: i8.TruTabGroupEventNotifier, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
543
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruDataGrid, selector: "tru-data-grid", inputs: { config: "config", entity: "entity", name: "name" }, host: { properties: { "class.tru-data-grid": "true" } }, usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType == TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"reportMenus.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"reportMenus.length\">\r\n <tru-toolbar-menu *ngFor=\"let report of reportMenus\" [config]=\"report\"></tru-toolbar-menu>\r\n </div>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"25\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getRowCount()}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getSelectedRowCount()}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important;height:calc(100% - 23px)}.ag-root.ag-layout-normal{height:calc(100% - 23px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing{padding-left:0!important}.ag-cell-inline-editing{height:24px!important}.ag-cell{border-right:solid #dde2eb 1px!important}.ag-has-focus .ag-cell-focus:not(.invalid){border-right:solid #2196f3 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-pinned-left-cols-container .ag-cell:hover{background-color:#2196f31a!important}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:8px;height:8px;border-bottom:solid 4px transparent;border-right:solid 4px transparent;border-left:solid 4px red;border-top:solid 4px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i10.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i11.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i12.TruToolbarMenu, selector: "tru-toolbar-menu", inputs: ["config"] }, { kind: "component", type: i13.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i14.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i15.TruToolbarSeparator, selector: "tru-toolbar-separator" }], encapsulation: i0.ViewEncapsulation.None });
|
|
547
544
|
}
|
|
548
545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDataGrid, decorators: [{
|
|
549
546
|
type: Component,
|
|
550
547
|
args: [{ selector: 'tru-data-grid', encapsulation: ViewEncapsulation.None, host: { '[class.tru-data-grid]': 'true' }, template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType == TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"reportMenus.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"reportMenus.length\">\r\n <tru-toolbar-menu *ngFor=\"let report of reportMenus\" [config]=\"report\"></tru-toolbar-menu>\r\n </div>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"25\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getRowCount()}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{getSelectedRowCount()}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important;height:calc(100% - 23px)}.ag-root.ag-layout-normal{height:calc(100% - 23px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing{padding-left:0!important}.ag-cell-inline-editing{height:24px!important}.ag-cell{border-right:solid #dde2eb 1px!important}.ag-has-focus .ag-cell-focus:not(.invalid){border-right:solid #2196f3 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-pinned-left-cols-container .ag-cell:hover{background-color:#2196f31a!important}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:8px;height:8px;border-bottom:solid 4px transparent;border-right:solid 4px transparent;border-left:solid 4px red;border-top:solid 4px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}\n"] }]
|
|
551
|
-
}], ctorParameters: () => [{ type: i1.TruDataContext }, { type: i2.
|
|
548
|
+
}], ctorParameters: () => [{ type: i1.TruDataContext }, { type: i2.TruSearchResultViewManager }, { type: i3.TruAppEnvironment }, { type: i4.TruSearchViewEventHandler }, { type: i5.TruUiNotification }, { type: i6.TruConnectionHub }, { type: i7.TruUtil }, { type: i0.ApplicationRef }, { type: i8.TruTabGroupEventNotifier, decorators: [{
|
|
552
549
|
type: Optional
|
|
553
550
|
}] }], propDecorators: { config: [{
|
|
554
551
|
type: Input
|
|
@@ -557,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
557
554
|
}], name: [{
|
|
558
555
|
type: Input
|
|
559
556
|
}] } });
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUF3RCxlQUFlLEVBQWdDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zTCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBYyxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBSWhDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ25ILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBS2xILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZakYsTUFBTSxPQUFPLFdBQVc7SUFrRVo7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ1c7SUExRVosTUFBTSxDQUFzQjtJQUM1QixNQUFNLENBQU87SUFDYixJQUFJLENBQU87SUFFcEIsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7SUFFcEMsS0FB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QyxDQUFDO3VHQWprQlUsV0FBVzsyRkFBWCxXQUFXLGlNQ2pDeEIsK3pHQW9EQTs7MkZEbkJhLFdBQVc7a0JBUHZCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUMsdUJBQXVCLEVBQUUsTUFBTSxFQUFDOzswQkE2RXBDLFFBQVE7eUNBMUVGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgY3JlYXRlQ29tcG9uZW50LCBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50UmVmLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcnVBcHBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1hcHAtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy9zZWFyY2gvc2VydmljZXMvdHJ1LXNlYXJjaC12aWV3LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBJVHJ1RGF0YUdyaWRDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWRhdGEtZ3JpZC1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZFR5cGVzIH0gZnJvbSAnLi9lbnVtcy90cnUtZGF0YS1ncmlkLXR5cGVzJztcclxuaW1wb3J0IHsgSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL3Rvb2xiYXIvY2xhc3Nlcy90cnUtdG9vbGJhci1kcm9wZG93bi1vcHRpb24nO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBza2lwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoUmVzdWx0Vmlld01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtc2VhcmNoLXJlc3VsdC12aWV3LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVDb25uZWN0aW9uSHViIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWNvbm5lY3Rpb24taHViJztcclxuaW1wb3J0IHsgQ29sRGVmLCBDb2x1bW4sIEdyaWRBcGksIEdyaWRSZWFkeUV2ZW50LCBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMsIFJvd0V2ZW50IH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZExvYWRpbmdPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy90cnUtZGF0YS1ncmlkLWxvYWRpbmctb3ZlcmxheS90cnUtZGF0YS1ncmlkLWxvYWRpbmctb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkTm9Sb3dzT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvdHJ1LWRhdGEtZ3JpZC1uby1yb3dzLW92ZXJsYXkvdHJ1LWRhdGEtZ3JpZC1uby1yb3dzLW92ZXJsYXknO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ2hhbmdlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90cnUtZGF0YS1jaGFuZ2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdicmVlemUtY2xpZW50JztcclxuaW1wb3J0IHsgVHJ1TWVyZ2VEYXRhU2V0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90cnUtbWVyZ2UtZGF0YS1zZXQnO1xyXG5pbXBvcnQgeyBUcnVMaXN0Q29udHJvbENvbmZpZ0Jhc2UgfSBmcm9tICcuLi8uLi9iYXNlLWNsYXNzZXMvdHJ1LWxpc3QtY29udHJvbC1jb25maWctYmFzZSc7XHJcbmltcG9ydCB7IFRydVZhbGlkYXRpb25EaWFsb2dDb25maWcgfSBmcm9tICcuLi92YWxpZGF0aW9uLWRpYWxvZy90cnUtdmFsaWRhdGlvbi1kaWFsb2ctY29uZmlnJztcclxuaW1wb3J0IHsgVHJ1VmFsaWRhdGlvbkRpYWxvZ0NvbnRleHQgfSBmcm9tICcuLi92YWxpZGF0aW9uLWRpYWxvZy90cnUtdmFsaWRhdGlvbi1kaWFsb2ctY29udGV4dCc7XHJcbmltcG9ydCB7IFRydVZhbGlkYXRpb25EaWFsb2cgfSBmcm9tICcuLi92YWxpZGF0aW9uLWRpYWxvZy90cnUtdmFsaWRhdGlvbi1kaWFsb2cnO1xyXG5pbXBvcnQgeyBUcnVUYWJHcm91cEV2ZW50Tm90aWZpZXIgfSBmcm9tICcuLi9sYXlvdXQvdGFiL3NlcnZpY2VzL3RydS10YWItZ3JvdXAtZXZlbnQtbm90aWZpZXInO1xyXG5pbXBvcnQgeyBUcnVEZXNrdG9wVmlld0V2ZW50Tm90aWZpZXIgfSBmcm9tICcuLi9kZXNrdG9wL3NlcnZpY2VzL3RydS1kZXNrdG9wLXZpZXctZXZlbnQtbm90aWZpZXInO1xyXG5pbXBvcnQgeyBUcnVVdGlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXV0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnUtZGF0YS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWRhdGEtZ3JpZC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cnUtZGF0YS1ncmlkLmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgaG9zdDogeydbY2xhc3MudHJ1LWRhdGEtZ3JpZF0nOiAndHJ1ZSd9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVEYXRhR3JpZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBjb25maWchOiBJVHJ1RGF0YUdyaWRDb25maWc7XHJcbiAgQElucHV0KCkgZW50aXR5ITogYW55O1xyXG4gIEBJbnB1dCgpIG5hbWUhOiBhbnk7XHJcblxyXG4gIFRydURhdGFHcmlkVHlwZXMgPSBUcnVEYXRhR3JpZFR5cGVzO1xyXG5cclxuICBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgY29sdW1uRGVmczogYW55ID0gW107XHJcbiAgcm93RGF0YTogYW55ID0gW107XHJcbiAgdmlld0Nob2ljZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RlZFZpZXdDaG9pY2U6IGFueTtcclxuICB1bmFzc29jaWF0ZWRDaG9pY2VzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2U6IGFueTtcclxuICByZXBvcnRNZW51czogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRSZXBvcnQ6IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIGdyaWRUeXBlOiBUcnVEYXRhR3JpZFR5cGVzID0gVHJ1RGF0YUdyaWRUeXBlcy5TZWFyY2hcclxuICB1bnNhdmVkRW50aXRpZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBsb2FkZWRFbnRpdGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGxhdGVzdFNldHVwUXVlcnk6IGFueTtcclxuICBmaXJzdFNlYXJjaFJhbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdyaWRPcHRpb25zOiBhbnkgPSB7XHJcbiAgICByb3dTZWxlY3Rpb246ICdtdWx0aXBsZScsXHJcbiAgICByb3dTdHlsZTogeyBiYWNrZ3JvdW5kOiAnd2hpdGUnIH0sXHJcbiAgICBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgIGxvYWRpbmdPdmVybGF5Q29tcG9uZW50OiBUcnVEYXRhR3JpZExvYWRpbmdPdmVybGF5LFxyXG4gICAgbG9hZGluZ092ZXJsYXlDb21wb25lbnRQYXJhbXM6IHtcclxuICAgICAgbG9hZGluZ01lc3NhZ2U6ICdTZWFyY2hpbmcgLSBPbmUgbW9tZW50IHBsZWFzZS4uLicsXHJcbiAgICB9LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudDogVHJ1RGF0YUdyaWROb1Jvd3NPdmVybGF5LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICBub1Jvd3NNZXNzYWdlRnVuYzogKCkgPT5cclxuICAgICAge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0U2VhcmNoUmFuKVxyXG4gICAgICAgICAgcmV0dXJuICdTb3JyeSAtIG5vIHJvd3MgZm91bmQhJ1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAnQ2xpY2sgc2VhcmNoIHRvIGRpc3BsYXkgcmVzdWx0cy4nXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25Sb3dEYXRhVXBkYXRlZDogKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZy5yZXBvcnRDb25maWcuYWN0aW9uUmVmcyA9IHRoaXMuZ2V0UmVmcygpO1xyXG4gICAgfSxcclxuICAgIG9uQ2VsbEVkaXRpbmdTdG9wcGVkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgLy90aGlzLmdyaWRPcHRpb25zLmFwaS5yZWRyYXdSb3dzKHsgcm93Tm9kZXM6IHBhcmFtcy5ub2RlIH0pO1xyXG4gICAgICBwYXJhbXMuYXBpLnJlZnJlc2hDZWxscyh7XHJcbiAgICAgICAgZm9yY2U6IHRydWUsXHJcbiAgICAgICAgcm93Tm9kZXM6IFtwYXJhbXMubm9kZV1cclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsVmFsdWVDaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25HcmlkUmVhZHk6IChldmVudDogR3JpZFJlYWR5RXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5hcGkgPSBldmVudC5hcGk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhcmVudFRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGFwaSE6IEdyaWRBcGk7XHJcbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIGRlc2t0b3BWaWV3RXZlbnROb3RpZmllcjogVHJ1RGVza3RvcFZpZXdFdmVudE5vdGlmaWVyLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hSZXN1bHRWaWV3TWFuYWdlcjogVHJ1U2VhcmNoUmVzdWx0Vmlld01hbmFnZXIsXHJcbiAgICBwcml2YXRlIGFwcEVudmlyb25tZW50OiBUcnVBcHBFbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgc2VhcmNoVmlld0V2ZW50SGFuZGxlcjogVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlcixcclxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBjb25uZWN0aW9uSHViOiBUcnVDb25uZWN0aW9uSHViLFxyXG4gICAgcHJpdmF0ZSB1dGlsOiBUcnVVdGlsLFxyXG4gICAgcHJpdmF0ZSBhcHA6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHRhYkdyb3VwRXZlbnROb3RpZmllcjogVHJ1VGFiR3JvdXBFdmVudE5vdGlmaWVyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuaGFuY2VSb3dEYXRhRm9yRW50aXR5ID0gKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICBsZXQgcm93RGF0YSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5yb3dEYXRhRW5oYW5jZXIoZW50aXR5KTtcclxuICAgIHJvd0RhdGEuJGVudGl0eSA9IGVudGl0eTtcclxuICAgIHJldHVybiByb3dEYXRhO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9Sb3dzVGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAvL3RoaXMubm9Sb3dzVGVtcGxhdGUgPSBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTRweDtmb250LXdlaWdodDpib2xkO1wiPk5vIGRhdGEgZm91bmQuPC9zcGFuPmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vblNhdmVDb21wbGV0ZSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py5zdWNjZXNzZnVsKVxyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uUmV2ZXJ0Q29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bCkge1xyXG4gICAgICAgIGxldCByb3dzVG9SZW1vdmU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yb3dEYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yb3dEYXRhW2ldLiRlbnRpdHlbdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSArICdSZWYnXSA8IDApXHJcbiAgICAgICAgICAgIHJvd3NUb1JlbW92ZS5wdXNoKHRoaXMucm93RGF0YVtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpPy5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiByb3dzVG9SZW1vdmUgfSk7XHJcbiAgICAgICAgdGhpcy5hcGk/LnJlZHJhd1Jvd3MoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuYXBwRW52aXJvbm1lbnQub25EZWxldGVDb21wbGV0ZSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py5zdWNjZXNzZnVsICYmIGV2ZW50LmVudGl0aWVzICYmIGV2ZW50LmVudGl0aWVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCByb3dzVG9SZW1vdmU6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yb3dEYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gZXZlbnQuZW50aXRpZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm93RGF0YVtpXS4kZW50aXR5ID09PSBldmVudC5lbnRpdGllc1tqXSlcclxuICAgICAgICAgICAgICByb3dzVG9SZW1vdmUucHVzaCh0aGlzLnJvd0RhdGFbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaT8uYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogcm93c1RvUmVtb3ZlIH0pO1xyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuc2VhcmNoVmlld0V2ZW50SGFuZGxlci5vblNlYXJjaCgpLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKChzZXR1cFF1ZXJ5OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vblNlYXJjaChzZXR1cFF1ZXJ5KTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGVza3RvcFZpZXdFdmVudE5vdGlmaWVyLm9uQWN0aXZlU3RhdGVDaGFuZ2VkKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcclxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXBvcnRDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgICAgdGhpcy5jb25maWcucmVwb3J0Q29uZmlnLmFjdGlvblJlZnMgPSB0aGlzLmdldFJlZnMoKTtcclxuICAgICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgaWYgKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyLm9uQWN0aXZlU3RhdGVDaGFuZ2VkKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5jb25uZWN0aW9uSHViLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5kYXRhQ29udGV4dCxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUsXHJcbiAgICAgIHRoaXMuYWRkRW50aXR5LFxyXG4gICAgICB0aGlzLmdldFJvd0RhdGEsXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSB9LFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcyxcclxuICAgICAgW10sXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRydWU7IH0pLnN1YnNjcmliZSgoZGF0YUNoYW5nZTogVHJ1RGF0YUNoYW5nZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzLnB1c2goZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZGVza3RvcFZpZXdFdmVudE5vdGlmaWVyLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgbGV0IGtleVNlcXVlbmNlID0gdGhpcy51dGlsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2knIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStpJykgeyBcclxuICAgICAgICAgIHRoaXMub25BZGQoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrZCcgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2QnKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZSgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtrJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGEraycpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uS2VlcCgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtyJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGErcicpIHtcclxuICAgICAgICAgIHRoaXMub25SZW1vdmUoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0YXJnZXRJc0NvbnRyb2wgPSB0aGlzLnV0aWwudGFyZ2V0SXNDb250cm9sKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRJc0NvbnRyb2wgJiYgZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlZnMgPSAoKTogc3RyaW5nID0+IHtcclxuICAgIGxldCByb3dOb2RlczogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaT8uZm9yRWFjaE5vZGUoKHJvd05vZGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByb3dOb2Rlcy5wdXNoKHJvd05vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcmVmcyA9IF8ubWFwKHJvd05vZGVzLCAocm93Tm9kZSkgPT4geyByZXR1cm4gcm93Tm9kZS5kYXRhLiRlbnRpdHlbdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICByZXR1cm4gcmVmcy5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0RhdGEgPSAoKSA9PiB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaS5mb3JFYWNoTm9kZSgocm93Tm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGRhdGEucHVzaChyb3dOb2RlLmRhdGEuJGVudGl0eSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH0gXHJcblxyXG4gIHByaXZhdGUgbG9hZEdyaWREYXRhID0gKGVudGl0aWVzOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICB0aGlzLnJvd0RhdGEgPSBlbnRpdGllcy5tYXAodGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eSwgZW50aXRpZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTWFueVRvTWFueUdyaWREYXRhID0gKGFzc29jaWF0ZWRFbnRpdGllczogQXJyYXk8YW55PiwgYXNzb2NpYXRhYmxlRW50aXRpZXM6IEFycmF5PGFueT4sIGluaXRhbExvYWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIGlmIChpbml0YWxMb2FkKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSBhc3NvY2lhdGVkRW50aXRpZXMubWFwKHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHksIGFzc29jaWF0ZWRFbnRpdGllcyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGFzc29jaWF0ZWRFbnRpdGllcyA9IHRoaXMucm93RGF0YS5tYXAoKGU6IGFueSkgPT4geyByZXR1cm4gZS4kZW50aXR5IH0pO1xyXG4gICAgbGV0IGFzc29jaWF0YWJsZVR5cGVOYW1lID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLm5hbWVcclxuICAgIGxldCBhc3NvY2lhdGFibGVUeXBlTmFtZVdpdGhQcmVmaXggPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGVOYW1lV2l0aFByZWZpeFxyXG4gICAgbGV0IGFzc29jaWF0ZWRNYXBPZkFzc29jaWF0YWJsZSA9IF8ubWFwKGFzc29jaWF0ZWRFbnRpdGllcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbJ28nICsgYXNzb2NpYXRhYmxlVHlwZU5hbWVXaXRoUHJlZml4XTsgfSk7XHJcbiAgICB0aGlzLnVuYXNzb2NpYXRlZENob2ljZXMgPSBhc3NvY2lhdGFibGVFbnRpdGllcy5maWx0ZXIob2JqZWN0MSA9PiB7XHJcbiAgICAgIHJldHVybiAhYXNzb2NpYXRlZE1hcE9mQXNzb2NpYXRhYmxlLnNvbWUob2JqZWN0MiA9PiB7IHJldHVybiBvYmplY3QxLnZhbHVlLiQgPT09IG9iamVjdDJbYXNzb2NpYXRhYmxlVHlwZU5hbWUgKyAnUmVmJ107IH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydERhdGEgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnVpTm90aWZpY2F0aW9uLnNob3dFeHBvcnREaWFsb2coKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybjtcclxuICAgICAgbGV0IGV4cG9ydEdyaWRTcGVjO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpXHJcbiAgICAgICAgZXhwb3J0R3JpZFNwZWMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubmFtZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGV4cG9ydEdyaWRTcGVjID0gJyRjdXN0b209JyArIDE7XHJcblxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0XHJcbiAgICAgICAgLmVudGl0eUFjY2VzcygpXHJcbiAgICAgICAgLmV4cG9ydCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSwgZXhwb3J0R3JpZFNwZWMsIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSwgdGhpcy5nZXRSZWZzKCksIHJlc3VsdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TdXBwcmVzc0tleWJvYXJkRXZlbnQgPSAocGFyYW1zOiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBpc1RhYktleSA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdUYWInO1xyXG4gICAgbGV0IGlzQXJyb3dEb3duID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93RG93bic7XHJcbiAgICBsZXQgaXNBcnJvd1VwID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93VXAnO1xyXG4gICAgbGV0IGlzQXJyb3dMZWZ0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCc7XHJcbiAgICBsZXQgaXNBcnJvd1JpZ2h0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgbGV0IGlzU2hpZnRLZXkgPSBwYXJhbXMuZXZlbnQuc2hpZnRLZXk7XHJcbiAgICBsZXQgaXNBbHRLZXkgPSBwYXJhbXMuZXZlbnQuYWx0S2V5O1xyXG5cclxuICAgIGxldCBmb2N1c2VkQ2VsbCA9IHBhcmFtcy5hcGkuZ2V0Rm9jdXNlZENlbGwoKTtcclxuICAgIGxldCBoYXNDaG9pY2VzID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbHVtbi5nZXRDb2xJZCgpXSAmJiBwYXJhbXMuZGF0YVtwYXJhbXMuY29sdW1uLmdldENvbElkKCldLmNob2ljZXMgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHBhcmFtcy5jb2x1bW4uaXNQaW5uZWQoKSkge1xyXG4gICAgICBpZiAoaXNUYWJLZXkgJiYgIWlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb05leHRDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzVGFiS2V5ICYmIGlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb1ByZXZpb3VzQ2VsbCgpO1xyXG4gICAgICBlbHNlIGlmIChpc0Fycm93TGVmdClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyb3dSaWdodClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvTmV4dENlbGwoKTtcclxuICAgICAgdGhpcy5hcGkuc3RvcEVkaXRpbmcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNDaG9pY2VzICYmIGlzQWx0S2V5ICYmIChpc0Fycm93RG93biB8fCBpc0Fycm93VXApKSB7XHJcbiAgICAgIHBhcmFtcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcGFyYW1zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcclxuICAgICAgICByb3dJbmRleDogZm9jdXNlZENlbGw/LnJvd0luZGV4IGFzIG51bWJlcixcclxuICAgICAgICBjb2xLZXk6IGZvY3VzZWRDZWxsPy5jb2x1bW4gYXMgQ29sdW1uLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBhZGRFbnRpdHkgPSAobmV3RW50aXR5OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgcGFyZW50TmFtZSA9IHRoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgIG5ld0VudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddID0gdGhpcy5lbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpIHtcclxuICAgICAgbGV0IHBhcmVudE5hbWUgPSB0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICBsZXQgdW5hc3NvY2lhdGVkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZTtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMuc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2UudmFsdWUuJDtcclxuICAgICAgbGV0IGNoaWxkVG9Bc3NvY2lhdGUgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KHVuYXNzb2NpYXRlZFR5cGUsIHJlZiwgdHJ1ZSlcclxuICAgICAgaWYgKGNoaWxkVG9Bc3NvY2lhdGUpIHtcclxuICAgICAgICBsZXQgZW5oYW5jZWRFbnRpdHkgPSB0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5KG5ld0VudGl0eSk7XHJcbiAgICAgICAgZW5oYW5jZWRFbnRpdHkuJGVudGl0eVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPSBjaGlsZFRvQXNzb2NpYXRlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXTtcclxuICAgICAgICBlbmhhbmNlZEVudGl0eS4kZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ10gPSB0aGlzLmVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIC8vIHJlbW92ZSBpdGVtIGZyb20gdGhlIGFkZCBkcm9wZG93biBjb250cm9sXHJcbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5maW5kSW5kZXgoKGNob2ljZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNob2ljZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPT09IGNoaWxkVG9Bc3NvY2lhdGVbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgICAgICAvLyBjbGVhciBhZGQgc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAvLyBhZGQgcm93IHRvIGdyaWRcclxuICAgICAgICB0aGlzLnVuc2F2ZWRFbnRpdGllcy5wdXNoKGVuaGFuY2VkRW50aXR5KTtcclxuICAgICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBbZW5oYW5jZWRFbnRpdHldLCBhZGRJbmRleDogMCB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGVuaGFuY2VkRW50aXR5ID0gdGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eShuZXdFbnRpdHkpO1xyXG4gICAgICB0aGlzLnJvd0RhdGEudW5zaGlmdChlbmhhbmNlZEVudGl0eSk7XHJcbiAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtlbmhhbmNlZEVudGl0eV0sIGFkZEluZGV4OiAwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNZXJnZURhdGEgPSAoY29uZmlnOiBUcnVMaXN0Q29udHJvbENvbmZpZ0Jhc2U8YW55PiwgZW50aXR5VG9WYWxpZGF0ZTogYW55KTogVHJ1TWVyZ2VEYXRhU2V0IHwgbnVsbCA9PiB7XHJcbiAgICBpZiAoY29uZmlnLnByb3BlcnR5UGF0aD8uaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICBsZXQgcHJvcGVydHlOYW1lUGFydHMgPSBjb25maWcucHJvcGVydHlQYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgIHByb3BlcnR5TmFtZVBhcnRzLnBvcCgpO1xyXG4gICAgICBsZXQgdGFyZ2V0UHJvcGVydHk6IGFueTtcclxuICAgICAgcHJvcGVydHlOYW1lUGFydHMuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGFyZ2V0UHJvcGVydHkpIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSBlbnRpdHlUb1ZhbGlkYXRlW3RhcmdldFByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eVt0YXJnZXRQcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5NZXJnZV9EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFByb3BlcnR5Lk1lcmdlX0RhdGFfU2V0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGVudGl0eVRvVmFsaWRhdGUuTWVyZ2VfRGF0YV9TZXQ/LmdldChjb25maWcucHJvcGVydHlOYW1lIGFzIHN0cmluZykgPyBlbnRpdHlUb1ZhbGlkYXRlLk1lcmdlX0RhdGFfU2V0IDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRGlhbG9nOiBDb21wb25lbnRSZWY8VHJ1VmFsaWRhdGlvbkRpYWxvZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGFkZFZhbGlkYXRpb25EaWFsb2cgPSAoY29uZmlnOiBUcnVWYWxpZGF0aW9uRGlhbG9nQ29uZmlnLCBob3N0RWxlbWVudDogYW55KSA9PiB7XHJcbiAgICBsZXQgdGFyZ2V0ID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpYWxvZy10YXJnZXQnKVswXTtcclxuICAgIGxldCBkaWFsb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaWFsb2dFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQnKTtcclxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChkaWFsb2dFbGVtZW50KTtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQ8VHJ1VmFsaWRhdGlvbkRpYWxvZz4oVHJ1VmFsaWRhdGlvbkRpYWxvZywge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcC5pbmplY3RvcixcclxuICAgICAgaG9zdEVsZW1lbnQ6IGRpYWxvZ0VsZW1lbnQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gY29uZmlnO1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZyA9IGNvbXBvbmVudFJlZjtcclxuICAgIHRoaXMuYXBwLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXRGb3JHcmlkQXBpID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFwaSkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMud2FpdEZvckdyaWRBcGkoKCkgPT4ge1xyXG4gICAgICBsZXQgY29udGFpbmVySXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIgIT09IG51bGwpXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUgPSB0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5pc0FjdGl2ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICgoXHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWwgfHxcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgfHxcclxuICAgICAgICB0aGlzLmNvbmZpZy5ub1F1ZXJ5KSAmJlxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vUXVlcnkpXHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoKG51bGwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb3BlcnR5UGF0aFBhcnRzID0gKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgbGFzdEluZGV4ID0gcHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGguc2xpY2UoMCwgbGFzdEluZGV4KTtcclxuICAgIHJldHVybiBwcm9wZXJ0eVBhdGguc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5vblN1cHByZXNzS2V5Ym9hcmRFdmVudFxyXG4gIH07XHJcblxyXG4gIGdldFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyKCgpID0+IGNvdW50KyspO1xyXG4gICAgcmV0dXJuICdSb3dzOiAnICsgY291bnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGNvdW50ID0gdGhpcy5hcGk/LmdldFNlbGVjdGVkUm93cygpLmxlbmd0aDtcclxuICAgIHJldHVybiAnU2VsZWN0ZWQ6ICcgKyBjb3VudDtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgdGhpcy5hcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbENsaWNrZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFldmVudC5jb2x1bW4uY29sRGVmLnBpbm5lZCkge1xyXG4gICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsRG91YmxlQ2xpY2tlZCA9IChncmlkQ29uZmlnOiBhbnkpID0+IHtcclxuICAgIGlmIChncmlkQ29uZmlnLmNvbERlZi5jZWxsQ2xhc3MgPT09ICdhZy1way1hbGlnbmVkLWNlbGwnKVxyXG4gICAgICB0aGlzLmNvbmZpZy5yb3dIZWFkZXJEb3VibGVDbGlja2VkKGdyaWRDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsS2V5RG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LmV2ZW50KSByZXR1cm47XHJcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQuZXZlbnQgYXMgdW5rbm93bikgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChrZXkuY29kZSA9PT0gJ1NwYWNlJykge1xyXG4gICAgICBrZXkucHJldmVudERlZmF1bHQoKTtcclxuICAgICAga2V5LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmFwaT8uc3RhcnRFZGl0aW5nQ2VsbCh7XHJcbiAgICAgICAgcm93SW5kZXg6IGV2ZW50LnJvd0luZGV4LFxyXG4gICAgICAgIGNvbEtleTogZXZlbnQuY29sdW1uLmdldENvbElkKCksXHJcbiAgICAgICAga2V5OiBrZXkuY29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZU92ZXIoZTogYW55KSB7XHJcbiAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGUuZXZlbnQudGFyZ2V0O1xyXG4gICAgaWYgKCF0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYWctY2VsbCcpKVxyXG4gICAgICB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcuYWctY2VsbCcpO1xyXG4gICAgaWYgKHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnZhbGlkJykpIHtcclxuICAgICAgbGV0IGZpZWxkTmFtZSA9IGUuY29sRGVmLmZpZWxkO1xyXG4gICAgICBsZXQgcHJvcGVydHlDb25maWcgPSBlLmRhdGFbZmllbGROYW1lXTtcclxuXHJcbiAgICAgIGxldCBwcm9wZXJ0eVBhdGhQYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgaWYgKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aC5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgcHJvcGVydHlQYXRoUGFydHMgPSB0aGlzLmdldFByb3BlcnR5UGF0aFBhcnRzKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBlbnRpdHlUb1ZhbGlkYXRlID0gcHJvcGVydHlQYXRoUGFydHMubGVuZ3RoID8gcHJvcGVydHlQYXRoUGFydHMucmVkdWNlKChwOiBhbnksIGM6IGFueSkgPT4gcCAmJiBwW2NdIHx8IG51bGwsIGUuZGF0YS4kZW50aXR5KSA6IGUuZGF0YS4kZW50aXR5O1xyXG4gICAgICBsZXQgdmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5nZXRWYWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcucHJvcGVydHlOYW1lKTtcclxuICAgICAgbGV0IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5wYXJzZUVycm9yTWVzc2FnZXModmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5KTtcclxuXHJcbiAgICAgIGxldCB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnID0gbmV3IFRydVZhbGlkYXRpb25EaWFsb2dDb25maWcoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcsIFRydVZhbGlkYXRpb25EaWFsb2dDb250ZXh0LkdyaWQsIGZhbHNlKTtcclxuICAgICAgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZy5lcnJvck1zZyA9IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5O1xyXG4gICAgICB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLm1lcmdlRGF0YSA9IHRoaXMuZ2V0TWVyZ2VEYXRhKHByb3BlcnR5Q29uZmlnLCBlbnRpdHlUb1ZhbGlkYXRlKTtcclxuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uRGlhbG9nKHZhbGlkYXRpb25EaWFsb2dDb25maWcsIHRhcmdldEVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VPdXQoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRGlhbG9nKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2ggPSAoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmZpcnN0U2VhcmNoUmFuID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcclxuXHJcbiAgICBsZXQgZW50aXR5TG9hZGVkID0gdGhpcy5sb2FkZWRFbnRpdGllcy5zb21lKChyZWYpID0+IHsgcmV0dXJuIHJlZiA9PT0gdGhpcy5lbnRpdHlbdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICBsZXQgam9pbnMgPSBbXTtcclxuICAgIGlmIChlbnRpdHlMb2FkZWQpIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaENhY2hlT25seShcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55ICYmIHRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZClcclxuICAgICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoUXVlcnlDaG9pY2VzKFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLm1hbnlUb01hbnlTZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSwgbnVsbCwgZmFsc2UpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzLCBmYWxzZSkpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSAmJiB0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpXHJcbiAgICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaFF1ZXJ5Q2hvaWNlcyhcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZSxcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5tYW55VG9NYW55U2V0dXBRdWVyeSh0aGlzLmVudGl0eSksIG51bGwsIHRydWUpKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSA9IHNldHVwUXVlcnk7XHJcblxyXG4gICAgZm9ya0pvaW4oam9pbnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICAgICAgdGhpcy5sb2FkTWFueVRvTWFueUdyaWREYXRhKHJlc3VsdHNbMF0sIHJlc3VsdHNbMV0sIHRydWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMubG9hZEdyaWREYXRhKHJlc3VsdHNbMF0pO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRUeXBlICE9PSBUcnVEYXRhR3JpZFR5cGVzLlNlYXJjaClcclxuICAgICAgICAgIHRoaXMubG9hZGVkRW50aXRpZXMucHVzaCh0aGlzLmVudGl0eVt0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lICsgJ1JlZiddKTtcclxuICAgICAgICB0aGlzLmFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvd0RhdGEgPT09IG51bGwgfHwgIXRoaXMucm93RGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCA9IChvcHRpb246IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24gfCBudWxsKSA9PiB7fVxyXG4gIG9uU2VsZWN0ZWRSZXBvcnRDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHt9XHJcblxyXG4gIGNhbkFkZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkFkZCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuYWRkRW50aXR5KHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlKSk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBlbnRpdGllcyA9IHNlbGVjdGVkUm93cy5tYXAoZnVuY3Rpb24gKHJvdzogYW55KSB7IHJldHVybiByb3cuJGVudGl0eTsgfSk7XHJcbiAgICAgIGxldCBjb25maXJtTXNnID0gdGhpcy5hcHBFbnZpcm9ubWVudC5mb3JtYXREZWxldGVDb25maXJtYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnLnRhYmxlTmFtZSwgdGhpcy5jb25maWcudGFibGVQbHVyYWxMYWJlbCwgc2VsZWN0ZWRSb3dzLmxlbmd0aCk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpIHtcclxuICAgICAgICBsZXQgb25TdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuc2V0dXBRdWVyeSh0aGlzLmVudGl0eSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgICAgIHRoaXMuZGF0YUNvbnRleHQuZGVsZXRlKGVudGl0aWVzLCBjb25maXJtTXNnLCBvblN1Y2Nlc3MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiBzZWxlY3RlZFJvd3MgfSk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ29udGV4dC5kZWxldGUoZW50aXRpZXMsIGNvbmZpcm1Nc2cpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLndhcm5pbmcodGhpcy5hcHBFbnZpcm9ubWVudC5tc2dOb1JlY29yZHNTZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktlZXAgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHNlbGVjdGVkUm93cyB9KTtcclxuICAgIHRoaXMuYXBpLnNlbGVjdEFsbCgpO1xyXG4gICAgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMucm93RGF0YSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydERhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUbygpO1xyXG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5sYWJlbDsgXHJcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY29sdW1uRGVmcztcclxuICAgIHRoaXMuZ3JpZFR5cGUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZ3JpZFR5cGU7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvL3NldFRpbWVvdXQgdG8gcHJldmVudDogRVJST1IgRXJyb3I6IE5HMDEwMDogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci4gXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYXJlbnRUb29sYmFyVGVtcGxhdGUgPSB0aGlzLnNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyLnNlYXJjaFZpZXdUb29sYmFyVGVtcGxhdGU7XHJcbiAgICAgIHRoaXMuY29uZmlnLnJlcG9ydENvbmZpZy5tZW51SXRlbXNFbmFibGVkID0gKCkgPT4geyByZXR1cm4gdGhpcy5yb3dEYXRhLmxlbmd0aDsgfTtcclxuICAgICAgdGhpcy5jb25maWcucmVwb3J0Q29uZmlnLmFsbE1lbnVzKCkuc3Vic2NyaWJlKChtZW51OiBhbnkpID0+IHsgdGhpcy5yZXBvcnRNZW51cyA9IG1lbnU7IH0pO1xyXG4gICAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwieyd0cnUtZGF0YS1ncmlkLWxhYmVsLW9mZnNldCc6IGxhYmVsfVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1sYWJlbFwiICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtdG9vbGJhci1jb250YWluZXJcIj5cclxuICAgIDx0cnUtdG9vbGJhcj5cclxuICAgICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cInVuYXNzb2NpYXRlZENob2ljZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE9wdGlvbildPVwic2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblVuYXNzb2NpYXRlZENob2ljZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueVwiPlxyXG4gICAgICA8L3RydS10b29sYmFyLWRyb3Bkb3duPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1hZGQtaWNvbidcIiBbdG9vbHRpcF09XCInQWRkIC0gW0N0cmwgKyBJXSdcIiBbZGlzYWJsZWRdPVwiIWNhbkFkZCgpXCIgKG9uQ2xpY2spPVwib25BZGQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1kZWxldGUtaWNvbidcIiBbdG9vbHRpcF09XCInRGVsZXRlIC0gW0N0cmwgKyBEXSdcIiAoY2xpY2spPVwib25EZWxldGUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1rZWVwLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0tlZXAgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgS10nXCIgKGNsaWNrKT1cIm9uS2VlcCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLXJlbW92ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidSZW1vdmUgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgUl0nXCIgKGNsaWNrKT1cIm9uUmVtb3ZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInBhcmVudFRvb2xiYXJUZW1wbGF0ZVwiPjwvdHJ1LXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWV4cG9ydC1pY29uJ1wiIFt0b29sdGlwXT1cIidFeHBvcnQnXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInJlcG9ydE1lbnVzLmxlbmd0aFwiPjwvdHJ1LXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwicmVwb3J0TWVudXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLW1lbnUgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRNZW51c1wiIFtjb25maWddPVwicmVwb3J0XCI+PC90cnUtdG9vbGJhci1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93QnVmZmVyXT1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseUFmdGVyRWRpdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N1cHByZXNzUm93SG92ZXJIaWdobGlnaHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzdG9wRWRpdGluZ1doZW5DZWxsc0xvc2VGb2N1c109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2tlZCk9XCJvbkNlbGxDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbERvdWJsZUNsaWNrZWQpPVwib25DZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxLZXlEb3duKT1cIm9uQ2VsbEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChyb3dEYXRhQ2hhbmdlZCk9XCJvblJvd0RhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbE1vdXNlT3Zlcik9XCJvbkNlbGxNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdXQpPVwib25DZWxsTW91c2VPdXQoJGV2ZW50KVwiPlxyXG4gICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy1jb250YWluZXJcIj5cclxuICAgICAgPHAgY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLXN0YXR1c2Jhci12YWx1ZXMtdGV4dFwiPnt7Z2V0Um93Q291bnQoKX19PC9wPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRTZWxlY3RlZFJvd0NvdW50KCl9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
557
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUF3RCxlQUFlLEVBQWdDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zTCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBYyxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBSWhDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ25ILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBS2xILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVlqRixNQUFNLE9BQU8sV0FBVztJQWtFWjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ1c7SUF6RVosTUFBTSxDQUFzQjtJQUM1QixNQUFNLENBQU87SUFDYixJQUFJLENBQU87SUFFcEIsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7SUFFcEMsS0FBSyxHQUFX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QiwrekdBb0RBOzsyRkRuQmEsV0FBVztrQkFQdkIsU0FBUzsrQkFDRSxlQUFlLGlCQUdWLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBQyx1QkFBdUIsRUFBRSxNQUFNLEVBQUM7OzBCQTRFcEMsUUFBUTt5Q0F6RUYsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBjcmVhdGVDb21wb25lbnQsIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRSZWYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydUFwcEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWFwcC1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IFRydVNlYXJjaFZpZXdFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9iYXNlLXZpZXdzL3NlYXJjaC9zZXJ2aWNlcy90cnUtc2VhcmNoLXZpZXctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XHJcbmltcG9ydCB7IFRydVVpTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXVpLW5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IElUcnVEYXRhR3JpZENvbmZpZyB9IGZyb20gJy4vY2xhc3Nlcy90cnUtZGF0YS1ncmlkLWNvbmZpZyc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkVHlwZXMgfSBmcm9tICcuL2VudW1zL3RydS1kYXRhLWdyaWQtdHlwZXMnO1xyXG5pbXBvcnQgeyBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vdG9vbGJhci9jbGFzc2VzL3RydS10b29sYmFyLWRyb3Bkb3duLW9wdGlvbic7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIHNraXAsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hSZXN1bHRWaWV3TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1zZWFyY2gtcmVzdWx0LXZpZXctbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydUNvbm5lY3Rpb25IdWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtY29ubmVjdGlvbi1odWInO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbiwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQsIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcywgUm93RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkTG9hZGluZ092ZXJsYXkgfSBmcm9tICcuL292ZXJsYXlzL3RydS1kYXRhLWdyaWQtbG9hZGluZy1vdmVybGF5L3RydS1kYXRhLWdyaWQtbG9hZGluZy1vdmVybGF5JztcclxuaW1wb3J0IHsgVHJ1RGF0YUdyaWROb1Jvd3NPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy90cnUtZGF0YS1ncmlkLW5vLXJvd3Mtb3ZlcmxheS90cnUtZGF0YS1ncmlkLW5vLXJvd3Mtb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRydURhdGFDaGFuZ2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1kYXRhLWNoYW5nZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBUcnVNZXJnZURhdGFTZXQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1tZXJnZS1kYXRhLXNldCc7XHJcbmltcG9ydCB7IFRydUxpc3RDb250cm9sQ29uZmlnQmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtbGlzdC1jb250cm9sLWNvbmZpZy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1VmFsaWRhdGlvbkRpYWxvZ0NvbmZpZyB9IGZyb20gJy4uL3ZhbGlkYXRpb24tZGlhbG9nL3RydS12YWxpZGF0aW9uLWRpYWxvZy1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVWYWxpZGF0aW9uRGlhbG9nQ29udGV4dCB9IGZyb20gJy4uL3ZhbGlkYXRpb24tZGlhbG9nL3RydS12YWxpZGF0aW9uLWRpYWxvZy1jb250ZXh0JztcclxuaW1wb3J0IHsgVHJ1VmFsaWRhdGlvbkRpYWxvZyB9IGZyb20gJy4uL3ZhbGlkYXRpb24tZGlhbG9nL3RydS12YWxpZGF0aW9uLWRpYWxvZyc7XHJcbmltcG9ydCB7IFRydVRhYkdyb3VwRXZlbnROb3RpZmllciB9IGZyb20gJy4uL2xheW91dC90YWIvc2VydmljZXMvdHJ1LXRhYi1ncm91cC1ldmVudC1ub3RpZmllcic7XHJcbmltcG9ydCB7IFRydURlc2t0b3BWaWV3RXZlbnROb3RpZmllciB9IGZyb20gJy4uL2Rlc2t0b3Avc2VydmljZXMvdHJ1LWRlc2t0b3Atdmlldy1ldmVudC1ub3RpZmllcic7XHJcbmltcG9ydCB7IFRydVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGF0YS1ncmlkLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1kYXRhLWdyaWQuY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBob3N0OiB7J1tjbGFzcy50cnUtZGF0YS1ncmlkXSc6ICd0cnVlJ31cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURhdGFHcmlkIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IElUcnVEYXRhR3JpZENvbmZpZztcclxuICBASW5wdXQoKSBlbnRpdHkhOiBhbnk7XHJcbiAgQElucHV0KCkgbmFtZSE6IGFueTtcclxuXHJcbiAgVHJ1RGF0YUdyaWRUeXBlcyA9IFRydURhdGFHcmlkVHlwZXM7XHJcblxyXG4gIGxhYmVsOiBzdHJpbmcgPSAnJztcclxuICBjb2x1bW5EZWZzOiBhbnkgPSBbXTtcclxuICByb3dEYXRhOiBhbnkgPSBbXTtcclxuICB2aWV3Q2hvaWNlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNlbGVjdGVkVmlld0Nob2ljZTogYW55O1xyXG4gIHVuYXNzb2NpYXRlZENob2ljZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZTogYW55O1xyXG4gIHJlcG9ydE1lbnVzOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFJlcG9ydDogYW55IHwgbnVsbCA9IG51bGw7XHJcbiAgZ3JpZFR5cGU6IFRydURhdGFHcmlkVHlwZXMgPSBUcnVEYXRhR3JpZFR5cGVzLlNlYXJjaFxyXG4gIHVuc2F2ZWRFbnRpdGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGxvYWRlZEVudGl0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgbGF0ZXN0U2V0dXBRdWVyeTogYW55O1xyXG4gIGZpcnN0U2VhcmNoUmFuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ3JpZE9wdGlvbnM6IGFueSA9IHtcclxuICAgIHJvd1NlbGVjdGlvbjogJ211bHRpcGxlJyxcclxuICAgIHJvd1N0eWxlOiB7IGJhY2tncm91bmQ6ICd3aGl0ZScgfSxcclxuICAgIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgbG9hZGluZ092ZXJsYXlDb21wb25lbnQ6IFRydURhdGFHcmlkTG9hZGluZ092ZXJsYXksXHJcbiAgICBsb2FkaW5nT3ZlcmxheUNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICBsb2FkaW5nTWVzc2FnZTogJ1NlYXJjaGluZyAtIE9uZSBtb21lbnQgcGxlYXNlLi4uJyxcclxuICAgIH0sXHJcbiAgICBub1Jvd3NPdmVybGF5Q29tcG9uZW50OiBUcnVEYXRhR3JpZE5vUm93c092ZXJsYXksXHJcbiAgICBub1Jvd3NPdmVybGF5Q29tcG9uZW50UGFyYW1zOiB7XHJcbiAgICAgIG5vUm93c01lc3NhZ2VGdW5jOiAoKSA9PlxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RTZWFyY2hSYW4pXHJcbiAgICAgICAgICByZXR1cm4gJ1NvcnJ5IC0gbm8gcm93cyBmb3VuZCEnXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuICdDbGljayBzZWFyY2ggdG8gZGlzcGxheSByZXN1bHRzLidcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG5cclxuICAgIH0sXHJcbiAgICBvblJvd0RhdGFVcGRhdGVkOiAoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnJlcG9ydENvbmZpZy5hY3Rpb25SZWZzID0gdGhpcy5nZXRSZWZzKCk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAvL3RoaXMuZ3JpZE9wdGlvbnMuYXBpLnJlZHJhd1Jvd3MoeyByb3dOb2RlczogcGFyYW1zLm5vZGUgfSk7XHJcbiAgICAgIHBhcmFtcy5hcGkucmVmcmVzaENlbGxzKHtcclxuICAgICAgICBmb3JjZTogdHJ1ZSxcclxuICAgICAgICByb3dOb2RlczogW3BhcmFtcy5ub2RlXVxyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBvbkNlbGxWYWx1ZUNoYW5nZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG5cclxuICAgIH0sXHJcbiAgICBvbkdyaWRSZWFkeTogKGV2ZW50OiBHcmlkUmVhZHlFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmFwaSA9IGV2ZW50LmFwaTtcclxuICAgIH1cclxuICB9XHJcbiAgcGFyZW50VG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgYXBpITogR3JpZEFwaTtcclxuICBwcml2YXRlIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuICBwcml2YXRlIGlzQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRhdGFDb250ZXh0OiBUcnVEYXRhQ29udGV4dCxcclxuICAgIHByaXZhdGUgc2VhcmNoUmVzdWx0Vmlld01hbmFnZXI6IFRydVNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBhcHBFbnZpcm9ubWVudDogVHJ1QXBwRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHNlYXJjaFZpZXdFdmVudEhhbmRsZXI6IFRydVNlYXJjaFZpZXdFdmVudEhhbmRsZXIsXHJcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcclxuICAgIHByaXZhdGUgY29ubmVjdGlvbkh1YjogVHJ1Q29ubmVjdGlvbkh1YixcclxuICAgIHByaXZhdGUgdXRpbDogVHJ1VXRpbCxcclxuICAgIHByaXZhdGUgYXBwOiBBcHBsaWNhdGlvblJlZixcclxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyB0YWJHcm91cEV2ZW50Tm90aWZpZXI6IFRydVRhYkdyb3VwRXZlbnROb3RpZmllcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbmhhbmNlUm93RGF0YUZvckVudGl0eSA9IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgbGV0IHJvd0RhdGEgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcucm93RGF0YUVuaGFuY2VyKGVudGl0eSk7XHJcbiAgICByb3dEYXRhLiRlbnRpdHkgPSBlbnRpdHk7XHJcbiAgICByZXR1cm4gcm93RGF0YTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldE5vUm93c1RlbXBsYXRlID0gKCkgPT4ge1xyXG4gICAgLy90aGlzLm5vUm93c1RlbXBsYXRlID0gYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtcIj5ObyBkYXRhIGZvdW5kLjwvc3Bhbj5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUbyA9ICgpID0+IHtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuYXBwRW52aXJvbm1lbnQub25TYXZlQ29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bClcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vblJldmVydENvbXBsZXRlJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQ/LnN1Y2Nlc3NmdWwpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm93RGF0YVtpXS4kZW50aXR5W3RoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUgKyAnUmVmJ10gPCAwKVxyXG4gICAgICAgICAgICByb3dzVG9SZW1vdmUucHVzaCh0aGlzLnJvd0RhdGFbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaT8uYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogcm93c1RvUmVtb3ZlIH0pO1xyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uRGVsZXRlQ29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bCAmJiBldmVudC5lbnRpdGllcyAmJiBldmVudC5lbnRpdGllcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IGV2ZW50LmVudGl0aWVzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0RhdGFbaV0uJGVudGl0eSA9PT0gZXZlbnQuZW50aXRpZXNbal0pXHJcbiAgICAgICAgICAgICAgcm93c1RvUmVtb3ZlLnB1c2godGhpcy5yb3dEYXRhW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGk/LmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHJvd3NUb1JlbW92ZSB9KTtcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmNvbmZpZy52aWV3Lm9uQWN0aXZlKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcclxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXBvcnRDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgICAgdGhpcy5jb25maWcucmVwb3J0Q29uZmlnLmFjdGlvblJlZnMgPSB0aGlzLmdldFJlZnMoKTtcclxuICAgICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgaWYgKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyLm9uQWN0aXZlU3RhdGVDaGFuZ2VkKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5jb25uZWN0aW9uSHViLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5kYXRhQ29udGV4dCxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUsXHJcbiAgICAgIHRoaXMuYWRkRW50aXR5LFxyXG4gICAgICB0aGlzLmdldFJvd0RhdGEsXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSB9LFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcyxcclxuICAgICAgW10sXHJcbiAgICAgICgpID0+IHsgcmV0dXJuIHRydWU7IH0pLnN1YnNjcmliZSgoZGF0YUNoYW5nZTogVHJ1RGF0YUNoYW5nZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zdWJzLnB1c2goZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnZpZXcuYWN0aXZlKSB7XHJcbiAgICAgICAgbGV0IGtleVNlcXVlbmNlID0gdGhpcy51dGlsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2knIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStpJykgeyBcclxuICAgICAgICAgIHRoaXMub25BZGQoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrZCcgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2QnKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbkRlbGV0ZSgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtrJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGEraycpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uS2VlcCgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtyJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGErcicpIHtcclxuICAgICAgICAgIHRoaXMub25SZW1vdmUoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0YXJnZXRJc0NvbnRyb2wgPSB0aGlzLnV0aWwudGFyZ2V0SXNDb250cm9sKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRJc0NvbnRyb2wgJiYgZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlZnMgPSAoKTogc3RyaW5nID0+IHtcclxuICAgIGxldCByb3dOb2RlczogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaT8uZm9yRWFjaE5vZGUoKHJvd05vZGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByb3dOb2Rlcy5wdXNoKHJvd05vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgcmVmcyA9IF8ubWFwKHJvd05vZGVzLCAocm93Tm9kZSkgPT4geyByZXR1cm4gcm93Tm9kZS5kYXRhLiRlbnRpdHlbdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICByZXR1cm4gcmVmcy5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvd0RhdGEgPSAoKSA9PiB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICB0aGlzLmFwaS5mb3JFYWNoTm9kZSgocm93Tm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGRhdGEucHVzaChyb3dOb2RlLmRhdGEuJGVudGl0eSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH0gXHJcblxyXG4gIHByaXZhdGUgbG9hZEdyaWREYXRhID0gKGVudGl0aWVzOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICB0aGlzLnJvd0RhdGEgPSBlbnRpdGllcy5tYXAodGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eSwgZW50aXRpZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTWFueVRvTWFueUdyaWREYXRhID0gKGFzc29jaWF0ZWRFbnRpdGllczogQXJyYXk8YW55PiwgYXNzb2NpYXRhYmxlRW50aXRpZXM6IEFycmF5PGFueT4sIGluaXRhbExvYWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIGlmIChpbml0YWxMb2FkKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSBhc3NvY2lhdGVkRW50aXRpZXMubWFwKHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHksIGFzc29jaWF0ZWRFbnRpdGllcyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGFzc29jaWF0ZWRFbnRpdGllcyA9IHRoaXMucm93RGF0YS5tYXAoKGU6IGFueSkgPT4geyByZXR1cm4gZS4kZW50aXR5IH0pO1xyXG4gICAgbGV0IGFzc29jaWF0YWJsZVR5cGVOYW1lID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLm5hbWVcclxuICAgIGxldCBhc3NvY2lhdGFibGVUeXBlTmFtZVdpdGhQcmVmaXggPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGVOYW1lV2l0aFByZWZpeFxyXG4gICAgbGV0IGFzc29jaWF0ZWRNYXBPZkFzc29jaWF0YWJsZSA9IF8ubWFwKGFzc29jaWF0ZWRFbnRpdGllcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbJ28nICsgYXNzb2NpYXRhYmxlVHlwZU5hbWVXaXRoUHJlZml4XTsgfSk7XHJcbiAgICB0aGlzLnVuYXNzb2NpYXRlZENob2ljZXMgPSBhc3NvY2lhdGFibGVFbnRpdGllcy5maWx0ZXIob2JqZWN0MSA9PiB7XHJcbiAgICAgIHJldHVybiAhYXNzb2NpYXRlZE1hcE9mQXNzb2NpYXRhYmxlLnNvbWUob2JqZWN0MiA9PiB7IHJldHVybiBvYmplY3QxLnZhbHVlLiQgPT09IG9iamVjdDJbYXNzb2NpYXRhYmxlVHlwZU5hbWUgKyAnUmVmJ107IH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydERhdGEgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnVpTm90aWZpY2F0aW9uLnNob3dFeHBvcnREaWFsb2coKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybjtcclxuICAgICAgbGV0IGV4cG9ydEdyaWRTcGVjO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpXHJcbiAgICAgICAgZXhwb3J0R3JpZFNwZWMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubmFtZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGV4cG9ydEdyaWRTcGVjID0gJyRjdXN0b209JyArIDE7XHJcblxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0XHJcbiAgICAgICAgLmVudGl0eUFjY2VzcygpXHJcbiAgICAgICAgLmV4cG9ydCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSwgZXhwb3J0R3JpZFNwZWMsIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSwgdGhpcy5nZXRSZWZzKCksIHJlc3VsdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TdXBwcmVzc0tleWJvYXJkRXZlbnQgPSAocGFyYW1zOiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBpc1RhYktleSA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdUYWInO1xyXG4gICAgbGV0IGlzQXJyb3dEb3duID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93RG93bic7XHJcbiAgICBsZXQgaXNBcnJvd1VwID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93VXAnO1xyXG4gICAgbGV0IGlzQXJyb3dMZWZ0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCc7XHJcbiAgICBsZXQgaXNBcnJvd1JpZ2h0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgbGV0IGlzU2hpZnRLZXkgPSBwYXJhbXMuZXZlbnQuc2hpZnRLZXk7XHJcbiAgICBsZXQgaXNBbHRLZXkgPSBwYXJhbXMuZXZlbnQuYWx0S2V5O1xyXG5cclxuICAgIGxldCBmb2N1c2VkQ2VsbCA9IHBhcmFtcy5hcGkuZ2V0Rm9jdXNlZENlbGwoKTtcclxuICAgIGxldCBoYXNDaG9pY2VzID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbHVtbi5nZXRDb2xJZCgpXSAmJiBwYXJhbXMuZGF0YVtwYXJhbXMuY29sdW1uLmdldENvbElkKCldLmNob2ljZXMgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHBhcmFtcy5jb2x1bW4uaXNQaW5uZWQoKSkge1xyXG4gICAgICBpZiAoaXNUYWJLZXkgJiYgIWlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb05leHRDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzVGFiS2V5ICYmIGlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb1ByZXZpb3VzQ2VsbCgpO1xyXG4gICAgICBlbHNlIGlmIChpc0Fycm93TGVmdClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyb3dSaWdodClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvTmV4dENlbGwoKTtcclxuICAgICAgdGhpcy5hcGkuc3RvcEVkaXRpbmcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNDaG9pY2VzICYmIGlzQWx0S2V5ICYmIChpc0Fycm93RG93biB8fCBpc0Fycm93VXApKSB7XHJcbiAgICAgIHBhcmFtcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcGFyYW1zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcclxuICAgICAgICByb3dJbmRleDogZm9jdXNlZENlbGw/LnJvd0luZGV4IGFzIG51bWJlcixcclxuICAgICAgICBjb2xLZXk6IGZvY3VzZWRDZWxsPy5jb2x1bW4gYXMgQ29sdW1uLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBhZGRFbnRpdHkgPSAobmV3RW50aXR5OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgcGFyZW50TmFtZSA9IHRoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgIG5ld0VudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddID0gdGhpcy5lbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpIHtcclxuICAgICAgbGV0IHBhcmVudE5hbWUgPSB0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICBsZXQgdW5hc3NvY2lhdGVkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZTtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMuc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2UudmFsdWUuJDtcclxuICAgICAgbGV0IGNoaWxkVG9Bc3NvY2lhdGUgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KHVuYXNzb2NpYXRlZFR5cGUsIHJlZiwgdHJ1ZSlcclxuICAgICAgaWYgKGNoaWxkVG9Bc3NvY2lhdGUpIHtcclxuICAgICAgICBsZXQgZW5oYW5jZWRFbnRpdHkgPSB0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5KG5ld0VudGl0eSk7XHJcbiAgICAgICAgZW5oYW5jZWRFbnRpdHkuJGVudGl0eVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPSBjaGlsZFRvQXNzb2NpYXRlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXTtcclxuICAgICAgICBlbmhhbmNlZEVudGl0eS4kZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ10gPSB0aGlzLmVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIC8vIHJlbW92ZSBpdGVtIGZyb20gdGhlIGFkZCBkcm9wZG93biBjb250cm9sXHJcbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5maW5kSW5kZXgoKGNob2ljZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNob2ljZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPT09IGNoaWxkVG9Bc3NvY2lhdGVbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgICAgICAvLyBjbGVhciBhZGQgc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAvLyBhZGQgcm93IHRvIGdyaWRcclxuICAgICAgICB0aGlzLnVuc2F2ZWRFbnRpdGllcy5wdXNoKGVuaGFuY2VkRW50aXR5KTtcclxuICAgICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBbZW5oYW5jZWRFbnRpdHldLCBhZGRJbmRleDogMCB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGVuaGFuY2VkRW50aXR5ID0gdGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eShuZXdFbnRpdHkpO1xyXG4gICAgICB0aGlzLnJvd0RhdGEudW5zaGlmdChlbmhhbmNlZEVudGl0eSk7XHJcbiAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtlbmhhbmNlZEVudGl0eV0sIGFkZEluZGV4OiAwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNZXJnZURhdGEgPSAoY29uZmlnOiBUcnVMaXN0Q29udHJvbENvbmZpZ0Jhc2U8YW55PiwgZW50aXR5VG9WYWxpZGF0ZTogYW55KTogVHJ1TWVyZ2VEYXRhU2V0IHwgbnVsbCA9PiB7XHJcbiAgICBpZiAoY29uZmlnLnByb3BlcnR5UGF0aD8uaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICBsZXQgcHJvcGVydHlOYW1lUGFydHMgPSBjb25maWcucHJvcGVydHlQYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgIHByb3BlcnR5TmFtZVBhcnRzLnBvcCgpO1xyXG4gICAgICBsZXQgdGFyZ2V0UHJvcGVydHk6IGFueTtcclxuICAgICAgcHJvcGVydHlOYW1lUGFydHMuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGFyZ2V0UHJvcGVydHkpIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSBlbnRpdHlUb1ZhbGlkYXRlW3RhcmdldFByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eVt0YXJnZXRQcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5NZXJnZV9EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFByb3BlcnR5Lk1lcmdlX0RhdGFfU2V0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGVudGl0eVRvVmFsaWRhdGUuTWVyZ2VfRGF0YV9TZXQ/LmdldChjb25maWcucHJvcGVydHlOYW1lIGFzIHN0cmluZykgPyBlbnRpdHlUb1ZhbGlkYXRlLk1lcmdlX0RhdGFfU2V0IDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRGlhbG9nOiBDb21wb25lbnRSZWY8VHJ1VmFsaWRhdGlvbkRpYWxvZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGFkZFZhbGlkYXRpb25EaWFsb2cgPSAoY29uZmlnOiBUcnVWYWxpZGF0aW9uRGlhbG9nQ29uZmlnLCBob3N0RWxlbWVudDogYW55KSA9PiB7XHJcbiAgICBsZXQgdGFyZ2V0ID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpYWxvZy10YXJnZXQnKVswXTtcclxuICAgIGxldCBkaWFsb2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaWFsb2dFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQnKTtcclxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChkaWFsb2dFbGVtZW50KTtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQ8VHJ1VmFsaWRhdGlvbkRpYWxvZz4oVHJ1VmFsaWRhdGlvbkRpYWxvZywge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcC5pbmplY3RvcixcclxuICAgICAgaG9zdEVsZW1lbnQ6IGRpYWxvZ0VsZW1lbnQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gY29uZmlnO1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZyA9IGNvbXBvbmVudFJlZjtcclxuICAgIHRoaXMuYXBwLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXRGb3JHcmlkQXBpID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFwaSkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMud2FpdEZvckdyaWRBcGkoKCkgPT4ge1xyXG4gICAgICBsZXQgY29udGFpbmVySXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIgIT09IG51bGwpXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUgPSB0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5pc0FjdGl2ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICgoXHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWwgfHxcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgfHxcclxuICAgICAgICB0aGlzLmNvbmZpZy5ub1F1ZXJ5KSAmJlxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vUXVlcnkpXHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoKG51bGwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb3BlcnR5UGF0aFBhcnRzID0gKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgbGFzdEluZGV4ID0gcHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGguc2xpY2UoMCwgbGFzdEluZGV4KTtcclxuICAgIHJldHVybiBwcm9wZXJ0eVBhdGguc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5vblN1cHByZXNzS2V5Ym9hcmRFdmVudFxyXG4gIH07XHJcblxyXG4gIGdldFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyKCgpID0+IGNvdW50KyspO1xyXG4gICAgcmV0dXJuICdSb3dzOiAnICsgY291bnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGNvdW50ID0gdGhpcy5hcGk/LmdldFNlbGVjdGVkUm93cygpLmxlbmd0aDtcclxuICAgIHJldHVybiAnU2VsZWN0ZWQ6ICcgKyBjb3VudDtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgdGhpcy5hcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbENsaWNrZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFldmVudC5jb2x1bW4uY29sRGVmLnBpbm5lZCkge1xyXG4gICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsRG91YmxlQ2xpY2tlZCA9IChncmlkQ29uZmlnOiBhbnkpID0+IHtcclxuICAgIGlmIChncmlkQ29uZmlnLmNvbERlZi5jZWxsQ2xhc3MgPT09ICdhZy1way1hbGlnbmVkLWNlbGwnKVxyXG4gICAgICB0aGlzLmNvbmZpZy5yb3dIZWFkZXJEb3VibGVDbGlja2VkKGdyaWRDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsS2V5RG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LmV2ZW50KSByZXR1cm47XHJcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQuZXZlbnQgYXMgdW5rbm93bikgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChrZXkuY29kZSA9PT0gJ1NwYWNlJykge1xyXG4gICAgICBrZXkucHJldmVudERlZmF1bHQoKTtcclxuICAgICAga2V5LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmFwaT8uc3RhcnRFZGl0aW5nQ2VsbCh7XHJcbiAgICAgICAgcm93SW5kZXg6IGV2ZW50LnJvd0luZGV4LFxyXG4gICAgICAgIGNvbEtleTogZXZlbnQuY29sdW1uLmdldENvbElkKCksXHJcbiAgICAgICAga2V5OiBrZXkuY29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZU92ZXIoZTogYW55KSB7XHJcbiAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGUuZXZlbnQudGFyZ2V0O1xyXG4gICAgaWYgKCF0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYWctY2VsbCcpKVxyXG4gICAgICB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcuYWctY2VsbCcpO1xyXG4gICAgaWYgKHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnZhbGlkJykpIHtcclxuICAgICAgbGV0IGZpZWxkTmFtZSA9IGUuY29sRGVmLmZpZWxkO1xyXG4gICAgICBsZXQgcHJvcGVydHlDb25maWcgPSBlLmRhdGFbZmllbGROYW1lXTtcclxuXHJcbiAgICAgIGxldCBwcm9wZXJ0eVBhdGhQYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgaWYgKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aC5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgcHJvcGVydHlQYXRoUGFydHMgPSB0aGlzLmdldFByb3BlcnR5UGF0aFBhcnRzKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBlbnRpdHlUb1ZhbGlkYXRlID0gcHJvcGVydHlQYXRoUGFydHMubGVuZ3RoID8gcHJvcGVydHlQYXRoUGFydHMucmVkdWNlKChwOiBhbnksIGM6IGFueSkgPT4gcCAmJiBwW2NdIHx8IG51bGwsIGUuZGF0YS4kZW50aXR5KSA6IGUuZGF0YS4kZW50aXR5O1xyXG4gICAgICBsZXQgdmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5nZXRWYWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcucHJvcGVydHlOYW1lKTtcclxuICAgICAgbGV0IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5wYXJzZUVycm9yTWVzc2FnZXModmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5KTtcclxuXHJcbiAgICAgIGxldCB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnID0gbmV3IFRydVZhbGlkYXRpb25EaWFsb2dDb25maWcoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcsIFRydVZhbGlkYXRpb25EaWFsb2dDb250ZXh0LkdyaWQsIGZhbHNlKTtcclxuICAgICAgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZy5lcnJvck1zZyA9IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5O1xyXG4gICAgICB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLm1lcmdlRGF0YSA9IHRoaXMuZ2V0TWVyZ2VEYXRhKHByb3BlcnR5Q29uZmlnLCBlbnRpdHlUb1ZhbGlkYXRlKTtcclxuICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uRGlhbG9nKHZhbGlkYXRpb25EaWFsb2dDb25maWcsIHRhcmdldEVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VPdXQoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRGlhbG9nKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2ggPSAoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmZpcnN0U2VhcmNoUmFuID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcclxuXHJcbiAgICBsZXQgZW50aXR5TG9hZGVkID0gdGhpcy5sb2FkZWRFbnRpdGllcy5zb21lKChyZWYpID0+IHsgcmV0dXJuIHJlZiA9PT0gdGhpcy5lbnRpdHlbdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICBsZXQgam9pbnMgPSBbXTtcclxuICAgIGlmIChlbnRpdHlMb2FkZWQpIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaENhY2hlT25seShcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzKSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55ICYmIHRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZClcclxuICAgICAgICBqb2lucy5wdXNoKHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoUXVlcnlDaG9pY2VzKFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLm1hbnlUb01hbnlTZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSwgbnVsbCwgZmFsc2UpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgICBzZXR1cFF1ZXJ5LFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzLCBmYWxzZSkpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSAmJiB0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpXHJcbiAgICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaFF1ZXJ5Q2hvaWNlcyhcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZSxcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5tYW55VG9NYW55U2V0dXBRdWVyeSh0aGlzLmVudGl0eSksIG51bGwsIHRydWUpKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSA9IHNldHVwUXVlcnk7XHJcblxyXG4gICAgZm9ya0pvaW4oam9pbnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICAgICAgdGhpcy5sb2FkTWFueVRvTWFueUdyaWREYXRhKHJlc3VsdHNbMF0sIHJlc3VsdHNbMV0sIHRydWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMubG9hZEdyaWREYXRhKHJlc3VsdHNbMF0pO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWRUeXBlICE9PSBUcnVEYXRhR3JpZFR5cGVzLlNlYXJjaClcclxuICAgICAgICAgIHRoaXMubG9hZGVkRW50aXRpZXMucHVzaCh0aGlzLmVudGl0eVt0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lICsgJ1JlZiddKTtcclxuICAgICAgICB0aGlzLmFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvd0RhdGEgPT09IG51bGwgfHwgIXRoaXMucm93RGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCA9IChvcHRpb246IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24gfCBudWxsKSA9PiB7fVxyXG4gIG9uU2VsZWN0ZWRSZXBvcnRDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHt9XHJcblxyXG4gIGNhbkFkZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55KVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkFkZCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuYWRkRW50aXR5KHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlKSk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBlbnRpdGllcyA9IHNlbGVjdGVkUm93cy5tYXAoZnVuY3Rpb24gKHJvdzogYW55KSB7IHJldHVybiByb3cuJGVudGl0eTsgfSk7XHJcbiAgICAgIGxldCBjb25maXJtTXNnID0gdGhpcy5hcHBFbnZpcm9ubWVudC5mb3JtYXREZWxldGVDb25maXJtYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnLnRhYmxlTmFtZSwgdGhpcy5jb25maWcudGFibGVQbHVyYWxMYWJlbCwgc2VsZWN0ZWRSb3dzLmxlbmd0aCk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpIHtcclxuICAgICAgICBsZXQgb25TdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuc2V0dXBRdWVyeSh0aGlzLmVudGl0eSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgICAgIHRoaXMuZGF0YUNvbnRleHQuZGVsZXRlKGVudGl0aWVzLCBjb25maXJtTXNnLCBvblN1Y2Nlc3MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiBzZWxlY3RlZFJvd3MgfSk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ29udGV4dC5kZWxldGUoZW50aXRpZXMsIGNvbmZpcm1Nc2cpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLndhcm5pbmcodGhpcy5hcHBFbnZpcm9ubWVudC5tc2dOb1JlY29yZHNTZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktlZXAgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZSA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHNlbGVjdGVkUm93cyB9KTtcclxuICAgIHRoaXMuYXBpLnNlbGVjdEFsbCgpO1xyXG4gICAgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aClcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMucm93RGF0YSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnQgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydERhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUbygpO1xyXG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5sYWJlbDsgXHJcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY29sdW1uRGVmcztcclxuICAgIHRoaXMuZ3JpZFR5cGUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZ3JpZFR5cGU7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvL3NldFRpbWVvdXQgdG8gcHJldmVudDogRVJST1IgRXJyb3I6IE5HMDEwMDogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvci4gXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYXJlbnRUb29sYmFyVGVtcGxhdGUgPSB0aGlzLnNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyLnNlYXJjaFZpZXdUb29sYmFyVGVtcGxhdGU7XHJcbiAgICAgIHRoaXMuY29uZmlnLnJlcG9ydENvbmZpZy5tZW51SXRlbXNFbmFibGVkID0gKCkgPT4geyByZXR1cm4gdGhpcy5yb3dEYXRhLmxlbmd0aDsgfTtcclxuICAgICAgdGhpcy5jb25maWcucmVwb3J0Q29uZmlnLmFsbE1lbnVzKCkuc3Vic2NyaWJlKChtZW51OiBhbnkpID0+IHsgdGhpcy5yZXBvcnRNZW51cyA9IG1lbnU7IH0pO1xyXG4gICAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwieyd0cnUtZGF0YS1ncmlkLWxhYmVsLW9mZnNldCc6IGxhYmVsfVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1sYWJlbFwiICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtdG9vbGJhci1jb250YWluZXJcIj5cclxuICAgIDx0cnUtdG9vbGJhcj5cclxuICAgICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cInVuYXNzb2NpYXRlZENob2ljZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE9wdGlvbildPVwic2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblVuYXNzb2NpYXRlZENob2ljZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueVwiPlxyXG4gICAgICA8L3RydS10b29sYmFyLWRyb3Bkb3duPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1hZGQtaWNvbidcIiBbdG9vbHRpcF09XCInQWRkIC0gW0N0cmwgKyBJXSdcIiBbZGlzYWJsZWRdPVwiIWNhbkFkZCgpXCIgKG9uQ2xpY2spPVwib25BZGQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1kZWxldGUtaWNvbidcIiBbdG9vbHRpcF09XCInRGVsZXRlIC0gW0N0cmwgKyBEXSdcIiAoY2xpY2spPVwib25EZWxldGUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1rZWVwLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0tlZXAgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgS10nXCIgKGNsaWNrKT1cIm9uS2VlcCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLXJlbW92ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidSZW1vdmUgc2VsZWN0ZWQgcmVjb3JkcyAtIFtDdHJsICsgUl0nXCIgKGNsaWNrKT1cIm9uUmVtb3ZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInBhcmVudFRvb2xiYXJUZW1wbGF0ZVwiPjwvdHJ1LXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWV4cG9ydC1pY29uJ1wiIFt0b29sdGlwXT1cIidFeHBvcnQnXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvciAqbmdJZj1cInJlcG9ydE1lbnVzLmxlbmd0aFwiPjwvdHJ1LXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwicmVwb3J0TWVudXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLW1lbnUgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRNZW51c1wiIFtjb25maWddPVwicmVwb3J0XCI+PC90cnUtdG9vbGJhci1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtY29udGFpbmVyXCI+XHJcbiAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93QnVmZmVyXT1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2VudGVyTmF2aWdhdGVzVmVydGljYWxseUFmdGVyRWRpdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N1cHByZXNzUm93SG92ZXJIaWdobGlnaHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzdG9wRWRpdGluZ1doZW5DZWxsc0xvc2VGb2N1c109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2tlZCk9XCJvbkNlbGxDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbERvdWJsZUNsaWNrZWQpPVwib25DZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxLZXlEb3duKT1cIm9uQ2VsbEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChyb3dEYXRhQ2hhbmdlZCk9XCJvblJvd0RhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbE1vdXNlT3Zlcik9XCJvbkNlbGxNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdXQpPVwib25DZWxsTW91c2VPdXQoJGV2ZW50KVwiPlxyXG4gICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy1jb250YWluZXJcIj5cclxuICAgICAgPHAgY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLXN0YXR1c2Jhci12YWx1ZXMtdGV4dFwiPnt7Z2V0Um93Q291bnQoKX19PC9wPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRTZWxlY3RlZFJvd0NvdW50KCl9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
2
|
import { TruDesktopViewEventNotifier } from '../services/tru-desktop-view-event-notifier';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "
|
|
5
|
-
import * as i2 from "../../../services/tru-component-lookup";
|
|
4
|
+
import * as i1 from "../../../services/tru-component-lookup";
|
|
6
5
|
export class TruDesktopView {
|
|
7
|
-
desktopViewEventNotifier;
|
|
8
6
|
viewContainerRef;
|
|
9
7
|
componentFactoryResolver;
|
|
10
8
|
componentLookup;
|
|
11
9
|
view;
|
|
12
10
|
active;
|
|
13
|
-
constructor(
|
|
14
|
-
this.desktopViewEventNotifier = desktopViewEventNotifier;
|
|
11
|
+
constructor(viewContainerRef, componentFactoryResolver, componentLookup) {
|
|
15
12
|
this.viewContainerRef = viewContainerRef;
|
|
16
13
|
this.componentFactoryResolver = componentFactoryResolver;
|
|
17
14
|
this.componentLookup = componentLookup;
|
|
@@ -22,18 +19,16 @@ export class TruDesktopView {
|
|
|
22
19
|
const containerRef = this.viewContainerRef.createComponent(componentFactory, 0, this.viewContainerRef.injector);
|
|
23
20
|
containerRef.instance.view = this.view;
|
|
24
21
|
}
|
|
25
|
-
ngOnChanges(changes) {
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopView, deps: [{ token: i1.TruDesktopViewEventNotifier }, { token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i2.TruComponentLookup }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
ngOnChanges(changes) { }
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopView, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i1.TruComponentLookup }], target: i0.ɵɵFactoryTarget.Component });
|
|
29
24
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruDesktopView, selector: "tru-desktop-view", inputs: { view: "view", active: "active" }, providers: [TruDesktopViewEventNotifier], usesOnChanges: true, ngImport: i0, template: "<div></div>\r\n", styles: [""] });
|
|
30
25
|
}
|
|
31
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruDesktopView, decorators: [{
|
|
32
27
|
type: Component,
|
|
33
28
|
args: [{ selector: 'tru-desktop-view', providers: [TruDesktopViewEventNotifier], template: "<div></div>\r\n" }]
|
|
34
|
-
}], ctorParameters: () => [{ type:
|
|
29
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i1.TruComponentLookup }], propDecorators: { view: [{
|
|
35
30
|
type: Input
|
|
36
31
|
}], active: [{
|
|
37
32
|
type: Input
|
|
38
33
|
}] } });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3ZpZXcvdHJ1LWRlc2t0b3Atdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3ZpZXcvdHJ1LWRlc2t0b3Atdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQUdwSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7O0FBUTFGLE1BQU0sT0FBTyxjQUFjO0lBS2Y7SUFDQTtJQUNBO0lBTkQsSUFBSSxDQUF3QjtJQUM1QixNQUFNLENBQVc7SUFFMUIsWUFDVSxnQkFBa0MsRUFDbEMsd0JBQWtELEVBQ2xELGVBQW1DO1FBRm5DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7SUFBRyxDQUFDO0lBRWpELFFBQVE7UUFDTixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQU0sZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNySCxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0IsSUFBUyxDQUFDO3VHQWhCakMsY0FBYzsyRkFBZCxjQUFjLHVGQUZkLENBQUMsMkJBQTJCLENBQUMsK0NDVDFDLGlCQUNBOzsyRkRVYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLGtCQUFrQixhQUdqQixDQUFDLDJCQUEyQixDQUFDOzZKQUcvQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFZpZXdDb250YWluZXJSZWYsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRydUNvbXBvbmVudExvb2t1cCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS1jb21wb25lbnQtbG9va3VwJztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL3RydS1kZXNrdG9wLXZpZXctY29uZmlnJztcclxuaW1wb3J0IHsgVHJ1RGVza3RvcFZpZXdFdmVudE5vdGlmaWVyIH0gZnJvbSAnLi4vc2VydmljZXMvdHJ1LWRlc2t0b3Atdmlldy1ldmVudC1ub3RpZmllcic7XHJcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndHJ1LWRlc2t0b3AtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGVza3RvcC12aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cnUtZGVza3RvcC12aWV3LmNzcyddLFxuICBwcm92aWRlcnM6IFtUcnVEZXNrdG9wVmlld0V2ZW50Tm90aWZpZXJdXG59KVxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BWaWV3IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdmlldyE6IFRydURlc2t0b3BWaWV3Q29uZmlnO1xuICBASW5wdXQoKSBhY3RpdmUhOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgY29tcG9uZW50TG9va3VwOiBUcnVDb21wb25lbnRMb29rdXApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50TG9va3VwLmdldCh0aGlzLnZpZXcuY29tcG9uZW50TmFtZSk7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxhbnk+KGNvbXBvbmVudEZhY3RvcnksIDAsIHRoaXMudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcik7XG4gICAgY29udGFpbmVyUmVmLmluc3RhbmNlLnZpZXcgPSB0aGlzLnZpZXc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7fVxufVxuIiwiPGRpdj48L2Rpdj5cclxuIl19
|