@sachin9822/reports-lib 0.0.209 → 0.0.211
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/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +13 -12
- package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +4 -3
- package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +1 -1
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +1 -1
- package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +700 -0
- package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +1 -1
- package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +3 -3
- package/esm2020/lib/components/funding-report/funding-report.component.mjs +3 -3
- package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +4 -3
- package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +3 -3
- package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +1 -1
- package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +311 -0
- package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +7 -6
- package/esm2020/lib/models/branch-activity-report/branch-activity-send-report.mjs +1 -1
- package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.mjs +6 -0
- package/esm2020/lib/models/transaction-monitoring-report/transaction-monitoring-report.mjs +5 -0
- package/esm2020/lib/reports-lib.module.mjs +15 -5
- package/esm2020/lib/services/report.service.mjs +62 -4
- package/esm2020/lib/shared/export-generic.service.mjs +10 -1
- package/esm2020/lib/shared/search-filter/search-filter.component.mjs +525 -189
- package/esm2020/public-api.mjs +5 -1
- package/fesm2015/sachin9822-reports-lib.mjs +1715 -330
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
- package/fesm2020/sachin9822-reports-lib.mjs +1721 -329
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
- package/lib/assets/images/Search.svg +9 -9
- package/lib/assets/svg-loaders/blue-tail-spin.svg +31 -31
- package/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.d.ts +78 -0
- package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +68 -0
- package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +1 -1
- package/lib/models/branch-activity-report/branch-activity-send-report.d.ts +4 -0
- package/lib/models/transaction-monitoring-report/transaction-monitoring-report-request-domain-model.d.ts +13 -0
- package/lib/models/transaction-monitoring-report/transaction-monitoring-report.d.ts +23 -0
- package/lib/reports-lib.module.d.ts +12 -10
- package/lib/services/report.service.d.ts +11 -1
- package/lib/shared/search-filter/search-filter.component.d.ts +7 -5
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
|
@@ -31,7 +31,8 @@ export class AccountingReportComponent {
|
|
|
31
31
|
this.isFormValid = false;
|
|
32
32
|
this.defaultColDef = {
|
|
33
33
|
resizable: true,
|
|
34
|
-
sortable:
|
|
34
|
+
sortable: true,
|
|
35
|
+
filter: true,
|
|
35
36
|
minWidth: 40,
|
|
36
37
|
suppressSizeToFit: false,
|
|
37
38
|
cellStyle: { userSelect: 'text', 'line-height': '1.2', 'white-space': 'normal', 'word-break': 'normal', 'overflow-wrap': 'break-word' },
|
|
@@ -587,9 +588,9 @@ export class AccountingReportComponent {
|
|
|
587
588
|
}
|
|
588
589
|
}
|
|
589
590
|
AccountingReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, deps: [{ token: i1.ReportService }, { token: i2.ExportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
590
|
-
AccountingReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountingReportComponent, selector: "lib-accounting-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\" (formValid)=\"handleFormValid($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && loadingState == ComponentLoadingState.Complete && !noDataFound && isFormValid\"\r\n style=\"margin-bottom: 30px;\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <div *ngIf=\"accountingReportModel.accountingReportByBranchGroups?.length\">\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"group.receiveTransactions.entries\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\r\n [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event, i * 2 + 1)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n </div>\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#16181e!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked", "formValid"] }] });
|
|
591
|
+
AccountingReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountingReportComponent, selector: "lib-accounting-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\" (formValid)=\"handleFormValid($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && loadingState == ComponentLoadingState.Complete && !noDataFound && isFormValid\"\r\n style=\"margin-bottom: 30px;\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <div *ngIf=\"accountingReportModel.accountingReportByBranchGroups?.length\">\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"group.receiveTransactions.entries\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\r\n [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event, i * 2 + 1)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n </div>\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#16181e!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName", "initialFilters"], outputs: ["searchClicked", "formValid"] }] });
|
|
591
592
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, decorators: [{
|
|
592
593
|
type: Component,
|
|
593
594
|
args: [{ selector: 'lib-accounting-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\" (formValid)=\"handleFormValid($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && loadingState == ComponentLoadingState.Complete && !noDataFound && isFormValid\"\r\n style=\"margin-bottom: 30px;\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <div *ngIf=\"accountingReportModel.accountingReportByBranchGroups?.length\">\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid grid-size\" style=\"width: 100%;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\"\r\n [rowData]=\"group.receiveTransactions.entries\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\r\n [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event, i * 2 + 1)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n </div>\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#16181e!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"] }]
|
|
594
595
|
}], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.ExportService }]; } });
|
|
595
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBMEVwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF4RXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBTTdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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QUFPLElBQUksS0FBSztZQUN2QyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLO1lBQ2pDLFdBQVcsRUFBRSxLQUFLLENBQUMsK0NBQStDO1NBQ25FLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFFN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBZ0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQzs7c0hBenJCVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2RENyQ3RDLGluSEErRE07MkZEMUJPLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWNjb3VudGluZ1JlcG9ydE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LW1vZGVsJztcclxuaW1wb3J0IHsgQ29sRGVmLCBDb2x1bW5BcGksIEdyaWRBcGksIEdyaWRSZWFkeUV2ZW50IH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcclxuaW1wb3J0IHsgQWNjb3VudGluZ1JlcG9ydEJyYW5jaEdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LWJyYW5jaC1ncm91cCc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XHJcbiAgaW50ZXJmYWNlIGpzUERGIHtcclxuICAgIGF1dG9UYWJsZTogKG9wdGlvbnM6IGFueSkgPT4ganNQREY7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0IHtcclxuICBzdGFydERhdGU6IHN0cmluZztcclxuICBlbmREYXRlOiBzdHJpbmc7XHJcbiAgc2VuZENvdW50cnlDb2RlOiBzdHJpbmc7XHJcbiAgcmVjdkNvdW50cnlDb2RlOiBzdHJpbmc7XHJcbiAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogc3RyaW5nO1xyXG4gIHRyYW5zYWN0aW9uU3RhdHVzOiBzdHJpbmc7XHJcbiAgcGF5b3V0Q3VycmVuY3k6IHN0cmluZztcclxuICB0cmFuc2FjdGlvblR5cGU6IHN0cmluZztcclxuICBicmFuY2hDb2RlOiBzdHJpbmc7XHJcbiAgY29tcGFueUNvZGU6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWNjb3VudGluZy1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRpbmdSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBSZXBvcnROYW1lOiBzdHJpbmcgPSBcIkFjY291bnRpbmdcIjtcclxuICByZXBvcnRVc2VyOiBhbnk7XHJcbiAgcmVwb3J0VGltZTogYW55O1xyXG4gIHJlcG9ydFBlcmlvZDogYW55O1xyXG4gIGJyYW5jaE5hbWVBbmRDb2RlOiBhbnk7XHJcbiAgc3ViR3JvdXBDb2x1bW46IGFueTtcclxuICBDb21wb25lbnRMb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzO1xyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlcyA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgbm9EYXRhRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGVmdERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcmlnaHREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcblxyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHJvd0RhdGEgPSBbXTtcclxuICBhY2NvdW50aW5nUmVwb3J0TW9kZWw6IEFjY291bnRpbmdSZXBvcnRNb2RlbDtcclxuICBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmcgPSAnZXhjZWwnO1xyXG4gIGV4cG9ydEZvcm1hdHMgPSBbeyBmb3JtYXROYW1lOiBcIkV4Y2VsXCIsIGNvZGU6ICdleGNlbCcgfSwgeyBmb3JtYXROYW1lOiBcIlBERlwiLCBjb2RlOiAncGRmJyB9LCB7IGZvcm1hdE5hbWU6IFwiQ1NWXCIsIGNvZGU6ICdjc3YnIH1dXHJcbiAgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgbWluV2lkdGg6IDQwLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgY2VsbFN0eWxlOiB7IHVzZXJTZWxlY3Q6ICd0ZXh0JywgJ2xpbmUtaGVpZ2h0JzogJzEuMicsICd3aGl0ZS1zcGFjZSc6ICdub3JtYWwnLCAnd29yZC1icmVhayc6ICdub3JtYWwnLCAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyB9LFxyXG5cclxuICAgIC8vICBIZWFkZXIgd3JhcHBpbmdcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuXHJcbiAgICAvLyAgQ2VsbCB3cmFwcGluZ1xyXG4gICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVpZ2h0OiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXHJcbiAgICB7IGhlYWRlck5hbWU6ICdCdXNpbmVzc0RhdGUnLCBmaWVsZDogJ2J1c2luZXNzRGF0ZScsIHRvb2x0aXBGaWVsZDogJ2J1c2luZXNzRGF0ZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1R4bkRhdGUmVGltZScsIGZpZWxkOiAndHJhbnNhY3Rpb25EYXRlQW5kVGltZScsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCBtaW5XaWR0aDogMTEwLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uTnVtYmVyJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENsaWVudCcsIGZpZWxkOiAnc2VuZENsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3NlbmRDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgU2VuZENsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50Jywgd2lkdGg6IDkwLCBtaW5XaWR0aDogODAsIG1heFdpZHRoOiAxMTAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQnLCBmaWVsZDogJ3JlY2VpdmVDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlIFJlY2VpdmVDbGllbnQgKElmIEFwcGxpY2FibGUpJywgZmllbGQ6ICdwcmluY2lwbGVSZWNlaXZlQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlUmVjZWl2ZUNsaWVudCcsIHdpZHRoOiAxMDAsIG1pbldpZHRoOiA5MCwgbWF4V2lkdGg6IDEyMCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeScsIGZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50UGFpZCcsIGZpZWxkOiAnYW1vdW50UGFpZCcsIHRvb2x0aXBGaWVsZDogJ2Ftb3VudFBhaWQnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kQ2N5JywgZmllbGQ6ICdzZW5kQ3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZW5kQ3VycmVuY3knLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VydmljZUZlZScsIGZpZWxkOiAnc2VydmljZUZlZScsIHRvb2x0aXBGaWVsZDogJ3NlcnZpY2VGZWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUYXgnLCBmaWVsZDogJ3RheCcsIHRvb2x0aXBGaWVsZDogJ3RheCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZVNlbmQgQW1vdW50JywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQW1vdW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NldHRsZW1lbnRDY3knLCBmaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0NsaWVudFNldHRsIChpbiBTQ2N5KScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluU0NjeScsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gVVNEKScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgdG9vbHRpcEZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVUeXBlJywgZmllbGQ6ICdzaGFyZVR5cGUnLCB0b29sdGlwRmllbGQ6ICdzaGFyZVR5cGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZVZhbHVlJywgZmllbGQ6ICdzaGFyZVZhbHVlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVWYWx1ZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmQvUmVjZWl2ZSBGZWVDY3knLCBmaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JywgdG9vbHRpcEZpZWxkOiAnc2VuZFJlY2VpdmVGZWVDY3knIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZUFtdCAoaW4gVVNEKScsIGZpZWxkOiAnc2hhcmVBbW91bnRJblVTRCcsIHRvb2x0aXBGaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50IFJhdGUnLCBmaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgdG9vbHRpcEZpZWxkOiAnc2V0dGxlbWVudFJhdGUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgXTtcclxuXHJcblxyXG4gIGdyaWRBcGlzOiBHcmlkQXBpW10gPSBbXTtcclxuICBncmlkQ29sdW1uQXBpczogQ29sdW1uQXBpW10gPSBbXTtcclxuXHJcbiAgcGFnaW5hdGlvbkFycmF5OiBhbnlbXTtcclxuICBlenJlbWl0VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yaWdpbmFsR3JvdXBFbnRyaWVzOiBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXBbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXpyZW1pdHVzZXJuYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICBpZiAoZXpyZW1pdHVzZXJuYW1lKSB7XHJcbiAgICAgIHRoaXMuZXpyZW1pdFVzZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY291bnRpbmdSZXBvcnQocmVxdWVzdD86IEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0KSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5icmFuY2hOYW1lQW5kQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc3ViR3JvdXBDb2x1bW4gPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBmaW5hbFJlcSA9IHJlcXVlc3Q7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFjY291bnRpbmdSZXBvcnQoZmluYWxSZXEpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwgPSBkYXRhO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBPYmplY3Qua2V5cyh0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMpLmxlbmd0aCA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBjb25zdCBicmFuY2hDb3VudCA9IHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkFycmF5ID0gbmV3IEFycmF5KGJyYW5jaENvdW50ICogMikuZmlsbCgxNSk7XHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFVzZXIgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5yZXBvcnRVc2VyO1xyXG4gICAgICB0aGlzLnJlcG9ydFRpbWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgICAgdGhpcy5yZXBvcnRQZXJpb2QgPSBgJHtmb3JtYXREYXRlKGZpbmFsUmVxLnN0YXJ0RGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX0gLSAke2Zvcm1hdERhdGUoZmluYWxSZXEuZW5kRGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX1gO1xyXG5cclxuICAgICAgdGhpcy5sZWZ0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFBlcmlvZCc6IGAke3RoaXMucmVwb3J0UGVyaW9kfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmlnaHREYXRhID0ge1xyXG4gICAgICAgICdSZXBvcnQgVXNlciAmIFRpbWUnOiBgJHt0aGlzLnJlcG9ydFVzZXJ9IEAgJHt0aGlzLnJlcG9ydFRpbWV9YCxcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsIGRhdGEgZm9yIHNlYXJjaFxyXG4gICAgICB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczoge1xyXG4gICAgICAgICAgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucyxcclxuICAgICAgICAgIGVudHJpZXM6IFsuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcblxyXG5cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVFeHBvcnQob3B0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcclxuICAgICAgY2FzZSAnZXhjZWwnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIHN0cj8udG9TdHJpbmcoKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xyXG4gICAgY29uc3Qgc2VhcmNoID0gbm9ybWFsaXplKHRleHQpO1xyXG5cclxuICAgIGlmICghdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gQnVpbGQgZmlsdGVyZWQgYnJhbmNoIGdyb3Vwc1xyXG4gICAgY29uc3QgZmlsdGVyZWRHcm91cHMgPSB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzLm1hcChncm91cCA9PiB7XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsU2VuZEVudHJpZXMgPSBncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMgPSBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZFNlbmQgPSBzZWFyY2hcclxuICAgICAgICA/IG9yaWdpbmFsU2VuZEVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApXHJcbiAgICAgICAgOiBbLi4ub3JpZ2luYWxTZW5kRW50cmllc107XHJcblxyXG4gICAgICBjb25zdCBmaWx0ZXJlZFJlY2VpdmUgPSBzZWFyY2hcclxuICAgICAgICA/IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApXHJcbiAgICAgICAgOiBbLi4ub3JpZ2luYWxSZWNlaXZlRW50cmllc107XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHsgLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZW50cmllczogZmlsdGVyZWRTZW5kIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczogeyAuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLCBlbnRyaWVzOiBmaWx0ZXJlZFJlY2VpdmUgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g8J+UuSBLZWVwIG9ubHkgYnJhbmNoZXMgdGhhdCBoYXZlIGFueSBtYXRjaGluZyBlbnRyaWVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMgPVxyXG4gICAgICBmaWx0ZXJlZEdyb3Vwcy5maWx0ZXIoZyA9PlxyXG4gICAgICAgIGcuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aCA+IDAgfHwgZy5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgIC8vIFJlc2V0IGdyaWRzIGZvciB2aXNpYmxlIGJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaCgoZ3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuZW50cmllc10uZm9yRWFjaCgoZW50cmllcywgaWR4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEFwaSA9IHRoaXMuZ3JpZEFwaXNbaW5kZXggKiAyICsgaWR4XTtcclxuICAgICAgICBpZiAoZ3JpZEFwaSkge1xyXG4gICAgICAgICAgZ3JpZEFwaS5zZXRSb3dEYXRhKGVudHJpZXMpO1xyXG4gICAgICAgICAgaWYgKGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UpIGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5ncmlkQXBpc1tpZF0gPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF0gPSBwYXJhbXMuY29sdW1uQXBpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvU2l6ZUFsbENvbHVtbnMoaWQpLCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKHBhcmFtczogYW55LCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmF1dG9TaXplQWxsQ29sdW1ucyhpZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXV0b1NpemVBbGxDb2x1bW5zKGlkOiBudW1iZXIsIHNraXBIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY29sdW1uQXBpID0gdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF07XHJcbiAgICBpZiAoIWNvbHVtbkFwaSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFsbENvbHVtbklkczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbHVtbkFwaS5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmdldElkKCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29sdW1uQXBpLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIHNraXBIZWFkZXIpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdE51bWJlcihwYXJhbXM6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAocGFyYW1zLnZhbHVlID09IG51bGwpIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBmaWVsZCA9IHBhcmFtcy5jb2xEZWYuZmllbGQ7XHJcblxyXG4gICAgaWYgKGZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIocGFyYW1zLnZhbHVlKS50b0ZpeGVkKDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIocGFyYW1zLnZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb1BkZigpIHtcclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IHRpdGxlID0gJ0FjY291bnRpbmcgUmVwb3J0JztcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ0FjY291bnRpbmctUmVwb3J0LnBkZic7XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcclxuICAgICAgWydSZXBvcnQgVXNlciAmIFRpbWUgOiAnLCBgJHt0aGlzLnJlcG9ydFVzZXJ9QCR7dGhpcy5yZXBvcnRUaW1lfWBdLFxyXG4gICAgXTtcclxuICAgIC8vIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYSA9IHRoaXMuc2VhcmNoQ3JpdGVyaWE7XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs3MDAsIDIxMF0gfSk7XHJcblxyXG4gICAgY29uc3QgbG9nb1dpZHRoID0gMzguNCwgbG9nb0hlaWdodCA9IDE3LjUsIGxvZ29YID0gMTUsIGxvZ29ZID0gODtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgIGNvbnN0IG1hcmdpbkxlZnQgPSAxNTtcclxuICAgIGNvbnN0IHRpdGxlWSA9IDE4O1xyXG5cclxuICAgIC8vIExvZ29cclxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2VbJ2xvZ29CYXNlNjQnXSkge1xyXG4gICAgICBkb2MuYWRkSW1hZ2UodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10sICdQTkcnLCBsb2dvWCwgbG9nb1ksIGxvZ29XaWR0aCwgbG9nb0hlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGl0bGVcclxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xyXG5cclxuICAgIC8vIE1ldGFkYXRhXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIDc7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KHZhbHVlID8/ICcnLCAxNSArIGxhYmVsV2lkdGgsIHkpO1xyXG4gICAgfSk7XHJcbiAgICBjdXJyZW50WSArPSBtZXRhZGF0YS5sZW5ndGggKiA3ICsgNTtcclxuXHJcbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgIC8vIC0tLSBkcmF3IHNlYXJjaCBjcml0ZXJpYSBoZWFkaW5nIC0tLVxyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCgnU2VhcmNoIENyaXRlcmlhOi0nLCBtYXJnaW5MZWZ0LCBjdXJyZW50WSk7XHJcbiAgICBjdXJyZW50WSArPSA4O1xyXG5cclxuICAgIGNvbnN0IHJvd0hlaWdodFBlckxpbmUgPSA2O1xyXG4gICAgY29uc3QgbWluR2FwID0gMjsgLy8gZ2FwIGJldHdlZW4ga2V5IGFuZCB2YWx1ZVxyXG4gICAgY29uc3QgYmV0d2VlbkNvbHVtbnNHYXAgPSAxNTsgLy8gZ2FwIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgY29sdW1ucyAoeW91IGNhbiB0dW5lIHRoaXMpXHJcbiAgICBjb25zdCBwYWdlQ29udGVudFdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gMiAqIG1hcmdpbkxlZnQ7XHJcblxyXG4gICAgLy8gLS0tIGhlbHBlciBmdW5jdGlvbiB0byBtZWFzdXJlIHRvdGFsIHdpZHRoIG9mIGEga2V5LXZhbHVlIHBhaXIgLS0tXHJcbiAgICBjb25zdCBtZWFzdXJlUGFpcldpZHRoID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgIGNvbnN0IGtleVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChrZXkgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBjb25zdCB2YWx1ZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBrZXlXaWR0aCArIG1pbkdhcCArIHZhbHVlV2lkdGg7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIC0tLSBjYWxjdWxhdGUgbWF4IHdpZHRoIG9mIGxlZnQgY29sdW1uIHBhaXJzIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgbGV0IG1heExlZnRQYWlyV2lkdGggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaV0pIHtcclxuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IG1lYXN1cmVQYWlyV2lkdGgoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHdpZHRoID4gbWF4TGVmdFBhaXJXaWR0aCkgbWF4TGVmdFBhaXJXaWR0aCA9IHdpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tIGNvbXB1dGUgd2hlcmUgcmlnaHQgY29sdW1uIHNob3VsZCBzdGFydCAtLS1cclxuICAgIGNvbnN0IGxlZnRDb2x1bW5TdGFydCA9IG1hcmdpbkxlZnQ7XHJcbiAgICBjb25zdCByaWdodENvbHVtblN0YXJ0ID0gbGVmdENvbHVtblN0YXJ0ICsgbWF4TGVmdFBhaXJXaWR0aCArIGJldHdlZW5Db2x1bW5zR2FwO1xyXG5cclxuICAgIC8vIC0tLSBwcmludCBzZWFyY2ggY3JpdGVyaWEgZHluYW1pY2FsbHkgLS0tXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGxldCBtYXhMaW5lQ291bnQgPSAxO1xyXG5cclxuICAgICAgLy8gTGVmdCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2ldKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQoa2V5LCBsZWZ0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSBsZWZ0Q29sdW1uU3RhcnQgKyBrZXlXaWR0aCArIG1pbkdhcDtcclxuICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdmFsdWVYLCBjdXJyZW50WSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJpZ2h0IGNvbHVtblxyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaSArIDFdKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgcmlnaHRDb2x1bW5TdGFydCwgY3VycmVudFkpO1xyXG5cclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgIGNvbnN0IGtleVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChrZXkgKyAnICcpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlWCA9IHJpZ2h0Q29sdW1uU3RhcnQgKyBrZXlXaWR0aCArIG1pbkdhcDtcclxuICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdmFsdWVYLCBjdXJyZW50WSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJlbnRZICs9IHJvd0hlaWdodFBlckxpbmU7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50WSArPSA4O1xyXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgLy8gQnJhbmNoZXNcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcblxyXG4gICAgICBjb25zdCBicmFuY2hUZXh0ID0gYEJyYW5jaCAoTmFtZSAmIENvZGUpOiAke2dyb3VwLmJyYW5jaE5hbWVBbmRDb2RlfWA7XHJcbiAgICAgIGRvYy50ZXh0KGJyYW5jaFRleHQsIDE1LCBjdXJyZW50WSk7XHJcbiAgICAgIGN1cnJlbnRZICs9IDc7XHJcblxyXG4gICAgICAvLyBMb29wIHN1Ymdyb3VwcyAoU2VuZCArIFJlY2VpdmUpXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChgU3ViIEdyb3VwOiAke3N1Ykdyb3VwLnN1Ykdyb3VwTmFtZX1gLCAxNSwgY3VycmVudFkpO1xyXG4gICAgICAgIGN1cnJlbnRZICs9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgcm93cyB9ID0gdGhpcy5wcmVwYXJlQWNjb3VudGluZ1RhYmxlKHN1Ykdyb3VwLmVudHJpZXMpO1xyXG5cclxuICAgICAgICAoZG9jIGFzIGFueSkuYXV0b1RhYmxlKHtcclxuICAgICAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcclxuICAgICAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgICAgICBzdGFydFk6IGN1cnJlbnRZLFxyXG4gICAgICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICAgICAgZmlsbENvbG9yOiBbMjIwLCAyMjAsIDIyMF0sIHRleHRDb2xvcjogMCxcclxuICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsIGZvbnRTaXplOiA5LCBoYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHlTdHlsZXM6IHsgZm9udFNpemU6IDgsIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLCB0ZXh0Q29sb3I6IFswLCAwLCAwXSB9LFxyXG4gICAgICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY3VycmVudFkgPSAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFkgKyAxMDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwYWdlQ291bnQgPSAoZG9jIGFzIGFueSkuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFnZUNvdW50OyBpKyspIHtcclxuICAgICAgZG9jLnNldEZvbnQoXCJoZWx2ZXRpY2FcIiwgXCJib2xkXCIpO1xyXG4gICAgICBkb2Muc2V0UGFnZShpKTtcclxuICAgICAgZG9jLnNldEZvbnRTaXplKDkpO1xyXG4gICAgICBkb2Muc2V0VGV4dENvbG9yKDEwMCk7XHJcblxyXG4gICAgICBjb25zdCBmb290ZXJZID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIDY7XHJcblxyXG4gICAgICBkb2MudGV4dChcclxuICAgICAgICBgUGFnZSAke2l9IG9mICR7cGFnZUNvdW50fWAsXHJcbiAgICAgICAgcGFnZVdpZHRoIC0gMTUsXHJcbiAgICAgICAgZm9vdGVyWSxcclxuICAgICAgICB7IGFsaWduOiAncmlnaHQnIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkb2Muc2F2ZShmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvRXhjZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCB0aXRsZSA9ICdBY2NvdW50aW5nIFJlcG9ydCc7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC54bHN4JztcclxuXHJcbiAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0FjY291bnRpbmcgUmVwb3J0Jyk7XHJcbiAgICBsZXQgY3VycmVudFJvdyA9IDE7XHJcblxyXG4gICAgLy8gTG9nb1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0U2VydmljZS5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7IHRsOiB7IGNvbDogMCwgcm93OiAwIH0sIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sIGVkaXRBczogJ29uZUNlbGwnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdyk7XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLnZhbHVlID0gdGl0bGU7XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLmZvbnQgPSB7IGJvbGQ6IHRydWUsIHNpemU6IDE2IH07XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBGJHtjdXJyZW50Um93fTpKJHtjdXJyZW50Um93fWApO1xyXG4gICAgY3VycmVudFJvdyArPSAzO1xyXG5cclxuICAgIC8vIE1ldGFkYXRhXHJcbiAgICBjb25zdCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBQZXJpb2QnLCB0aGlzLnJlcG9ydFBlcmlvZF0sXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgJiBUaW1lIDogJywgYCR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gXSxcclxuICAgIF07XHJcbiAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGAke2xhYmVsfTogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgIHsgdGV4dDogdmFsdWUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLnNlYXJjaENyaXRlcmlhO1xyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSBoZWFkaW5nIC0tLVxyXG4gICAgLy8gLS0tIEhlYWRpbmcgLS0tXHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhjdXJyZW50Um93LCAxLCBjdXJyZW50Um93LCA4KTtcclxuICAgIGNvbnN0IGhlYWRpbmdDZWxsID0gd29ya3NoZWV0LmdldENlbGwoY3VycmVudFJvdywgMSk7XHJcbiAgICBoZWFkaW5nQ2VsbC52YWx1ZSA9ICdTZWFyY2ggQ3JpdGVyaWE6LSc7XHJcbiAgICBoZWFkaW5nQ2VsbC5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxMiB9O1xyXG4gICAgaGVhZGluZ0NlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG4gICAgY3VycmVudFJvdyArPSAyO1xyXG5cclxuICAgIC8vIC0tLSBEcmF3IHBhaXJzIGR5bmFtaWNhbGx5ICh0d28gcGVyIHJvdykgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sRW5kID0gNDsgLy8gY29sdW1ucyAx4oCTNCBmb3IgbGVmdCBwYWlyXHJcbiAgICBjb25zdCByaWdodENvbFN0YXJ0ID0gNTsgLy8gY29sdW1ucyA14oCTOCBmb3IgcmlnaHQgcGFpclxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG5cclxuICAgICAgLy8gTGVmdCBwYWlyXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIGxlZnRDb2xFbmQpO1xyXG4gICAgICAgIGNvbnN0IGxlZnRDZWxsID0gcm93LmdldENlbGwoMSk7XHJcbiAgICAgICAgbGVmdENlbGwudmFsdWUgPSB7IHJpY2hUZXh0OiBbeyB0ZXh0OiBrZXkgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogdmFsdWUgfV0gfTtcclxuICAgICAgICBsZWZ0Q2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgd3JhcFRleHQ6IHRydWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmlnaHQgcGFpclxyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaSArIDFdKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG4gICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIHJpZ2h0Q29sU3RhcnQsIHJvdy5udW1iZXIsIHJpZ2h0Q29sU3RhcnQgKyAzKTtcclxuICAgICAgICBjb25zdCByaWdodENlbGwgPSByb3cuZ2V0Q2VsbChyaWdodENvbFN0YXJ0KTtcclxuICAgICAgICByaWdodENlbGwudmFsdWUgPSB7IHJpY2hUZXh0OiBbeyB0ZXh0OiBrZXkgKyAnICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sIHsgdGV4dDogdmFsdWUgfV0gfTtcclxuICAgICAgICByaWdodENlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAvLyBCcmFuY2hlc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBjb25zdCBicmFuY2hSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgIGJyYW5jaFJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6ICdCcmFuY2ggKE5hbWUgJiBDb2RlKTogJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgIHsgdGV4dDogZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgLy8gTG9vcCBzdWJncm91cHNcclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghc3ViR3JvdXAuZW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHN1Ykdyb3VwUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIHN1Ykdyb3VwUm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgICB7IHRleHQ6ICdTdWIgR3JvdXA6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogc3ViR3JvdXAuc3ViR3JvdXBOYW1lID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgICAgIC8vIEhlYWRlcnNcclxuICAgICAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMucHJlcGFyZUFjY291bnRpbmdUYWJsZShzdWJHcm91cC5lbnRyaWVzKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXIsIGkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgICBjZWxsLnZhbHVlID0gaGVhZGVyO1xyXG4gICAgICAgICAgY2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICBjZWxsLmZpbGwgPSB7IHR5cGU6ICdwYXR0ZXJuJywgcGF0dGVybjogJ3NvbGlkJywgZmdDb2xvcjogeyBhcmdiOiAnRDlEOUQ5JyB9IH07XHJcbiAgICAgICAgICBjZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gUm93c1xyXG4gICAgICAgIHJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICAgIHIuZm9yRWFjaCgodmFsLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgIGNlbGwuYm9yZGVyID0geyB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9IH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBdXRvLWFkanVzdCBjb2x1bW4gd2lkdGhzIChpbmNsdWRpbmcgU3IgTm8pXHJcbiAgICBjb25zdCBhbGxIZWFkZXJzID0gWydTciBObycsIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoYyA9PiBjLmhlYWRlck5hbWUpXTtcclxuICAgIGFsbEhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICAgIGxldCBtYXhMZW5ndGggPSBoZWFkZXIubGVuZ3RoOyAvLyBzdGFydCB3aXRoIGhlYWRlciBsZW5ndGhcclxuXHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgICBzdWJHcm91cC5lbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgICAgICAvLyBTciBObyBjb2x1bW4gKGkgPSAwKSBpcyBqdXN0IG51bWJlcnNcclxuICAgICAgICAgICAgbGV0IHZhbCA9IGkgPT09IDAgPyAoc3ViR3JvdXAuZW50cmllcy5pbmRleE9mKGVudHJ5KSArIDEpLnRvU3RyaW5nKCkgOiAoZW50cnlbdGhpcy5jb2x1bW5EZWZzW2kgLSAxXT8uZmllbGRdID8/ICcnKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gdmFsLnRvU3RyaW5nKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSBtYXhMZW5ndGggPSBsZW47XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGkgKyAxKS53aWR0aCA9IG1heExlbmd0aCArIDU7IC8vIHBhZGRpbmdcclxuICAgIH0pO1xyXG5cclxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgICAgfSk7XHJcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQWNjb3VudGluZ1RhYmxlKGRhdGE6IGFueVtdKTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogYW55W11bXSB9IHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydhbW91bnRQYWlkJywgJ3NlcnZpY2VGZWUnLCAndGF4JywgJ3ByaW5jaXBsZVNlbmRBbW91bnQnLCAnY2xpZW50U2V0dGxlbWVudEluU0NjeSddO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcblxyXG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3M6IFtdIH07IC8vIHJldHVybiBoZWFkZXJzIG9ubHksIGVtcHR5IHJvd3NcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAoKHJvdywgaSkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIGkgKyAxLFxyXG4gICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2YWwgPSByb3dbY29sLmZpZWxkXTtcclxuICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkpIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCgzKTtcclxuICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICdzZXR0bGVtZW50UmF0ZScpIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCg4KTtcclxuICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfSlcclxuICAgICAgXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3MgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9Dc3YoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC5jc3YnO1xyXG4gICAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByb3dzLnB1c2goJ1JlcG9ydCBUaXRsZTogQWNjb3VudGluZyBSZXBvcnQnKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcbiAgICByb3dzLnB1c2goYFJlcG9ydCBQZXJpb2Q6ICR7dGhpcy5yZXBvcnRQZXJpb2R9YCk7XHJcbiAgICByb3dzLnB1c2goYFJlcG9ydCBVc2VyICYgVGltZTogJHt0aGlzLnJlcG9ydFVzZXJ9QCR7dGhpcy5yZXBvcnRUaW1lfWApO1xyXG4gICAgcm93cy5wdXNoKCcnKTtcclxuXHJcbiAgICAvLyAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLnNlYXJjaENyaXRlcmlhO1xyXG5cclxuICAgIGlmIChzZWFyY2hDcml0ZXJpYT8ubGVuZ3RoKSB7XHJcbiAgICAgIHJvd3MucHVzaCgnU2VhcmNoIENyaXRlcmlhOi0nKTtcclxuXHJcbiAgICAgIC8vIGNhbGN1bGF0ZSBtYXggbGVuZ3RoIG9mIGxlZnQga2V5LXZhbHVlIHBhaXJzIGZvciBwYWRkaW5nXHJcbiAgICAgIGNvbnN0IG1heExlZnRMZW5ndGggPSBNYXRoLm1heCguLi5zZWFyY2hDcml0ZXJpYS5tYXAoKFtrLCB2XSkgPT4gKGsgKyAnICcgKyB2KS5sZW5ndGgpKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICBjb25zdCBsZWZ0ID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzZWFyY2hDcml0ZXJpYVtpICsgMV07XHJcblxyXG4gICAgICAgIGNvbnN0IGxlZnRUZXh0ID0gbGVmdCA/IGAke2xlZnRbMF19ICR7bGVmdFsxXX1gLnBhZEVuZChtYXhMZWZ0TGVuZ3RoICsgNSwgJyAnKSA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHJpZ2h0ID8gYCR7cmlnaHRbMF19ICR7cmlnaHRbMV19YCA6ICcnO1xyXG5cclxuICAgICAgICAvLyAgRWFjaCByb3cgaW4gc2luZ2xlIENTViByb3c7IGZpcnN0IGFuZCBzZWNvbmQgcGFpciBzZXBhcmF0ZWQgYnkgYSBjb2x1bW5cclxuICAgICAgICByb3dzLnB1c2goYFwiJHtsZWZ0VGV4dH0ke3JpZ2h0VGV4dH1cImApO1xyXG4gICAgICB9XHJcbiAgICAgIHJvd3MucHVzaCgnJyk7IC8vIGJsYW5rIGxpbmUgYWZ0ZXIgc2VhcmNoIGNyaXRlcmlhXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICByb3dzLnB1c2goYEJyYW5jaCAoTmFtZSAmIENvZGUpOiAke2dyb3VwLmJyYW5jaE5hbWVBbmRDb2RlfWApO1xyXG5cclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghc3ViR3JvdXAuZW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIHJvd3MucHVzaChgU3ViIEdyb3VwOiAke3N1Ykdyb3VwLnN1Ykdyb3VwTmFtZX1gKTtcclxuXHJcbiAgICAgICAgLy8gIEFkZCBcIlNyIE5vXCIgYXQgdGhlIGJlZ2lubmluZyBvZiBoZWFkZXJzXHJcbiAgICAgICAgcm93cy5wdXNoKFsnXCJTciBOb1wiJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4gYFwiJHtjb2wuaGVhZGVyTmFtZX1cImApXS5qb2luKCcsJykpO1xyXG5cclxuICAgICAgICBzdWJHcm91cC5lbnRyaWVzLmZvckVhY2goKGVudHJ5LCBpZHgpID0+IHtcclxuICAgICAgICAgIC8vICBBZGQgc2VyaWFsIG51bWJlciBhdCBzdGFydCBvZiBlYWNoIHJvd1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gW1xyXG4gICAgICAgICAgICAoaWR4ICsgMSkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGVudHJ5W2NvbC5maWVsZF07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXS5pbmNsdWRlcyhjb2wuZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICdzZXR0bGVtZW50UmF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCg4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsfVwiYDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0uam9pbignLCcpO1xyXG4gICAgICAgICAgcm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJvd3MucHVzaCgnJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyb3dzLmpvaW4oJ1xcbicpXSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICBnZXRSZXBvcnQocGF5bG9hZDogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbCA9IHBheWxvYWQ/Lm1vZGFsIHx8IHBheWxvYWQ7XHJcblxyXG4gICAgY29uc3QgcmVxOiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCA9IHtcclxuICAgICAgc3RhcnREYXRlOiBtb2RhbC5mcm9tRGF0ZSwgLy8geXl5eS1NTS1kZCBmcm9tIHRoZSBmaWx0ZXJcclxuICAgICAgZW5kRGF0ZTogbW9kYWwudG9EYXRlLFxyXG4gICAgICBzZW5kQ291bnRyeUNvZGU6IG1vZGFsLnNlbmRDb3VudHJ5ID8/ICdBTEwnLFxyXG4gICAgICByZWN2Q291bnRyeUNvZGU6IG1vZGFsLnJlY2VpdmVDb3VudHJ5ID8/ICdBTEwnLFxyXG4gICAgICBidXNpbmVzc1BhcnRuZXJDb3JyZWxhdGlvbklEOiBtb2RhbC5jbGllbnQgPz8gJ0FMTCcsXHJcbiAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBtb2RhbC50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKSxcclxuICAgICAgcGF5b3V0Q3VycmVuY3k6IG1vZGFsLmN1cnJlbmN5ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblR5cGU6IG1vZGFsLnByb2R1Y3QgPz8gJ0FMTCcsXHJcbiAgICAgIGJyYW5jaENvZGU6IG1vZGFsLmJyYW5jaCA/PyAnQUxMJyxcclxuICAgICAgY29tcGFueUNvZGU6ICdBTEwnIC8vIG9yICdCSCcgaWYgeW91ciBBUEkgcmVxdWlyZXMgaXQgc3BlY2lmaWNhbGx5XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEgPSBwYXlsb2FkLnNlYXJjaENyaXRlcmlhO1xyXG5cclxuICAgIHRoaXMuZ2V0QWNjb3VudGluZ1JlcG9ydChyZXEpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRm9ybVZhbGlkKGlzVmFsaWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1zZWFyY2gtZmlsdGVyIFtSZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiAoc2VhcmNoQ2xpY2tlZCk9XCJnZXRSZXBvcnQoJGV2ZW50KVwiIChmb3JtVmFsaWQpPVwiaGFuZGxlRm9ybVZhbGlkKCRldmVudClcIj48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJhY2NvdW50aW5nUmVwb3J0TW9kZWwhPXVuZGVmaW5lZCAmJiBsb2FkaW5nU3RhdGUgPT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlICYmICFub0RhdGFGb3VuZCAmJiBpc0Zvcm1WYWxpZFwiXHJcbiAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAzMHB4O1wiPlxyXG5cclxuICA8bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIiBbbWV0YURhdGFPbmVdPVwibGVmdERhdGFcIlxyXG4gICAgW21ldGFEYXRhVHdvXT1cInJpZ2h0RGF0YVwiIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiIChzZWFyY2hFdmVudCk9XCJvblNlYXJjaCgkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJhY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGhcIj5cclxuICAgIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYWNjb3VudGluZ1JlcG9ydE1vZGVsPy5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8bmdiLXBhbmVsIFtpZF09XCIncGFuZWwtJyArIGlcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwYW5lbC1jbHNcIj5cclxuICAgICAgICAgICAgICB7eyBncm91cC5icmFuY2hOYW1lQW5kQ29kZSB9fVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxyXG4gICAgICAgICAgICA8IS0tIFNlbmQgVHJhbnNhY3Rpb25zIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgIDxoNiBjbGFzcz1cInN1Ymdyb3VwY29sdW1uXCI+e3sgZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5zdWJHcm91cE5hbWUgfX08L2g2PlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIiBbZGVmYXVsdFNpemVdPVwiJzE1J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtncmlkQXBpXT1cImdyaWRBcGlzW2kgKiAyXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZCBncmlkLXNpemVcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCIyMFwiIFtoZWFkZXJIZWlnaHRdPVwiMjRcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCIgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudCwgaSAqIDIpXCIgKGdyaWRTaXplQ2hhbmdlZCk9XCJvbkdyaWRTaXplQ2hhbmdlZCgkZXZlbnQsIGkgKiAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBSZWNlaXZlIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgW2RlZmF1bHRTaXplXT1cIicxNSdcIlxyXG4gICAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMiArIDFdXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhciBjbGFzcz1cImFnLXRoZW1lLWFscGluZSB0cmFuc2FjdGlvbi1ncmlkIGdyaWQtc2l6ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNcIiBbcm93SGVpZ2h0XT1cIjIwXCIgW2hlYWRlckhlaWdodF09XCIyNFwiIFtwYWdpbmF0aW9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25BcnJheVtpXVwiIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LCBpICogMiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgKGdyaWRTaXplQ2hhbmdlZCk9XCJvbkdyaWRTaXplQ2hhbmdlZCgkZXZlbnQsIGkgKiAyKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nYi1wYW5lbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nYi1hY2NvcmRpb24+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIG10LTNcIiAqbmdJZj1cIm5vRGF0YUZvdW5kICYmIGxvYWRpbmdTdGF0ZSE9Q29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj5cclxuICBObyBEYXRhIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxyXG48L2Rpdj4iXX0=
|
|
596
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBMkVwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF6RXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBTTdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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QUFlLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLO1lBQ3ZDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUs7WUFDakMsV0FBVyxFQUFFLEtBQUssQ0FBQywrQ0FBK0M7U0FDbkUsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUU3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDOztzSEExckJVLHlCQUF5QjswR0FBekIseUJBQXlCLDZEQ3JDdEMsaW5IQStETTsyRkQxQk8seUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY2NvdW50aW5nUmVwb3J0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3VudGluZy1yZXBvcnQvYWNjb3VudGluZy1yZXBvcnQtbW9kZWwnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbkFwaSwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlcyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQtbG9hZGluZy1zdGF0ZXMnO1xyXG5pbXBvcnQgeyBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXAgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3VudGluZy1yZXBvcnQvYWNjb3VudGluZy1yZXBvcnQtYnJhbmNoLWdyb3VwJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcclxuICBpbnRlcmZhY2UganNQREYge1xyXG4gICAgYXV0b1RhYmxlOiAob3B0aW9uczogYW55KSA9PiBqc1BERjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudGluZ1JlcG9ydFJlcXVlc3Qge1xyXG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIGVuZERhdGU6IHN0cmluZztcclxuICBzZW5kQ291bnRyeUNvZGU6IHN0cmluZztcclxuICByZWN2Q291bnRyeUNvZGU6IHN0cmluZztcclxuICBidXNpbmVzc1BhcnRuZXJDb3JyZWxhdGlvbklEOiBzdHJpbmc7XHJcbiAgdHJhbnNhY3Rpb25TdGF0dXM6IHN0cmluZztcclxuICBwYXlvdXRDdXJyZW5jeTogc3RyaW5nO1xyXG4gIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nO1xyXG4gIGJyYW5jaENvZGU6IHN0cmluZztcclxuICBjb21wYW55Q29kZTogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hY2NvdW50aW5nLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudGluZ1JlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIFJlcG9ydE5hbWU6IHN0cmluZyA9IFwiQWNjb3VudGluZ1wiO1xyXG4gIHJlcG9ydFVzZXI6IGFueTtcclxuICByZXBvcnRUaW1lOiBhbnk7XHJcbiAgcmVwb3J0UGVyaW9kOiBhbnk7XHJcbiAgYnJhbmNoTmFtZUFuZENvZGU6IGFueTtcclxuICBzdWJHcm91cENvbHVtbjogYW55O1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBub0RhdGFGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsZWZ0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICByaWdodERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGFjY291bnRpbmdSZXBvcnRNb2RlbDogQWNjb3VudGluZ1JlcG9ydE1vZGVsO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZyA9ICdleGNlbCc7XHJcbiAgZXhwb3J0Rm9ybWF0cyA9IFt7IGZvcm1hdE5hbWU6IFwiRXhjZWxcIiwgY29kZTogJ2V4Y2VsJyB9LCB7IGZvcm1hdE5hbWU6IFwiUERGXCIsIGNvZGU6ICdwZGYnIH0sIHsgZm9ybWF0TmFtZTogXCJDU1ZcIiwgY29kZTogJ2NzdicgfV1cclxuICBpc0Zvcm1WYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbldpZHRoOiA0MCxcclxuICAgIHN1cHByZXNzU2l6ZVRvRml0OiBmYWxzZSxcclxuICAgIGNlbGxTdHlsZTogeyB1c2VyU2VsZWN0OiAndGV4dCcsICdsaW5lLWhlaWdodCc6ICcxLjInLCAnd2hpdGUtc3BhY2UnOiAnbm9ybWFsJywgJ3dvcmQtYnJlYWsnOiAnbm9ybWFsJywgJ292ZXJmbG93LXdyYXAnOiAnYnJlYWstd29yZCcgfSxcclxuXHJcbiAgICAvLyAgSGVhZGVyIHdyYXBwaW5nXHJcbiAgICB3cmFwSGVhZGVyVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWFkZXJIZWlnaHQ6IHRydWUsXHJcblxyXG4gICAgLy8gIENlbGwgd3JhcHBpbmdcclxuICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlaWdodDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbHVtbkRlZnM6IENvbERlZltdID0gW1xyXG4gICAgeyBoZWFkZXJOYW1lOiAnQnVzaW5lc3NEYXRlJywgZmllbGQ6ICdidXNpbmVzc0RhdGUnLCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUeG5EYXRlJlRpbWUnLCBmaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkRhdGVBbmRUaW1lJywgbWluV2lkdGg6IDExMCwgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIE51bWJlcicsIGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmRDbGllbnQnLCBmaWVsZDogJ3NlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdzZW5kQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlIFNlbmRDbGllbnQgKElmIEFwcGxpY2FibGUpJywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZENsaWVudCcsIHdpZHRoOiA5MCwgbWluV2lkdGg6IDgwLCBtYXhXaWR0aDogMTEwIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdSZWNlaXZlQ2xpZW50JywgZmllbGQ6ICdyZWNlaXZlQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUNsaWVudCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZSBSZWNlaXZlQ2xpZW50IChJZiBBcHBsaWNhYmxlKScsIGZpZWxkOiAncHJpbmNpcGxlUmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnLCB3aWR0aDogMTAwLCBtaW5XaWR0aDogOTAsIG1heFdpZHRoOiAxMjAgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDY3knLCBmaWVsZDogJ3JlY2VpdmVDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVDdXJyZW5jeScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Ftb3VudFBhaWQnLCBmaWVsZDogJ2Ftb3VudFBhaWQnLCB0b29sdGlwRmllbGQ6ICdhbW91bnRQYWlkJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENjeScsIGZpZWxkOiAnc2VuZEN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAnc2VuZEN1cnJlbmN5JywgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlcnZpY2VGZWUnLCBmaWVsZDogJ3NlcnZpY2VGZWUnLCB0b29sdGlwRmllbGQ6ICdzZXJ2aWNlRmVlJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVGF4JywgZmllbGQ6ICd0YXgnLCB0b29sdGlwRmllbGQ6ICd0YXgnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGVTZW5kIEFtb3VudCcsIGZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVNlbmRBbW91bnQnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUcmFuc2FjdGlvbiBTdGF0dXMnLCBmaWVsZDogJ3RyYW5zYWN0aW9uU3RhdHVzJywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50Q2N5JywgZmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gU0NjeSknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCB0b29sdGlwRmllbGQ6ICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5JywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQ2xpZW50U2V0dGwgKGluIFVTRCknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblVTRCcsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblVTRCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlVHlwZScsIGZpZWxkOiAnc2hhcmVUeXBlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVUeXBlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVWYWx1ZScsIGZpZWxkOiAnc2hhcmVWYWx1ZScsIHRvb2x0aXBGaWVsZDogJ3NoYXJlVmFsdWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kL1JlY2VpdmUgRmVlQ2N5JywgZmllbGQ6ICdzZW5kUmVjZWl2ZUZlZUNjeScsIHRvb2x0aXBGaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVBbXQgKGluIFVTRCknLCBmaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCB0b29sdGlwRmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2V0dGxlbWVudCBSYXRlJywgZmllbGQ6ICdzZXR0bGVtZW50UmF0ZScsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gIF07XHJcblxyXG5cclxuICBncmlkQXBpczogR3JpZEFwaVtdID0gW107XHJcbiAgZ3JpZENvbHVtbkFwaXM6IENvbHVtbkFwaVtdID0gW107XHJcblxyXG4gIHBhZ2luYXRpb25BcnJheTogYW55W107XHJcbiAgZXpyZW1pdFVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvcmlnaW5hbEdyb3VwRW50cmllczogQWNjb3VudGluZ1JlcG9ydEJyYW5jaEdyb3VwW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLCBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV6cmVtaXR1c2VybmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2V6cmVtaXR1c2VybmFtZScpO1xyXG4gICAgaWYgKGV6cmVtaXR1c2VybmFtZSkge1xyXG4gICAgICB0aGlzLmV6cmVtaXRVc2VyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBY2NvdW50aW5nUmVwb3J0KHJlcXVlc3Q/OiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYnJhbmNoTmFtZUFuZENvZGUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnN1Ykdyb3VwQ29sdW1uID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgZmluYWxSZXEgPSByZXF1ZXN0O1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRBY2NvdW50aW5nUmVwb3J0KGZpbmFsUmVxKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gZGF0YTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICB0aGlzLm5vRGF0YUZvdW5kID0gT2JqZWN0LmtleXModGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzKS5sZW5ndGggPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgY29uc3QgYnJhbmNoQ291bnQgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMubGVuZ3RoO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcnJheSA9IG5ldyBBcnJheShicmFuY2hDb3VudCAqIDIpLmZpbGwoMTUpO1xyXG5cclxuICAgICAgdGhpcy5yZXBvcnRVc2VyID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwucmVwb3J0VXNlcjtcclxuICAgICAgdGhpcy5yZXBvcnRUaW1lID0gZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XHJcbiAgICAgIHRoaXMucmVwb3J0UGVyaW9kID0gYCR7Zm9ybWF0RGF0ZShmaW5hbFJlcS5zdGFydERhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9IC0gJHtmb3JtYXREYXRlKGZpbmFsUmVxLmVuZERhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyl9YDtcclxuXHJcbiAgICAgIHRoaXMubGVmdERhdGEgPSB7XHJcbiAgICAgICAgJ1JlcG9ydCBQZXJpb2QnOiBgJHt0aGlzLnJlcG9ydFBlcmlvZH1gLFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJpZ2h0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFVzZXIgJiBUaW1lJzogYCR7dGhpcy5yZXBvcnRVc2VyfSBAICR7dGhpcy5yZXBvcnRUaW1lfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERlZXAgY29weSB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBkYXRhIGZvciBzZWFyY2hcclxuICAgICAgdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcyA9IHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBzZW5kVHJhbnNhY3Rpb25zOiB7XHJcbiAgICAgICAgICAuLi5ncm91cC5zZW5kVHJhbnNhY3Rpb25zLFxyXG4gICAgICAgICAgZW50cmllczogWy4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllc11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlY2VpdmVUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG5cclxuXHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRXhwb3J0KG9wdGlvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uID0gb3B0aW9uO1xyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncGRmJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvUGRmKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Nzdic6XHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0NzdigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGFuIGV4cG9ydCBmb3JtYXQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChzdHI6IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICBzdHI/LnRvU3RyaW5nKClcclxuICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcclxuICAgICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKVxyXG4gICAgICAgIC50cmltKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcclxuICAgIGNvbnN0IHNlYXJjaCA9IG5vcm1hbGl6ZSh0ZXh0KTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3JpZ2luYWxHcm91cEVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEJ1aWxkIGZpbHRlcmVkIGJyYW5jaCBncm91cHNcclxuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gdGhpcy5vcmlnaW5hbEdyb3VwRW50cmllcy5tYXAoZ3JvdXAgPT4ge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbFNlbmRFbnRyaWVzID0gZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG4gICAgICBjb25zdCBvcmlnaW5hbFJlY2VpdmVFbnRyaWVzID0gZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWRTZW5kID0gc2VhcmNoXHJcbiAgICAgICAgPyBvcmlnaW5hbFNlbmRFbnRyaWVzLmZpbHRlcihlbnRyeSA9PlxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZSh2YWx1ZSA9PiBub3JtYWxpemUodmFsdWUpLmluY2x1ZGVzKHNlYXJjaCkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogWy4uLm9yaWdpbmFsU2VuZEVudHJpZXNdO1xyXG5cclxuICAgICAgY29uc3QgZmlsdGVyZWRSZWNlaXZlID0gc2VhcmNoXHJcbiAgICAgICAgPyBvcmlnaW5hbFJlY2VpdmVFbnRyaWVzLmZpbHRlcihlbnRyeSA9PlxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZSh2YWx1ZSA9PiBub3JtYWxpemUodmFsdWUpLmluY2x1ZGVzKHNlYXJjaCkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogWy4uLm9yaWdpbmFsUmVjZWl2ZUVudHJpZXNdO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBzZW5kVHJhbnNhY3Rpb25zOiB7IC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGVudHJpZXM6IGZpbHRlcmVkU2VuZCB9LFxyXG4gICAgICAgIHJlY2VpdmVUcmFuc2FjdGlvbnM6IHsgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucywgZW50cmllczogZmlsdGVyZWRSZWNlaXZlIH1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIPCflLkgS2VlcCBvbmx5IGJyYW5jaGVzIHRoYXQgaGF2ZSBhbnkgbWF0Y2hpbmcgZW50cmllc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzID1cclxuICAgICAgZmlsdGVyZWRHcm91cHMuZmlsdGVyKGcgPT5cclxuICAgICAgICBnLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGggPiAwIHx8IGcucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aCA+IDBcclxuICAgICAgKTtcclxuXHJcbiAgICAvLyBSZXNldCBncmlkcyBmb3IgdmlzaWJsZSBicmFuY2hlc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdLmZvckVhY2goKGVudHJpZXMsIGlkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRBcGkgPSB0aGlzLmdyaWRBcGlzW2luZGV4ICogMiArIGlkeF07XHJcbiAgICAgICAgaWYgKGdyaWRBcGkpIHtcclxuICAgICAgICAgIGdyaWRBcGkuc2V0Um93RGF0YShlbnRyaWVzKTtcclxuICAgICAgICAgIGlmIChncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKSBncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQsIGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ3JpZEFwaXNbaWRdID0gcGFyYW1zLmFwaTtcclxuICAgIHRoaXMuZ3JpZENvbHVtbkFwaXNbaWRdID0gcGFyYW1zLmNvbHVtbkFwaTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b1NpemVBbGxDb2x1bW5zKGlkKSwgMTAwKTtcclxuICB9XHJcblxyXG5cclxuICBvbkdyaWRTaXplQ2hhbmdlZChwYXJhbXM6IGFueSwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hdXRvU2l6ZUFsbENvbHVtbnMoaWQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGF1dG9TaXplQWxsQ29sdW1ucyhpZDogbnVtYmVyLCBza2lwSGVhZGVyOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGNvbHVtbkFwaSA9IHRoaXMuZ3JpZENvbHVtbkFwaXNbaWRdO1xyXG4gICAgaWYgKCFjb2x1bW5BcGkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbGxDb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb2x1bW5BcGkuZ2V0Q29sdW1ucygpLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGFsbENvbHVtbklkcy5wdXNoKGNvbHVtbi5nZXRJZCgpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtbkFwaS5hdXRvU2l6ZUNvbHVtbnMoYWxsQ29sdW1uSWRzLCBza2lwSGVhZGVyKTtcclxuICB9XHJcblxyXG5cclxuICBmb3JtYXROdW1iZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XHJcblxyXG4gICAgY29uc3QgZmllbGQgPSBwYXJhbXMuY29sRGVmLmZpZWxkO1xyXG5cclxuICAgIGlmIChmaWVsZCA9PT0gJ3NldHRsZW1lbnRSYXRlJykge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCg4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBhcmFtcy52YWx1ZSkudG9GaXhlZCgzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9QZGYoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCB0aXRsZSA9ICdBY2NvdW50aW5nIFJlcG9ydCc7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC5wZGYnO1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgJiBUaW1lIDogJywgYCR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gXSxcclxuICAgIF07XHJcbiAgICAvLyAvLyAtLS0gc2VhcmNoIGNyaXRlcmlhIC0tLVxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLnNlYXJjaENyaXRlcmlhO1xyXG5cclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNzAwLCAyMTBdIH0pO1xyXG5cclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDg7XHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gMTU7XHJcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcclxuXHJcbiAgICAvLyBMb2dvXHJcbiAgICBpZiAodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10pIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZVsnbG9nb0Jhc2U2NCddLCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgcGFnZVdpZHRoIC8gMiwgdGl0bGVZLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiA3O1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnRleHQobGFiZWwsIDE1LCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSA/PyAnJywgMTUgKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogNyArIDU7XHJcblxyXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAvLyAtLS0gZHJhdyBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnRleHQoJ1NlYXJjaCBDcml0ZXJpYTotJywgbWFyZ2luTGVmdCwgY3VycmVudFkpO1xyXG4gICAgY3VycmVudFkgKz0gODtcclxuXHJcbiAgICBjb25zdCByb3dIZWlnaHRQZXJMaW5lID0gNjtcclxuICAgIGNvbnN0IG1pbkdhcCA9IDI7IC8vIGdhcCBiZXR3ZWVuIGtleSBhbmQgdmFsdWVcclxuICAgIGNvbnN0IGJldHdlZW5Db2x1bW5zR2FwID0gMTU7IC8vIGdhcCBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGNvbHVtbnMgKHlvdSBjYW4gdHVuZSB0aGlzKVxyXG4gICAgY29uc3QgcGFnZUNvbnRlbnRXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAtIDIgKiBtYXJnaW5MZWZ0O1xyXG5cclxuICAgIC8vIC0tLSBoZWxwZXIgZnVuY3Rpb24gdG8gbWVhc3VyZSB0b3RhbCB3aWR0aCBvZiBhIGtleS12YWx1ZSBwYWlyIC0tLVxyXG4gICAgY29uc3QgbWVhc3VyZVBhaXJXaWR0aCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgY29uc3QgdmFsdWVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodmFsdWUpO1xyXG4gICAgICByZXR1cm4ga2V5V2lkdGggKyBtaW5HYXAgKyB2YWx1ZVdpZHRoO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyAtLS0gY2FsY3VsYXRlIG1heCB3aWR0aCBvZiBsZWZ0IGNvbHVtbiBwYWlycyBkeW5hbWljYWxseSAtLS1cclxuICAgIGxldCBtYXhMZWZ0UGFpcldpZHRoID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoQ3JpdGVyaWEubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2ldKSB7XHJcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gc2VhcmNoQ3JpdGVyaWFbaV07XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSBtZWFzdXJlUGFpcldpZHRoKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIGlmICh3aWR0aCA+IG1heExlZnRQYWlyV2lkdGgpIG1heExlZnRQYWlyV2lkdGggPSB3aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBjb21wdXRlIHdoZXJlIHJpZ2h0IGNvbHVtbiBzaG91bGQgc3RhcnQgLS0tXHJcbiAgICBjb25zdCBsZWZ0Q29sdW1uU3RhcnQgPSBtYXJnaW5MZWZ0O1xyXG4gICAgY29uc3QgcmlnaHRDb2x1bW5TdGFydCA9IGxlZnRDb2x1bW5TdGFydCArIG1heExlZnRQYWlyV2lkdGggKyBiZXR3ZWVuQ29sdW1uc0dhcDtcclxuXHJcbiAgICAvLyAtLS0gcHJpbnQgc2VhcmNoIGNyaXRlcmlhIGR5bmFtaWNhbGx5IC0tLVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hDcml0ZXJpYS5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICBsZXQgbWF4TGluZUNvdW50ID0gMTtcclxuXHJcbiAgICAgIC8vIExlZnQgY29sdW1uXHJcbiAgICAgIGlmIChzZWFyY2hDcml0ZXJpYVtpXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGtleSwgbGVmdENvbHVtblN0YXJ0LCBjdXJyZW50WSk7XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgY29uc3Qga2V5V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGtleSArICcgJyk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVYID0gbGVmdENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSaWdodCBjb2x1bW5cclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChrZXksIHJpZ2h0Q29sdW1uU3RhcnQsIGN1cnJlbnRZKTtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgICBjb25zdCBrZXlXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoa2V5ICsgJyAnKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVggPSByaWdodENvbHVtblN0YXJ0ICsga2V5V2lkdGggKyBtaW5HYXA7XHJcbiAgICAgICAgZG9jLnRleHQodmFsdWUsIHZhbHVlWCwgY3VycmVudFkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyZW50WSArPSByb3dIZWlnaHRQZXJMaW5lO1xyXG4gICAgfVxyXG4gICAgY3VycmVudFkgKz0gODtcclxuICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgIC8vIEJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG5cclxuICAgICAgY29uc3QgYnJhbmNoVGV4dCA9IGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gO1xyXG4gICAgICBkb2MudGV4dChicmFuY2hUZXh0LCAxNSwgY3VycmVudFkpO1xyXG4gICAgICBjdXJyZW50WSArPSA3O1xyXG5cclxuICAgICAgLy8gTG9vcCBzdWJncm91cHMgKFNlbmQgKyBSZWNlaXZlKVxyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJHcm91cC5lbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQoYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCwgMTUsIGN1cnJlbnRZKTtcclxuICAgICAgICBjdXJyZW50WSArPSA1O1xyXG5cclxuICAgICAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMucHJlcGFyZUFjY291bnRpbmdUYWJsZShzdWJHcm91cC5lbnRyaWVzKTtcclxuXHJcbiAgICAgICAgKGRvYyBhcyBhbnkpLmF1dG9UYWJsZSh7XHJcbiAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICBib2R5OiByb3dzLFxyXG4gICAgICAgICAgc3RhcnRZOiBjdXJyZW50WSxcclxuICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLCB0ZXh0Q29sb3I6IDAsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLCBmb250U2l6ZTogOSwgaGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5U3R5bGVzOiB7IGZvbnRTaXplOiA4LCBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSwgdGV4dENvbG9yOiBbMCwgMCwgMF0gfSxcclxuICAgICAgICAgIHN0eWxlczogeyBjZWxsUGFkZGluZzogMiwgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLCBtaW5DZWxsSGVpZ2h0OiA2IH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZID0gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZICsgMTA7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcGFnZUNvdW50ID0gKGRvYyBhcyBhbnkpLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhZ2VDb3VudDsgaSsrKSB7XHJcbiAgICAgIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwiYm9sZFwiKTtcclxuICAgICAgZG9jLnNldFBhZ2UoaSk7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcclxuICAgICAgZG9jLnNldFRleHRDb2xvcigxMDApO1xyXG5cclxuICAgICAgY29uc3QgZm9vdGVyWSA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSA2O1xyXG5cclxuICAgICAgZG9jLnRleHQoXHJcbiAgICAgICAgYFBhZ2UgJHtpfSBvZiAke3BhZ2VDb3VudH1gLFxyXG4gICAgICAgIHBhZ2VXaWR0aCAtIDE1LFxyXG4gICAgICAgIGZvb3RlclksXHJcbiAgICAgICAgeyBhbGlnbjogJ3JpZ2h0JyB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZG9jLnNhdmUoZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0V4Y2VsKCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGl0bGUgPSAnQWNjb3VudGluZyBSZXBvcnQnO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQueGxzeCc7XHJcblxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdBY2NvdW50aW5nIFJlcG9ydCcpO1xyXG4gICAgbGV0IGN1cnJlbnRSb3cgPSAxO1xyXG5cclxuICAgIC8vIExvZ29cclxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NCkge1xyXG4gICAgICBjb25zdCBiYXNlNjREYXRhID0gdGhpcy5leHBvcnRTZXJ2aWNlLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgIH0pO1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwgeyB0bDogeyBjb2w6IDAsIHJvdzogMCB9LCBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9LCBlZGl0QXM6ICdvbmVDZWxsJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaXRsZVxyXG4gICAgY29uc3QgdGl0bGVSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3cpO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS52YWx1ZSA9IHRpdGxlO1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gICAgdGl0bGVSb3cuZ2V0Q2VsbCg2KS5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2xlZnQnIH07XHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgRiR7Y3VycmVudFJvd306SiR7Y3VycmVudFJvd31gKTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMztcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxyXG4gICAgICBbJ1JlcG9ydCBVc2VyICYgVGltZSA6ICcsIGAke3RoaXMucmVwb3J0VXNlcn1AJHt0aGlzLnJlcG9ydFRpbWV9YF0sXHJcbiAgICBdO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICByb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiBgJHtsYWJlbH06IGAsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgaGVhZGluZyAtLS1cclxuICAgIC8vIC0tLSBIZWFkaW5nIC0tLVxyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoY3VycmVudFJvdywgMSwgY3VycmVudFJvdywgOCk7XHJcbiAgICBjb25zdCBoZWFkaW5nQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGN1cnJlbnRSb3csIDEpO1xyXG4gICAgaGVhZGluZ0NlbGwudmFsdWUgPSAnU2VhcmNoIENyaXRlcmlhOi0nO1xyXG4gICAgaGVhZGluZ0NlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTIgfTtcclxuICAgIGhlYWRpbmdDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuICAgIGN1cnJlbnRSb3cgKz0gMjtcclxuXHJcbiAgICAvLyAtLS0gRHJhdyBwYWlycyBkeW5hbWljYWxseSAodHdvIHBlciByb3cpIC0tLVxyXG4gICAgY29uc3QgbGVmdENvbEVuZCA9IDQ7IC8vIGNvbHVtbnMgMeKAkzQgZm9yIGxlZnQgcGFpclxyXG4gICAgY29uc3QgcmlnaHRDb2xTdGFydCA9IDU7IC8vIGNvbHVtbnMgNeKAkzggZm9yIHJpZ2h0IHBhaXJcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuXHJcbiAgICAgIC8vIExlZnQgcGFpclxyXG4gICAgICBpZiAoc2VhcmNoQ3JpdGVyaWFbaV0pIHtcclxuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBzZWFyY2hDcml0ZXJpYVtpXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCAxLCByb3cubnVtYmVyLCBsZWZ0Q29sRW5kKTtcclxuICAgICAgICBjb25zdCBsZWZ0Q2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgICAgIGxlZnRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgbGVmdENlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIHdyYXBUZXh0OiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJpZ2h0IHBhaXJcclxuICAgICAgaWYgKHNlYXJjaENyaXRlcmlhW2kgKyAxXSkge1xyXG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHNlYXJjaENyaXRlcmlhW2kgKyAxXTtcclxuICAgICAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhyb3cubnVtYmVyLCByaWdodENvbFN0YXJ0LCByb3cubnVtYmVyLCByaWdodENvbFN0YXJ0ICsgMyk7XHJcbiAgICAgICAgY29uc3QgcmlnaHRDZWxsID0gcm93LmdldENlbGwocmlnaHRDb2xTdGFydCk7XHJcbiAgICAgICAgcmlnaHRDZWxsLnZhbHVlID0geyByaWNoVGV4dDogW3sgdGV4dDoga2V5ICsgJyAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LCB7IHRleHQ6IHZhbHVlIH1dIH07XHJcbiAgICAgICAgcmlnaHRDZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCB3cmFwVGV4dDogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgLy8gQnJhbmNoZXNcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgYnJhbmNoUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICBicmFuY2hSb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgeyB0ZXh0OiAnQnJhbmNoIChOYW1lICYgQ29kZSk6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IGdyb3VwLmJyYW5jaE5hbWVBbmRDb2RlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgIC8vIExvb3Agc3ViZ3JvdXBzXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJHcm91cFJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICBzdWJHcm91cFJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiAnU3ViIEdyb3VwOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IHN1Ykdyb3VwLnN1Ykdyb3VwTmFtZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgICAvLyBIZWFkZXJzXHJcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLnByZXBhcmVBY2NvdW50aW5nVGFibGUoc3ViR3JvdXAuZW50cmllcyk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgICAgICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgICAgICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgICAgICAgIGNlbGwuYm9yZGVyID0geyB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9IH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFJvd3NcclxuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgICByLmZvckVhY2goKHZhbCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICBjZWxsLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXV0by1hZGp1c3QgY29sdW1uIHdpZHRocyAoaW5jbHVkaW5nIFNyIE5vKVxyXG4gICAgY29uc3QgYWxsSGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcbiAgICBhbGxIZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyLmxlbmd0aDsgLy8gc3RhcnQgd2l0aCBoZWFkZXIgbGVuZ3RoXHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgLy8gU3IgTm8gY29sdW1uIChpID0gMCkgaXMganVzdCBudW1iZXJzXHJcbiAgICAgICAgICAgIGxldCB2YWwgPSBpID09PSAwID8gKHN1Ykdyb3VwLmVudHJpZXMuaW5kZXhPZihlbnRyeSkgKyAxKS50b1N0cmluZygpIDogKGVudHJ5W3RoaXMuY29sdW1uRGVmc1tpIC0gMV0/LmZpZWxkXSA/PyAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHZhbC50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgbWF4TGVuZ3RoID0gbGVuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPSBtYXhMZW5ndGggKyA1OyAvLyBwYWRkaW5nXHJcbiAgICB9KTtcclxuXHJcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFjY291bnRpbmdUYWJsZShkYXRhOiBhbnlbXSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjID0+IGMuaGVhZGVyTmFtZSldO1xyXG5cclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzOiBbXSB9OyAvLyByZXR1cm4gaGVhZGVycyBvbmx5LCBlbXB0eSByb3dzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyb3csIGkpID0+IHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICBpICsgMSxcclxuICAgICAgICAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICBsZXQgdmFsID0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgICAgICBpZiAodmFsID09IG51bGwpIHJldHVybiAnJztcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvQ3N2KCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQuY3N2JztcclxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcm93cy5wdXNoKCdSZXBvcnQgVGl0bGU6IEFjY291bnRpbmcgUmVwb3J0Jyk7XHJcbiAgICByb3dzLnB1c2goJycpO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgUGVyaW9kOiAke3RoaXMucmVwb3J0UGVyaW9kfWApO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgVXNlciAmIFRpbWU6ICR7dGhpcy5yZXBvcnRVc2VyfUAke3RoaXMucmVwb3J0VGltZX1gKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcblxyXG4gICAgLy8gLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhID0gdGhpcy5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICBpZiAoc2VhcmNoQ3JpdGVyaWE/Lmxlbmd0aCkge1xyXG4gICAgICByb3dzLnB1c2goJ1NlYXJjaCBDcml0ZXJpYTotJyk7XHJcblxyXG4gICAgICAvLyBjYWxjdWxhdGUgbWF4IGxlbmd0aCBvZiBsZWZ0IGtleS12YWx1ZSBwYWlycyBmb3IgcGFkZGluZ1xyXG4gICAgICBjb25zdCBtYXhMZWZ0TGVuZ3RoID0gTWF0aC5tYXgoLi4uc2VhcmNoQ3JpdGVyaWEubWFwKChbaywgdl0pID0+IChrICsgJyAnICsgdikubGVuZ3RoKSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaENyaXRlcmlhLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHNlYXJjaENyaXRlcmlhW2ldO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc2VhcmNoQ3JpdGVyaWFbaSArIDFdO1xyXG5cclxuICAgICAgICBjb25zdCBsZWZ0VGV4dCA9IGxlZnQgPyBgJHtsZWZ0WzBdfSAke2xlZnRbMV19YC5wYWRFbmQobWF4TGVmdExlbmd0aCArIDUsICcgJykgOiAnJztcclxuICAgICAgICBjb25zdCByaWdodFRleHQgPSByaWdodCA/IGAke3JpZ2h0WzBdfSAke3JpZ2h0WzFdfWAgOiAnJztcclxuXHJcbiAgICAgICAgLy8gIEVhY2ggcm93IGluIHNpbmdsZSBDU1Ygcm93OyBmaXJzdCBhbmQgc2Vjb25kIHBhaXIgc2VwYXJhdGVkIGJ5IGEgY29sdW1uXHJcbiAgICAgICAgcm93cy5wdXNoKGBcIiR7bGVmdFRleHR9JHtyaWdodFRleHR9XCJgKTtcclxuICAgICAgfVxyXG4gICAgICByb3dzLnB1c2goJycpOyAvLyBibGFuayBsaW5lIGFmdGVyIHNlYXJjaCBjcml0ZXJpYVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgcm93cy5wdXNoKGBCcmFuY2ggKE5hbWUgJiBDb2RlKTogJHtncm91cC5icmFuY2hOYW1lQW5kQ29kZX1gKTtcclxuXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goYFN1YiBHcm91cDogJHtzdWJHcm91cC5zdWJHcm91cE5hbWV9YCk7XHJcblxyXG4gICAgICAgIC8vICBBZGQgXCJTciBOb1wiIGF0IHRoZSBiZWdpbm5pbmcgb2YgaGVhZGVyc1xyXG4gICAgICAgIHJvd3MucHVzaChbJ1wiU3IgTm9cIicsIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IGBcIiR7Y29sLmhlYWRlck5hbWV9XCJgKV0uam9pbignLCcpKTtcclxuXHJcbiAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAvLyAgQWRkIHNlcmlhbCBudW1iZXIgYXQgc3RhcnQgb2YgZWFjaCByb3dcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IFtcclxuICAgICAgICAgICAgKGlkeCArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBlbnRyeVtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIGlmIChbJ2Ftb3VudFBhaWQnLCAnc2VydmljZUZlZScsICd0YXgnLCAncHJpbmNpcGxlU2VuZEFtb3VudCcsICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5J10uaW5jbHVkZXMoY29sLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbH1cImA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdLmpvaW4oJywnKTtcclxuICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goJycpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcm93cy5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBwYXlsb2FkPy5tb2RhbCB8fCBwYXlsb2FkO1xyXG5cclxuICAgIGNvbnN0IHJlcTogQWNjb3VudGluZ1JlcG9ydFJlcXVlc3QgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9kYWwuZnJvbURhdGUsIC8vIHl5eXktTU0tZGQgZnJvbSB0aGUgZmlsdGVyXHJcbiAgICAgIGVuZERhdGU6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgc2VuZENvdW50cnlDb2RlOiBtb2RhbC5zZW5kQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgcmVjdkNvdW50cnlDb2RlOiBtb2RhbC5yZWNlaXZlQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogbW9kYWwuY2xpZW50ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIiksXHJcbiAgICAgIHBheW91dEN1cnJlbmN5OiBtb2RhbC5jdXJyZW5jeSA/PyAnQUxMJyxcclxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiBtb2RhbC5wcm9kdWN0ID8/ICdBTEwnLFxyXG4gICAgICBicmFuY2hDb2RlOiBtb2RhbC5icmFuY2ggPz8gJ0FMTCcsXHJcbiAgICAgIGNvbXBhbnlDb2RlOiAnQUxMJyAvLyBvciAnQkgnIGlmIHlvdXIgQVBJIHJlcXVpcmVzIGl0IHNwZWNpZmljYWxseVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhID0gcGF5bG9hZC5zZWFyY2hDcml0ZXJpYTtcclxuXHJcbiAgICB0aGlzLmdldEFjY291bnRpbmdSZXBvcnQocmVxKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZvcm1WYWxpZChpc1ZhbGlkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gaXNWYWxpZDtcclxuICB9XHJcblxyXG59XHJcbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIiAoZm9ybVZhbGlkKT1cImhhbmRsZUZvcm1WYWxpZCgkZXZlbnQpXCI+PC9saWItc2VhcmNoLWZpbHRlcj5cclxuXHJcbjxhcHAtbG9hZGVyIGNsYXNzPVwiXCIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsIT11bmRlZmluZWQgJiYgbG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZSAmJiAhbm9EYXRhRm91bmQgJiYgaXNGb3JtVmFsaWRcIlxyXG4gIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMzBweDtcIj5cclxuXHJcbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCIgW21ldGFEYXRhT25lXT1cImxlZnREYXRhXCJcclxuICAgIFttZXRhRGF0YVR3b109XCJyaWdodERhdGFcIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIiAoc2VhcmNoRXZlbnQpPVwib25TZWFyY2goJGV2ZW50KVwiPjwvbGliLW1ldGFkYXRhPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoXCI+XHJcbiAgICA8bmdiLWFjY29yZGlvbiAjYWNjPVwibmdiQWNjb3JkaW9uXCIgW2Nsb3NlT3RoZXJzXT1cImZhbHNlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFjY291bnRpbmdSZXBvcnRNb2RlbD8uYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPG5nYi1wYW5lbCBbaWRdPVwiJ3BhbmVsLScgKyBpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGFuZWwtY2xzXCI+XHJcbiAgICAgICAgICAgICAge3sgZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgICAgPCEtLSBTZW5kIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJncm91cC5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgW2RlZmF1bHRTaXplXT1cIicxNSdcIlxyXG4gICAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMl1cIj5cclxuICAgICAgICAgICAgICAgIDwvbGliLXBhZ2Utc2l6ZS1zZWxlY3Rvcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIHRyYW5zYWN0aW9uLWdyaWQgZ3JpZC1zaXplXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQsIGkgKiAyKVwiIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmVjZWl2ZSBUcmFuc2FjdGlvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ViZ3JvdXBjb2x1bW5cIj57eyBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLnN1Ykdyb3VwTmFtZSB9fTwvaDY+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcclxuICAgICAgICAgICAgICAgICAgW2dyaWRBcGldPVwiZ3JpZEFwaXNbaSAqIDIgKyAxXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZCBncmlkLXNpemVcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXCIgW3Jvd0hlaWdodF09XCIyMFwiIFtoZWFkZXJIZWlnaHRdPVwiMjRcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudCwgaSAqIDIgKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgIChncmlkU2l6ZUNoYW5nZWQpPVwib25HcmlkU2l6ZUNoYW5nZWQoJGV2ZW50LCBpICogMilcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZ2ItcGFuZWw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJub0RhdGFGb3VuZCAmJiBsb2FkaW5nU3RhdGUhPUNvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+XHJcbiAgTm8gRGF0YSBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cclxuPC9kaXY+Il19
|