ngx-st-tables 18.0.56 → 18.0.57
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.
|
@@ -99,6 +99,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
99
99
|
this.data = input([]);
|
|
100
100
|
this.setNewDataWithoutRefresh = input(false);
|
|
101
101
|
this.compactView = input(false);
|
|
102
|
+
this.actionRowWidth = input('90px');
|
|
102
103
|
this.loadData = output();
|
|
103
104
|
this.saveEditedRow = output();
|
|
104
105
|
this.saveCreatedRow = output();
|
|
@@ -805,7 +806,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
805
806
|
type: 'actions-row-editing',
|
|
806
807
|
sort: false,
|
|
807
808
|
filter: false,
|
|
808
|
-
width:
|
|
809
|
+
width: this.actionRowWidth(),
|
|
809
810
|
selectColumnLabel: this.stTableTranslations.getTranslations()().rowActionsColumnLabel,
|
|
810
811
|
};
|
|
811
812
|
this.initLocalColumns.update(columns => {
|
|
@@ -945,7 +946,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
945
946
|
}
|
|
946
947
|
}
|
|
947
948
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MaterialTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.StSnackBarService }, { token: i2.StTablesTranslationsService }, { token: i3.StDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
948
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MaterialTableComponent, selector: "ngx-st-material-table", inputs: { showGlobalSearch: { classPropertyName: "showGlobalSearch", publicName: "showGlobalSearch", isSignal: true, isRequired: false, transformFunction: null }, tableTitle: { classPropertyName: "tableTitle", publicName: "tableTitle", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, dataLength: { classPropertyName: "dataLength", publicName: "dataLength", isSignal: true, isRequired: false, transformFunction: null }, allowPickColumns: { classPropertyName: "allowPickColumns", publicName: "allowPickColumns", isSignal: true, isRequired: false, transformFunction: null }, allowReorderColumns: { classPropertyName: "allowReorderColumns", publicName: "allowReorderColumns", isSignal: true, isRequired: false, transformFunction: null }, localStorageName: { classPropertyName: "localStorageName", publicName: "localStorageName", isSignal: true, isRequired: false, transformFunction: null }, lazyLoading: { classPropertyName: "lazyLoading", publicName: "lazyLoading", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, initColumns: { classPropertyName: "initColumns", publicName: "initColumns", isSignal: true, isRequired: false, transformFunction: null }, rowClickAction: { classPropertyName: "rowClickAction", publicName: "rowClickAction", isSignal: true, isRequired: false, transformFunction: null }, allowEditRow: { classPropertyName: "allowEditRow", publicName: "allowEditRow", isSignal: true, isRequired: false, transformFunction: null }, allowDeleteInEditRow: { classPropertyName: "allowDeleteInEditRow", publicName: "allowDeleteInEditRow", isSignal: true, isRequired: false, transformFunction: null }, allowEditInEditRow: { classPropertyName: "allowEditInEditRow", publicName: "allowEditInEditRow", isSignal: true, isRequired: false, transformFunction: null }, showEditAllRows: { classPropertyName: "showEditAllRows", publicName: "showEditAllRows", isSignal: true, isRequired: false, transformFunction: null }, autoSaveOnChange: { classPropertyName: "autoSaveOnChange", publicName: "autoSaveOnChange", isSignal: true, isRequired: false, transformFunction: null }, canEditRowValidator: { classPropertyName: "canEditRowValidator", publicName: "canEditRowValidator", isSignal: true, isRequired: false, transformFunction: null }, canDeleteRowValidator: { classPropertyName: "canDeleteRowValidator", publicName: "canDeleteRowValidator", isSignal: true, isRequired: false, transformFunction: null }, allowSelectRow: { classPropertyName: "allowSelectRow", publicName: "allowSelectRow", isSignal: true, isRequired: false, transformFunction: null }, selectionFieldLabel: { classPropertyName: "selectionFieldLabel", publicName: "selectionFieldLabel", isSignal: true, isRequired: false, transformFunction: null }, selectRowOnlyOne: { classPropertyName: "selectRowOnlyOne", publicName: "selectRowOnlyOne", isSignal: true, isRequired: false, transformFunction: null }, selectRowValueDisplay: { classPropertyName: "selectRowValueDisplay", publicName: "selectRowValueDisplay", isSignal: true, isRequired: false, transformFunction: null }, showCreateButton: { classPropertyName: "showCreateButton", publicName: "showCreateButton", isSignal: true, isRequired: false, transformFunction: null }, createButtonLabel: { classPropertyName: "createButtonLabel", publicName: "createButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, createButtonAction: { classPropertyName: "createButtonAction", publicName: "createButtonAction", isSignal: true, isRequired: false, transformFunction: null }, disableCreateButton: { classPropertyName: "disableCreateButton", publicName: "disableCreateButton", isSignal: true, isRequired: false, transformFunction: null }, allowCreateRow: { classPropertyName: "allowCreateRow", publicName: "allowCreateRow", isSignal: true, isRequired: false, transformFunction: null }, allowExtendRow: { classPropertyName: "allowExtendRow", publicName: "allowExtendRow", isSignal: true, isRequired: false, transformFunction: null }, extendedRowTemplate: { classPropertyName: "extendedRowTemplate", publicName: "extendedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, initSelectedRow: { classPropertyName: "initSelectedRow", publicName: "initSelectedRow", isSignal: true, isRequired: false, transformFunction: null }, extraCustomFilter: { classPropertyName: "extraCustomFilter", publicName: "extraCustomFilter", isSignal: true, isRequired: false, transformFunction: null }, initFilterMethod: { classPropertyName: "initFilterMethod", publicName: "initFilterMethod", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, setNewDataWithoutRefresh: { classPropertyName: "setNewDataWithoutRefresh", publicName: "setNewDataWithoutRefresh", isSignal: true, isRequired: false, transformFunction: null }, compactView: { classPropertyName: "compactView", publicName: "compactView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loadData: "loadData", saveEditedRow: "saveEditedRow", saveCreatedRow: "saveCreatedRow", rowDeleted: "rowDeleted", selectRowChange: "selectRowChange", fieldValueChanged: "fieldValueChanged" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "rowCells", predicate: MaterialTableRowCellComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"st-material-table\">\r\n @if (isLoading()) {\r\n <div class=\"loading-spinner\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n }\r\n\r\n @if (showTable) {\r\n <st-material-table-caption\r\n [tableTitle]=\"tableTitle()\"\r\n [allowPickColumns]=\"allowPickColumns()\"\r\n [showGlobalSearch]=\"showGlobalSearch()\"\r\n [allowReorderColumns]=\"allowReorderColumns()\"\r\n [columns]=\"columns\"\r\n [initFilters]=\"initFilters\"\r\n [initGlobalSearch]=\"initGlobalSearch\"\r\n [showCreateButton]=\"showCreateButton()\"\r\n [createButtonLabel]=\"createButtonLabel()\"\r\n [createButtonAction]=\"createButtonAction()\"\r\n [allowCreateRow]=\"allowCreateRow()\"\r\n [disableCreateButton]=\"disableCreateButton()\"\r\n [extraCustomFilter]=\"extraCustomFilter()\"\r\n [creatingRow]=\"creatingRow()\"\r\n (captionDataChanged)=\"captionDataChanged($event)\"\r\n (resetTableSettings)=\"resetTableSettings()\"\r\n (addNewRow)=\"addNewRow()\"\r\n ></st-material-table-caption>\r\n }\r\n\r\n <table\r\n [ngClass]=\"{\r\n 'no-hover': !rowClickAction(),\r\n 'is-expended-table': allowExtendRow(),\r\n 'compact-view': compactView()\r\n }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n [multiTemplateDataRows]=\"allowExtendRow()\"\r\n >\r\n @for (column of selectedColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n mat-sort-header\r\n [disabled]=\"!column.sort\"\r\n >\r\n @if (column.type === 'actions-row-selecting' && !selectRowOnlyOne()) {\r\n <mat-checkbox\r\n color=\"primary\"\r\n (change)=\"toggleAllRows($event.checked)\"\r\n [checked]=\"selectedRows().length > 0 && isAllSelected()\"\r\n [indeterminate]=\"selectedRows().length > 0 && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n } @else if (\r\n column.type === 'actions-row-editing' && showEditAllRows()\r\n ) {\r\n <div class=\"row justify-content-end edit-all-rows-button\">\r\n <button\r\n mat-icon-button\r\n (click)=\"turnOnAllEditRows()\"\r\n matTooltip=\"Edit all rows\"\r\n >\r\n <mat-icon>edit_arrow_down</mat-icon>\r\n </button>\r\n </div>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = index; let j = dataIndex\"\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n >\r\n <st-material-table-row-cell\r\n [column]=\"column\"\r\n [rowData]=\"element\"\r\n [rowIndex]=\"getAbsoluteIndex(allowExtendRow() ? j : i)\"\r\n [rowDataCopy]=\"\r\n activeRowsEditing[element.id] || activeRowsCreating[element.id]\r\n \"\r\n [rowEditing]=\"\r\n !!activeRowsEditing[element.id] ||\r\n !!activeRowsCreating[element.id]\r\n \"\r\n [rowIsSelected]=\"isRowSelected(element)\"\r\n [rowIsExpanded]=\"expandedRowIndex() === (allowExtendRow() ? j : i)\"\r\n [canEditRowValidator]=\"canEditRowValidator()\"\r\n [canDeleteRowValidator]=\"canDeleteRowValidator()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [isFirstEditableColumn]=\"isFirstEditableColumn(column)\"\r\n [autoSaveOnChange]=\"autoSaveOnChange()\"\r\n [allowEditRow]=\"allowEditRow()\"\r\n [allowEditInEditRow]=\"allowEditInEditRow()\"\r\n [allowDeleteInEditRow]=\"allowDeleteInEditRow()\"\r\n [fieldError]=\"validationErrors[element.id]?.[column.field]\"\r\n [mobileView]=\"mobileView()\"\r\n (editRowEmitter)=\"editRow(element, column)\"\r\n (deleteRowEmitter)=\"\r\n deleteRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (saveEditRowEmitter)=\"\r\n saveEditRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (cancelEditRowEmitter)=\"cancelEditRow(element, column)\"\r\n (selectRowChange)=\"selectRowChanged($event, element)\"\r\n (fieldValueChanged)=\"\r\n onFieldValueChanged(\r\n element,\r\n column,\r\n $event.value,\r\n allowExtendRow() ? j : i\r\n )\r\n \"\r\n ></st-material-table-row-cell>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = dataIndex\"\r\n [attr.colspan]=\"selectedColumnsString.length\"\r\n >\r\n <div\r\n class=\"expanded-element-detail-wrapper\"\r\n [@detailExpand]=\"expandedRowIndex() === i ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"expanded-element-detail\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"extendedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ data: element, rowIndex: expandedRowIndex() }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"selectedColumnsString\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: selectedColumnsString; let i = dataIndex\"\r\n [class.expanded-expanded-row]=\"expandedRowIndex() === i\"\r\n (click)=\"clickRowAction(row, i)\"\r\n ></tr>\r\n @if (allowExtendRow()) {\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"extended-detail-row\"\r\n ></tr>\r\n }\r\n </table>\r\n <mat-paginator\r\n [showFirstLastButtons]=\"true\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n [length]=\"dataLength()\"\r\n ></mat-paginator>\r\n <st-material-table-selected-rows\r\n [allowSelectRow]=\"allowSelectRow()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [selectedRows]=\"selectedRows()\"\r\n [selectionFieldLabel]=\"selectionFieldLabel()\"\r\n [selectRowValueDisplay]=\"selectRowValueDisplay()\"\r\n (removeSelectedRow)=\"onRemoveSelectedRow($event)\"\r\n ></st-material-table-selected-rows>\r\n</div>\r\n", styles: [".st-material-table{position:relative}.st-material-table .loading-spinner{position:absolute;top:0;left:0;width:100%;height:100%;background:#00000026;z-index:1;display:flex;justify-content:center}.st-material-table .loading-spinner mat-spinner{margin-top:2rem}.st-material-table .edit-all-rows-button{width:98px}\n", ".st-material-table .search-form button{height:40px}.st-material-table .search-form mat-form-field:first-child{padding-left:0}.st-material-table .search-form mat-form-field:last-child{padding-right:0}.st-material-table .search-form .clear{padding:0}.st-material-table .search-form .clear mat-icon{height:20px;width:20px;font-size:20px;cursor:pointer}.st-material-table table{background-color:transparent;width:100%;box-shadow:none}.st-material-table table.is-expended-table>tbody>tr:nth-child(odd)>td{border-bottom:0!important}.st-material-table table th.mat-mdc-header-cell,.st-material-table table td.mat-mdc-cell,.st-material-table table td.mat-mdc-footer-cell{padding:0 2px;line-height:1.1rem}.st-material-table table th.mat-mdc-header-cell:first-of-type,.st-material-table table td.mat-mdc-cell:first-of-type,.st-material-table table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}.st-material-table table td.mat-mdc-cell.mat-column-actions-row-selecting,.st-material-table table th.mat-mdc-header-cell.mat-column-actions-row-selecting{padding-left:0}.st-material-table table th.mat-mdc-header-cell:last-of-type,.st-material-table table td.mat-mdc-cell:last-of-type,.st-material-table table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}.st-material-table table thead tr{background-color:#fff9c4;height:40px!important}.st-material-table table thead tr th{border-color:#fdd835;font-size:.9rem;font-weight:500;color:#424242;padding:0 2px}.st-material-table table tbody{background-color:transparent!important}.st-material-table table tbody>tr{cursor:pointer}.st-material-table table tbody>tr:hover{background-color:#f5f5f5}.st-material-table table tbody>tr.active{background-color:#a5d6a7}.st-material-table table tbody>tr.active td{border-bottom-color:#81c784!important}.st-material-table table tbody>tr.disabled{cursor:not-allowed}.st-material-table table tbody>tr.disabled:hover{background-color:inherit!important}.st-material-table table tbody>tr.detail-row{height:0;cursor:default}.st-material-table table tbody>tr.detail-row:hover{background-color:transparent}.st-material-table table tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}.st-material-table table tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}.st-material-table table tbody>tr.extended-detail-row{height:0;cursor:default}.st-material-table table tbody>tr.expanded-element-row:not(.expanded-expanded-row):hover{background-color:transparent}.st-material-table table tbody>tr.expanded-element-row td{border-bottom-width:0}.st-material-table table tbody>tr.expanded-element-row td>div{max-height:300px;overflow:hidden;overflow-y:auto}.st-material-table table tbody>tr .expanded-element-detail{overflow:hidden;display:flex}.st-material-table table tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}.st-material-table table tbody>tr:last-child td{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, .12))!important;border-bottom-width:var(--mat-table-row-item-outline-width, 1px)!important;border-bottom-style:solid!important}.st-material-table table .mat-column-active{width:48px}.st-material-table table.no-hover tbody>tr{cursor:default}.st-material-table table.no-hover tbody>tr.active{background-color:transparent!important}.st-material-table table.no-hover tbody>tr.active>td{border-bottom-color:#0000001f!important}.st-material-table table.no-hover tbody>tr:hover{background-color:transparent!important}.st-material-table table.no-hover tbody>tr:hover>td{border-bottom-color:#0000001f!important}.st-material-table table.admin-table .actions-cell{width:100px}.st-material-table table.compact-view tbody tr{height:40px!important}table.st-material-table{background-color:transparent;width:100%;box-shadow:none}table.st-material-table.is-expended-table>tbody>tr:nth-child(odd)>td{border-bottom:0!important}table.st-material-table th.mat-mdc-header-cell,table.st-material-table td.mat-mdc-cell,table.st-material-table td.mat-mdc-footer-cell{padding:0 2px;line-height:1.1rem}table.st-material-table th.mat-mdc-header-cell:first-of-type,table.st-material-table td.mat-mdc-cell:first-of-type,table.st-material-table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}table.st-material-table td.mat-mdc-cell.mat-column-actions-row-selecting,table.st-material-table th.mat-mdc-header-cell.mat-column-actions-row-selecting{padding-left:0}table.st-material-table th.mat-mdc-header-cell:last-of-type,table.st-material-table td.mat-mdc-cell:last-of-type,table.st-material-table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}table.st-material-table thead tr{background-color:#fff9c4;height:40px!important}table.st-material-table thead tr th{border-color:#fdd835;font-size:.9rem;font-weight:500;color:#424242;padding:0 2px}table.st-material-table tbody{background-color:transparent!important}table.st-material-table tbody>tr{cursor:pointer}table.st-material-table tbody>tr:hover{background-color:#f5f5f5}table.st-material-table tbody>tr.active{background-color:#a5d6a7}table.st-material-table tbody>tr.active td{border-bottom-color:#81c784!important}table.st-material-table tbody>tr.disabled{cursor:not-allowed}table.st-material-table tbody>tr.disabled:hover{background-color:inherit!important}table.st-material-table tbody>tr.detail-row{height:0;cursor:default}table.st-material-table tbody>tr.detail-row:hover{background-color:transparent}table.st-material-table tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table.st-material-table tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table.st-material-table tbody>tr.extended-detail-row{height:0;cursor:default}table.st-material-table tbody>tr.expanded-element-row:not(.expanded-expanded-row):hover{background-color:transparent}table.st-material-table tbody>tr.expanded-element-row td{border-bottom-width:0}table.st-material-table tbody>tr.expanded-element-row td>div{max-height:300px;overflow:hidden;overflow-y:auto}table.st-material-table tbody>tr .expanded-element-detail{overflow:hidden;display:flex}table.st-material-table tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table.st-material-table tbody>tr:last-child td{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, .12))!important;border-bottom-width:var(--mat-table-row-item-outline-width, 1px)!important;border-bottom-style:solid!important}table.st-material-table .mat-column-active{width:48px}table.st-material-table.no-hover tbody>tr{cursor:default}table.st-material-table.no-hover tbody>tr.active{background-color:transparent!important}table.st-material-table.no-hover tbody>tr.active>td{border-bottom-color:#0000001f!important}table.st-material-table.no-hover tbody>tr:hover{background-color:transparent!important}table.st-material-table.no-hover tbody>tr:hover>td{border-bottom-color:#0000001f!important}table.st-material-table.admin-table .actions-cell{width:100px}table.st-material-table.compact-view tbody tr{height:40px!important}.dark-theme table.st-material-table thead tr{background-color:#5e4803!important}.dark-theme table.st-material-table thead tr th{border-color:#816204!important;color:#e0e0e0!important}.dark-theme table.st-material-table tbody>tr:hover{background-color:#ffffff08!important}.dark-theme table.st-material-table tbody>tr.active{background-color:#1121114d!important}.dark-theme table.st-material-table tbody>tr.active>td{border-bottom-color:#1121114d!important}.dark-theme .st-material-table table thead tr{background-color:#5e4803!important}.dark-theme .st-material-table table thead tr th{border-color:#816204!important;color:#e0e0e0!important}.dark-theme .st-material-table table tbody>tr:hover{background-color:#ffffff08!important}.dark-theme .st-material-table table tbody>tr.active{background-color:#1121114d!important}.dark-theme .st-material-table table tbody>tr.active>td{border-bottom-color:#1121114d!important}.dark-theme .st-material-table mat-paginator{background-color:transparent!important}.dark-theme .st-material-table .reorder-column-list .reorder-column-element{background-color:#424242!important;color:#eee!important}.dark-theme .st-material-table .reorder-column-list .reorder-column-element p,.dark-theme .st-material-table .reorder-column-list .reorder-column-element mat-icon{color:#eee!important}.dark-theme .st-material-table .filter .filter-title{color:#eee!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i13.MaterialTableCaptionComponent, selector: "st-material-table-caption", inputs: ["showGlobalSearch", "tableTitle", "allowPickColumns", "allowReorderColumns", "initGlobalSearch", "initFilters", "showCreateButton", "createButtonLabel", "createButtonAction", "allowCreateRow", "disableCreateButton", "creatingRow", "extraCustomFilter", "columns"], outputs: ["captionDataChanged", "resetTableSettings", "addNewRow"] }, { kind: "component", type: i14.MaterialTableRowCellComponent, selector: "st-material-table-row-cell", inputs: ["column", "rowData", "rowIndex", "rowDataCopy", "canEditRowValidator", "canDeleteRowValidator", "selectRowOnlyOne", "isFirstEditableColumn", "autoSaveOnChange", "rowIsSelected", "rowIsExpanded", "rowEditing", "allowEditRow", "allowDeleteInEditRow", "allowEditInEditRow", "fieldError", "mobileView"], outputs: ["saveEditRowEmitter", "cancelEditRowEmitter", "editRowEmitter", "deleteRowEmitter", "selectRowChange", "fieldValueChanged"] }, { kind: "component", type: i15.MaterialTableSelectedRowsComponent, selector: "st-material-table-selected-rows", inputs: ["allowSelectRow", "selectRowOnlyOne", "selectedRows", "selectionFieldLabel", "selectRowValueDisplay"], outputs: ["removeSelectedRow"] }], animations: [
|
|
949
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MaterialTableComponent, selector: "ngx-st-material-table", inputs: { showGlobalSearch: { classPropertyName: "showGlobalSearch", publicName: "showGlobalSearch", isSignal: true, isRequired: false, transformFunction: null }, tableTitle: { classPropertyName: "tableTitle", publicName: "tableTitle", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, dataLength: { classPropertyName: "dataLength", publicName: "dataLength", isSignal: true, isRequired: false, transformFunction: null }, allowPickColumns: { classPropertyName: "allowPickColumns", publicName: "allowPickColumns", isSignal: true, isRequired: false, transformFunction: null }, allowReorderColumns: { classPropertyName: "allowReorderColumns", publicName: "allowReorderColumns", isSignal: true, isRequired: false, transformFunction: null }, localStorageName: { classPropertyName: "localStorageName", publicName: "localStorageName", isSignal: true, isRequired: false, transformFunction: null }, lazyLoading: { classPropertyName: "lazyLoading", publicName: "lazyLoading", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, initColumns: { classPropertyName: "initColumns", publicName: "initColumns", isSignal: true, isRequired: false, transformFunction: null }, rowClickAction: { classPropertyName: "rowClickAction", publicName: "rowClickAction", isSignal: true, isRequired: false, transformFunction: null }, allowEditRow: { classPropertyName: "allowEditRow", publicName: "allowEditRow", isSignal: true, isRequired: false, transformFunction: null }, allowDeleteInEditRow: { classPropertyName: "allowDeleteInEditRow", publicName: "allowDeleteInEditRow", isSignal: true, isRequired: false, transformFunction: null }, allowEditInEditRow: { classPropertyName: "allowEditInEditRow", publicName: "allowEditInEditRow", isSignal: true, isRequired: false, transformFunction: null }, showEditAllRows: { classPropertyName: "showEditAllRows", publicName: "showEditAllRows", isSignal: true, isRequired: false, transformFunction: null }, autoSaveOnChange: { classPropertyName: "autoSaveOnChange", publicName: "autoSaveOnChange", isSignal: true, isRequired: false, transformFunction: null }, canEditRowValidator: { classPropertyName: "canEditRowValidator", publicName: "canEditRowValidator", isSignal: true, isRequired: false, transformFunction: null }, canDeleteRowValidator: { classPropertyName: "canDeleteRowValidator", publicName: "canDeleteRowValidator", isSignal: true, isRequired: false, transformFunction: null }, allowSelectRow: { classPropertyName: "allowSelectRow", publicName: "allowSelectRow", isSignal: true, isRequired: false, transformFunction: null }, selectionFieldLabel: { classPropertyName: "selectionFieldLabel", publicName: "selectionFieldLabel", isSignal: true, isRequired: false, transformFunction: null }, selectRowOnlyOne: { classPropertyName: "selectRowOnlyOne", publicName: "selectRowOnlyOne", isSignal: true, isRequired: false, transformFunction: null }, selectRowValueDisplay: { classPropertyName: "selectRowValueDisplay", publicName: "selectRowValueDisplay", isSignal: true, isRequired: false, transformFunction: null }, showCreateButton: { classPropertyName: "showCreateButton", publicName: "showCreateButton", isSignal: true, isRequired: false, transformFunction: null }, createButtonLabel: { classPropertyName: "createButtonLabel", publicName: "createButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, createButtonAction: { classPropertyName: "createButtonAction", publicName: "createButtonAction", isSignal: true, isRequired: false, transformFunction: null }, disableCreateButton: { classPropertyName: "disableCreateButton", publicName: "disableCreateButton", isSignal: true, isRequired: false, transformFunction: null }, allowCreateRow: { classPropertyName: "allowCreateRow", publicName: "allowCreateRow", isSignal: true, isRequired: false, transformFunction: null }, allowExtendRow: { classPropertyName: "allowExtendRow", publicName: "allowExtendRow", isSignal: true, isRequired: false, transformFunction: null }, extendedRowTemplate: { classPropertyName: "extendedRowTemplate", publicName: "extendedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, initSelectedRow: { classPropertyName: "initSelectedRow", publicName: "initSelectedRow", isSignal: true, isRequired: false, transformFunction: null }, extraCustomFilter: { classPropertyName: "extraCustomFilter", publicName: "extraCustomFilter", isSignal: true, isRequired: false, transformFunction: null }, initFilterMethod: { classPropertyName: "initFilterMethod", publicName: "initFilterMethod", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, setNewDataWithoutRefresh: { classPropertyName: "setNewDataWithoutRefresh", publicName: "setNewDataWithoutRefresh", isSignal: true, isRequired: false, transformFunction: null }, compactView: { classPropertyName: "compactView", publicName: "compactView", isSignal: true, isRequired: false, transformFunction: null }, actionRowWidth: { classPropertyName: "actionRowWidth", publicName: "actionRowWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loadData: "loadData", saveEditedRow: "saveEditedRow", saveCreatedRow: "saveCreatedRow", rowDeleted: "rowDeleted", selectRowChange: "selectRowChange", fieldValueChanged: "fieldValueChanged" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "rowCells", predicate: MaterialTableRowCellComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"st-material-table\">\r\n @if (isLoading()) {\r\n <div class=\"loading-spinner\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n }\r\n\r\n @if (showTable) {\r\n <st-material-table-caption\r\n [tableTitle]=\"tableTitle()\"\r\n [allowPickColumns]=\"allowPickColumns()\"\r\n [showGlobalSearch]=\"showGlobalSearch()\"\r\n [allowReorderColumns]=\"allowReorderColumns()\"\r\n [columns]=\"columns\"\r\n [initFilters]=\"initFilters\"\r\n [initGlobalSearch]=\"initGlobalSearch\"\r\n [showCreateButton]=\"showCreateButton()\"\r\n [createButtonLabel]=\"createButtonLabel()\"\r\n [createButtonAction]=\"createButtonAction()\"\r\n [allowCreateRow]=\"allowCreateRow()\"\r\n [disableCreateButton]=\"disableCreateButton()\"\r\n [extraCustomFilter]=\"extraCustomFilter()\"\r\n [creatingRow]=\"creatingRow()\"\r\n (captionDataChanged)=\"captionDataChanged($event)\"\r\n (resetTableSettings)=\"resetTableSettings()\"\r\n (addNewRow)=\"addNewRow()\"\r\n ></st-material-table-caption>\r\n }\r\n\r\n <table\r\n [ngClass]=\"{\r\n 'no-hover': !rowClickAction(),\r\n 'is-expended-table': allowExtendRow(),\r\n 'compact-view': compactView()\r\n }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n [multiTemplateDataRows]=\"allowExtendRow()\"\r\n >\r\n @for (column of selectedColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n mat-sort-header\r\n [disabled]=\"!column.sort\"\r\n >\r\n @if (column.type === 'actions-row-selecting' && !selectRowOnlyOne()) {\r\n <mat-checkbox\r\n color=\"primary\"\r\n (change)=\"toggleAllRows($event.checked)\"\r\n [checked]=\"selectedRows().length > 0 && isAllSelected()\"\r\n [indeterminate]=\"selectedRows().length > 0 && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n } @else if (\r\n column.type === 'actions-row-editing' && showEditAllRows()\r\n ) {\r\n <div class=\"row justify-content-end edit-all-rows-button\">\r\n <button\r\n mat-icon-button\r\n (click)=\"turnOnAllEditRows()\"\r\n matTooltip=\"Edit all rows\"\r\n >\r\n <mat-icon>edit_arrow_down</mat-icon>\r\n </button>\r\n </div>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = index; let j = dataIndex\"\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n >\r\n <st-material-table-row-cell\r\n [column]=\"column\"\r\n [rowData]=\"element\"\r\n [rowIndex]=\"getAbsoluteIndex(allowExtendRow() ? j : i)\"\r\n [rowDataCopy]=\"\r\n activeRowsEditing[element.id] || activeRowsCreating[element.id]\r\n \"\r\n [rowEditing]=\"\r\n !!activeRowsEditing[element.id] ||\r\n !!activeRowsCreating[element.id]\r\n \"\r\n [rowIsSelected]=\"isRowSelected(element)\"\r\n [rowIsExpanded]=\"expandedRowIndex() === (allowExtendRow() ? j : i)\"\r\n [canEditRowValidator]=\"canEditRowValidator()\"\r\n [canDeleteRowValidator]=\"canDeleteRowValidator()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [isFirstEditableColumn]=\"isFirstEditableColumn(column)\"\r\n [autoSaveOnChange]=\"autoSaveOnChange()\"\r\n [allowEditRow]=\"allowEditRow()\"\r\n [allowEditInEditRow]=\"allowEditInEditRow()\"\r\n [allowDeleteInEditRow]=\"allowDeleteInEditRow()\"\r\n [fieldError]=\"validationErrors[element.id]?.[column.field]\"\r\n [mobileView]=\"mobileView()\"\r\n (editRowEmitter)=\"editRow(element, column)\"\r\n (deleteRowEmitter)=\"\r\n deleteRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (saveEditRowEmitter)=\"\r\n saveEditRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (cancelEditRowEmitter)=\"cancelEditRow(element, column)\"\r\n (selectRowChange)=\"selectRowChanged($event, element)\"\r\n (fieldValueChanged)=\"\r\n onFieldValueChanged(\r\n element,\r\n column,\r\n $event.value,\r\n allowExtendRow() ? j : i\r\n )\r\n \"\r\n ></st-material-table-row-cell>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = dataIndex\"\r\n [attr.colspan]=\"selectedColumnsString.length\"\r\n >\r\n <div\r\n class=\"expanded-element-detail-wrapper\"\r\n [@detailExpand]=\"expandedRowIndex() === i ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"expanded-element-detail\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"extendedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ data: element, rowIndex: expandedRowIndex() }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"selectedColumnsString\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: selectedColumnsString; let i = dataIndex\"\r\n [class.expanded-expanded-row]=\"expandedRowIndex() === i\"\r\n (click)=\"clickRowAction(row, i)\"\r\n ></tr>\r\n @if (allowExtendRow()) {\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"extended-detail-row\"\r\n ></tr>\r\n }\r\n </table>\r\n <mat-paginator\r\n [showFirstLastButtons]=\"true\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n [length]=\"dataLength()\"\r\n ></mat-paginator>\r\n <st-material-table-selected-rows\r\n [allowSelectRow]=\"allowSelectRow()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [selectedRows]=\"selectedRows()\"\r\n [selectionFieldLabel]=\"selectionFieldLabel()\"\r\n [selectRowValueDisplay]=\"selectRowValueDisplay()\"\r\n (removeSelectedRow)=\"onRemoveSelectedRow($event)\"\r\n ></st-material-table-selected-rows>\r\n</div>\r\n", styles: [".st-material-table{position:relative}.st-material-table .loading-spinner{position:absolute;top:0;left:0;width:100%;height:100%;background:#00000026;z-index:1;display:flex;justify-content:center}.st-material-table .loading-spinner mat-spinner{margin-top:2rem}.st-material-table .edit-all-rows-button{width:98px}\n", ".st-material-table .search-form button{height:40px}.st-material-table .search-form mat-form-field:first-child{padding-left:0}.st-material-table .search-form mat-form-field:last-child{padding-right:0}.st-material-table .search-form .clear{padding:0}.st-material-table .search-form .clear mat-icon{height:20px;width:20px;font-size:20px;cursor:pointer}.st-material-table table{background-color:transparent;width:100%;box-shadow:none}.st-material-table table.is-expended-table>tbody>tr:nth-child(odd)>td{border-bottom:0!important}.st-material-table table th.mat-mdc-header-cell,.st-material-table table td.mat-mdc-cell,.st-material-table table td.mat-mdc-footer-cell{padding:0 2px;line-height:1.1rem}.st-material-table table th.mat-mdc-header-cell:first-of-type,.st-material-table table td.mat-mdc-cell:first-of-type,.st-material-table table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}.st-material-table table td.mat-mdc-cell.mat-column-actions-row-selecting,.st-material-table table th.mat-mdc-header-cell.mat-column-actions-row-selecting{padding-left:0}.st-material-table table th.mat-mdc-header-cell:last-of-type,.st-material-table table td.mat-mdc-cell:last-of-type,.st-material-table table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}.st-material-table table thead tr{background-color:#fff9c4;height:40px!important}.st-material-table table thead tr th{border-color:#fdd835;font-size:.9rem;font-weight:500;color:#424242;padding:0 2px}.st-material-table table tbody{background-color:transparent!important}.st-material-table table tbody>tr{cursor:pointer}.st-material-table table tbody>tr:hover{background-color:#f5f5f5}.st-material-table table tbody>tr.active{background-color:#a5d6a7}.st-material-table table tbody>tr.active td{border-bottom-color:#81c784!important}.st-material-table table tbody>tr.disabled{cursor:not-allowed}.st-material-table table tbody>tr.disabled:hover{background-color:inherit!important}.st-material-table table tbody>tr.detail-row{height:0;cursor:default}.st-material-table table tbody>tr.detail-row:hover{background-color:transparent}.st-material-table table tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}.st-material-table table tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}.st-material-table table tbody>tr.extended-detail-row{height:0;cursor:default}.st-material-table table tbody>tr.expanded-element-row:not(.expanded-expanded-row):hover{background-color:transparent}.st-material-table table tbody>tr.expanded-element-row td{border-bottom-width:0}.st-material-table table tbody>tr.expanded-element-row td>div{max-height:300px;overflow:hidden;overflow-y:auto}.st-material-table table tbody>tr .expanded-element-detail{overflow:hidden;display:flex}.st-material-table table tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}.st-material-table table tbody>tr:last-child td{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, .12))!important;border-bottom-width:var(--mat-table-row-item-outline-width, 1px)!important;border-bottom-style:solid!important}.st-material-table table .mat-column-active{width:48px}.st-material-table table.no-hover tbody>tr{cursor:default}.st-material-table table.no-hover tbody>tr.active{background-color:transparent!important}.st-material-table table.no-hover tbody>tr.active>td{border-bottom-color:#0000001f!important}.st-material-table table.no-hover tbody>tr:hover{background-color:transparent!important}.st-material-table table.no-hover tbody>tr:hover>td{border-bottom-color:#0000001f!important}.st-material-table table.admin-table .actions-cell{width:100px}.st-material-table table.compact-view tbody tr{height:40px!important}table.st-material-table{background-color:transparent;width:100%;box-shadow:none}table.st-material-table.is-expended-table>tbody>tr:nth-child(odd)>td{border-bottom:0!important}table.st-material-table th.mat-mdc-header-cell,table.st-material-table td.mat-mdc-cell,table.st-material-table td.mat-mdc-footer-cell{padding:0 2px;line-height:1.1rem}table.st-material-table th.mat-mdc-header-cell:first-of-type,table.st-material-table td.mat-mdc-cell:first-of-type,table.st-material-table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}table.st-material-table td.mat-mdc-cell.mat-column-actions-row-selecting,table.st-material-table th.mat-mdc-header-cell.mat-column-actions-row-selecting{padding-left:0}table.st-material-table th.mat-mdc-header-cell:last-of-type,table.st-material-table td.mat-mdc-cell:last-of-type,table.st-material-table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}table.st-material-table thead tr{background-color:#fff9c4;height:40px!important}table.st-material-table thead tr th{border-color:#fdd835;font-size:.9rem;font-weight:500;color:#424242;padding:0 2px}table.st-material-table tbody{background-color:transparent!important}table.st-material-table tbody>tr{cursor:pointer}table.st-material-table tbody>tr:hover{background-color:#f5f5f5}table.st-material-table tbody>tr.active{background-color:#a5d6a7}table.st-material-table tbody>tr.active td{border-bottom-color:#81c784!important}table.st-material-table tbody>tr.disabled{cursor:not-allowed}table.st-material-table tbody>tr.disabled:hover{background-color:inherit!important}table.st-material-table tbody>tr.detail-row{height:0;cursor:default}table.st-material-table tbody>tr.detail-row:hover{background-color:transparent}table.st-material-table tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table.st-material-table tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table.st-material-table tbody>tr.extended-detail-row{height:0;cursor:default}table.st-material-table tbody>tr.expanded-element-row:not(.expanded-expanded-row):hover{background-color:transparent}table.st-material-table tbody>tr.expanded-element-row td{border-bottom-width:0}table.st-material-table tbody>tr.expanded-element-row td>div{max-height:300px;overflow:hidden;overflow-y:auto}table.st-material-table tbody>tr .expanded-element-detail{overflow:hidden;display:flex}table.st-material-table tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table.st-material-table tbody>tr:last-child td{border-bottom-color:var(--mat-table-row-item-outline-color, rgba(0, 0, 0, .12))!important;border-bottom-width:var(--mat-table-row-item-outline-width, 1px)!important;border-bottom-style:solid!important}table.st-material-table .mat-column-active{width:48px}table.st-material-table.no-hover tbody>tr{cursor:default}table.st-material-table.no-hover tbody>tr.active{background-color:transparent!important}table.st-material-table.no-hover tbody>tr.active>td{border-bottom-color:#0000001f!important}table.st-material-table.no-hover tbody>tr:hover{background-color:transparent!important}table.st-material-table.no-hover tbody>tr:hover>td{border-bottom-color:#0000001f!important}table.st-material-table.admin-table .actions-cell{width:100px}table.st-material-table.compact-view tbody tr{height:40px!important}.dark-theme table.st-material-table thead tr{background-color:#5e4803!important}.dark-theme table.st-material-table thead tr th{border-color:#816204!important;color:#e0e0e0!important}.dark-theme table.st-material-table tbody>tr:hover{background-color:#ffffff08!important}.dark-theme table.st-material-table tbody>tr.active{background-color:#1121114d!important}.dark-theme table.st-material-table tbody>tr.active>td{border-bottom-color:#1121114d!important}.dark-theme .st-material-table table thead tr{background-color:#5e4803!important}.dark-theme .st-material-table table thead tr th{border-color:#816204!important;color:#e0e0e0!important}.dark-theme .st-material-table table tbody>tr:hover{background-color:#ffffff08!important}.dark-theme .st-material-table table tbody>tr.active{background-color:#1121114d!important}.dark-theme .st-material-table table tbody>tr.active>td{border-bottom-color:#1121114d!important}.dark-theme .st-material-table mat-paginator{background-color:transparent!important}.dark-theme .st-material-table .reorder-column-list .reorder-column-element{background-color:#424242!important;color:#eee!important}.dark-theme .st-material-table .reorder-column-list .reorder-column-element p,.dark-theme .st-material-table .reorder-column-list .reorder-column-element mat-icon{color:#eee!important}.dark-theme .st-material-table .filter .filter-title{color:#eee!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i13.MaterialTableCaptionComponent, selector: "st-material-table-caption", inputs: ["showGlobalSearch", "tableTitle", "allowPickColumns", "allowReorderColumns", "initGlobalSearch", "initFilters", "showCreateButton", "createButtonLabel", "createButtonAction", "allowCreateRow", "disableCreateButton", "creatingRow", "extraCustomFilter", "columns"], outputs: ["captionDataChanged", "resetTableSettings", "addNewRow"] }, { kind: "component", type: i14.MaterialTableRowCellComponent, selector: "st-material-table-row-cell", inputs: ["column", "rowData", "rowIndex", "rowDataCopy", "canEditRowValidator", "canDeleteRowValidator", "selectRowOnlyOne", "isFirstEditableColumn", "autoSaveOnChange", "rowIsSelected", "rowIsExpanded", "rowEditing", "allowEditRow", "allowDeleteInEditRow", "allowEditInEditRow", "fieldError", "mobileView"], outputs: ["saveEditRowEmitter", "cancelEditRowEmitter", "editRowEmitter", "deleteRowEmitter", "selectRowChange", "fieldValueChanged"] }, { kind: "component", type: i15.MaterialTableSelectedRowsComponent, selector: "st-material-table-selected-rows", inputs: ["allowSelectRow", "selectRowOnlyOne", "selectedRows", "selectionFieldLabel", "selectRowValueDisplay"], outputs: ["removeSelectedRow"] }], animations: [
|
|
949
950
|
trigger('detailExpand', [
|
|
950
951
|
state('collapsed,void', style({ height: '0px', minHeight: '0', border: 'none' })),
|
|
951
952
|
state('expanded', style({ height: '*' })),
|
|
@@ -972,4 +973,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
972
973
|
type: ViewChildren,
|
|
973
974
|
args: [MaterialTableRowCellComponent]
|
|
974
975
|
}] } });
|
|
975
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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QUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDthQUNGLENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQXZCbEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBTWhCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUNILGdCQUFnQixFQUNoQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQ3pEOzRCQUNELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FDUix3QkFBd0IsRUFDeEIsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQ2hEO3lCQUNGLENBQUM7cUJBQ0g7OExBTXdCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSCxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBRWxCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBpbnB1dCxcclxuICBvdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBTdEJhc2VTZXJ2aWNlLFxyXG4gIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudCxcclxufSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBTdFNuYWNrQmFyU2VydmljZSB9IGZyb20gJ25neC1zdC1zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdC10YWJsZXMtdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIElDYXB0aW9uRGF0YUNoYW5nZWQsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU3REaWFsb2dTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LWRpYWxvZyc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1yb3ctY2VsbC9tYXRlcmlhbC10YWJsZS1yb3ctY2VsbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtc3QtbWF0ZXJpYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vLi4vLi4vYXNzZXRzL2Jhc2UtdGFibGUuc2NzcycsXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2NvbGxhcHNlZCx2b2lkJyxcclxuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnLCBib3JkZXI6ICdub25lJyB9KVxyXG4gICAgICApLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcclxuICAgICAgICAnZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsXHJcbiAgICAgICAgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJylcclxuICAgICAgKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQpXHJcbiAgcm93Q2VsbHMhOiBRdWVyeUxpc3Q8TWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQ+O1xyXG5cclxuICBzaG93R2xvYmFsU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICB0YWJsZVRpdGxlID0gaW5wdXQoJycpO1xyXG5cclxuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oMTApO1xyXG5cclxuICBkYXRhTGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHJcbiAgYWxsb3dQaWNrQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9jYWxTdG9yYWdlTmFtZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBsYXp5TG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaXNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpbml0Q29sdW1ucyA9IGlucHV0PFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuXHJcbiAgcm93Q2xpY2tBY3Rpb24gPSBpbnB1dDwocm93OiBhbnkpID0+IHZvaWQ+KCk7XHJcblxyXG4gIGFsbG93RWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dEZWxldGVJbkVkaXRSb3cgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWxsb3dFZGl0SW5FZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHNob3dFZGl0QWxsUm93cyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0cnVlLCBmaWVsZCBjaGFuZ2VzIGFyZSBzYXZlZCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcXVpcmluZyBzYXZlL2NhbmNlbCBidXR0b25zLlxyXG4gICAqIFBlcmZlY3QgZm9yIHF1YW50aXR5IGlucHV0cywgdG9nZ2xlcywgb3Igc2VsZWN0aW9uIHRhYmxlcyB3aGVyZSBpbnN0YW50IHVwZGF0ZXMgYXJlIG5lZWRlZC5cclxuICAgKi9cclxuICBhdXRvU2F2ZU9uQ2hhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjYW5FZGl0Um93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgY2FuRGVsZXRlUm93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gIHNlbGVjdGlvbkZpZWxkTGFiZWwgPSBpbnB1dCgnJyk7XHJcblxyXG4gIHNlbGVjdFJvd09ubHlPbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZvcm1hdHRlciB1c2VkIHRvIGRlcml2ZSB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgYSBzZWxlY3RlZCByb3cuXHJcbiAgICpcclxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBzaW1wbGUgZmllbGQgbmFtZSBwcm92aWRlZCBieSB7QGxpbmsgc2VsZWN0aW9uRmllbGRMYWJlbH1cclxuICAgKiBpcyBub3Qgc3VmZmljaWVudCAoZm9yIGV4YW1wbGUsIHdoZW4geW91IG5lZWQgdG8gY29uY2F0ZW5hdGUgbXVsdGlwbGUgZmllbGRzXHJcbiAgICogb3IgYXBwbHkgY3VzdG9tIGZvcm1hdHRpbmcgdG8gdGhlIGRpc3BsYXllZCB2YWx1ZSkuXHJcbiAgICpcclxuICAgKiBJZiBib3RoIHtAbGluayBzZWxlY3Rpb25GaWVsZExhYmVsfSBhbmQgYHNlbGVjdFJvd1ZhbHVlRGlzcGxheWAgYXJlIHNldCxcclxuICAgKiB0aGlzIGZ1bmN0aW9uIHRha2VzIHByZWNlZGVuY2UgYW5kIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSB0ZXh0XHJcbiAgICogcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCByb3cuXHJcbiAgICovXHJcbiAgc2VsZWN0Um93VmFsdWVEaXNwbGF5ID0gaW5wdXQ8KHJvdzogYW55KSA9PiBzdHJpbmc+KCk7XHJcblxyXG4gIHNob3dDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkxhYmVsID0gaW5wdXQoJ0NyZWF0ZScpO1xyXG5cclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKSA9PiB2b2lkPigoKSA9PiB7fSk7XHJcblxyXG4gIGRpc2FibGVDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93Q3JlYXRlUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0V4dGVuZFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXh0ZW5kZWRSb3dUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHsgZGF0YTogYW55OyByb3dJbmRleDogbnVtYmVyIH0+PigpO1xyXG5cclxuICBpbml0U2VsZWN0ZWRSb3cgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIGV4dHJhQ3VzdG9tRmlsdGVyID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGZpbHRlciBtZXRob2QgYXBwbGllZCB0byBhbGwgcm93cyBpbiB0aGUgdGFibGUuXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBlYWNoIHJvdyBhbmQgc2hvdWxkIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgdGhlIHJvdywgZmFsc2UgdG8gZXhjbHVkZSBpdC5cclxuICAgKiBBcHBsaWVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGFibGUgZGF0YSBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdyAtIFRoZSBkYXRhIHJvdyB0byBldmFsdWF0ZVxyXG4gICAqIEByZXR1cm5zIHRydWUgdG8gaW5jbHVkZSB0aGUgcm93IGluIHRoZSB0YWJsZSwgZmFsc2UgdG8gZXhjbHVkZSBpdFxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyBPbmx5IHNob3cgYWN0aXZlIHVzZXJzXHJcbiAgICogW2luaXRGaWx0ZXJNZXRob2RdPVwiKHJvdykgPT4gcm93LmlzQWN0aXZlID09PSB0cnVlXCJcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gU2hvdyB1c2VycyB3aXRoIHF1YW50aXR5IGdyZWF0ZXIgdGhhbiAxMFxyXG4gICAqIFtpbml0RmlsdGVyTWV0aG9kXT1cIihyb3cpID0+IHJvdy5xdWFudGl0eSA+IDEwXCJcclxuICAgKi9cclxuICBpbml0RmlsdGVyTWV0aG9kID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBJbW11dGFibGUgRGF0YSBQYXR0ZXJuIC0gT3B0aW1pemVkIHZlcnNpb24gd2l0aCBJRCBjbGVhbnVwXHJcbiAgICovXHJcbiAgZGF0YSA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIHNldE5ld0RhdGFXaXRob3V0UmVmcmVzaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY29tcGFjdFZpZXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGxvYWREYXRhID0gb3V0cHV0PFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhPigpO1xyXG5cclxuICBzYXZlRWRpdGVkUm93ID0gb3V0cHV0PHsgcm93OiBhbnk7IGluZGV4OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgc2F2ZUNyZWF0ZWRSb3cgPSBvdXRwdXQ8YW55PigpO1xyXG5cclxuICByb3dEZWxldGVkID0gb3V0cHV0PHsgcm93OiBhbnk7IGluZGV4OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gYSBmaWVsZCB2YWx1ZSBjaGFuZ2VzIGFuZCBhdXRvU2F2ZU9uQ2hhbmdlIGlzIGVuYWJsZWQuXHJcbiAgICogUGFyZW50IHNob3VsZCB1cGRhdGUgdGhlaXIgZGF0YSBpbW1lZGlhdGVseS5cclxuICAgKi9cclxuICBmaWVsZFZhbHVlQ2hhbmdlZCA9IG91dHB1dDx7XHJcbiAgICByb3c6IGFueTtcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICB9PigpO1xyXG5cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpbml0TG9jYWxDb2x1bW5zID0gc2lnbmFsPFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuICBleHBhbmRlZFJvd0luZGV4ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjcmVhdGluZ1JvdyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICB0YWJsZVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcblxyXG4gIGluaXRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgaW5pdEdsb2JhbFNlYXJjaDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHNob3dUYWJsZSA9IHRydWU7XHJcblxyXG4gIGFjdGl2ZVJvd3NFZGl0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIGFjdGl2ZVJvd3NDcmVhdGluZzogeyBbcm93SWQ6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHJcbiAgLy8gVHJhY2sgdmFsaWRhdGlvbiBlcnJvcnM6IHsgcm93SWQ6IHsgZmllbGROYW1lOiBlcnJvck1lc3NhZ2UgfSB9XHJcbiAgdmFsaWRhdGlvbkVycm9yczogeyBbcm93SWQ6IHN0cmluZ106IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XHJcblxyXG4gIG1vYmlsZVZpZXcgPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VEYXRhOiBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTdFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0RGlhbG9nU2VydmljZTogU3REaWFsb2dTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCBpc01vYmlsZSA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gMTEwMDtcclxuICAgICAgaWYgKHRoaXMubW9iaWxlVmlldygpICE9PSBpc01vYmlsZSkge1xyXG4gICAgICAgIHRoaXMubW9iaWxlVmlldy5zZXQoaXNNb2JpbGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIG1vYmlsZSB2aWV3IHN0YXRlXHJcbiAgICB0aGlzLm1vYmlsZVZpZXcuc2V0KGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPD0gMTEwMCk7XHJcblxyXG4gICAgLy8gRWZmZWN0IHRvIGhhbmRsZSBkYXRhIGNoYW5nZXNcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlucHV0RGF0YSA9IHRoaXMuZGF0YSgpO1xyXG4gICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2UoaW5wdXREYXRhKTtcclxuICAgIH0sIHthbGxvd1NpZ25hbFdyaXRlczogdHJ1ZX0pO1xyXG5cclxuICAgIC8vIEVmZmVjdCB0byByZWFwcGx5IGZpbHRlciB3aGVuIGluaXRGaWx0ZXJNZXRob2QgY2hhbmdlc1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgLy8gVHJhY2sgdGhlIGZpbHRlciBtZXRob2QgdG8gdHJpZ2dlciBlZmZlY3Qgb24gY2hhbmdlXHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlck1ldGhvZCgpO1xyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiAhdGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWx0ZXIgcHJlZGljYXRlIHRvIHVzZSB0aGUgbmV3IGZpbHRlciBtZXRob2RcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKTtcclxuICAgICAgICAvLyBUcmlnZ2VyIGZpbHRlciByZWFwcGxpY2F0aW9uIGJ5IHNldHRpbmcgZmlsdGVyIHN0cmluZyBhZ2FpblxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlLmZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMudGFibGVTb3VyY2UuZmlsdGVyO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gY3VycmVudEZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfSwge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcclxuICAgIHRoaXMubG9hZExvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudmFsaWRhdGVBbmRVcGRhdGVGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLnNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuXHJcbiAgICB0aGlzLm5nRGVzdHJveWVkJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5uZ0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHR1cm5PbkFsbEVkaXRSb3dzKCkge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdID0geyAuLi5yb3cgfTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGNhcHRpb25EYXRhQ2hhbmdlZChldmVudDogSUNhcHRpb25EYXRhQ2hhbmdlZCkge1xyXG4gICAgY29uc3QgbG9hZExhenlEYXRhID1cclxuICAgICAgZXZlbnQuZ2xvYmFsU2VhcmNoICE9PSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoIHx8XHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50LmZpbHRlcnMpICE9PVxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIC4uLmV2ZW50LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VJbmRleDogbG9hZExhenlEYXRhID8gMCA6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuICAgICAgc29ydEZpZWxkOiB0aGlzLnNvcnQuYWN0aXZlLFxyXG4gICAgICBzb3J0T3JkZXI6IHRoaXMuc29ydC5kaXJlY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc09yZGVyKCk7XHJcbiAgICB0aGlzLnNldENvbHVtbnNWaXNpYmxlKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1ucygpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuXHJcbiAgICBpZiAobG9hZExhenlEYXRhKSB7XHJcbiAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnBhZ2luYXRvci5fZW1pdFBhZ2VFdmVudCgwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgdGhpcy5pbml0RmlsdGVycyA9IHt9O1xyXG4gICAgdGhpcy5pbml0R2xvYmFsU2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiAnJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLnNldEluaXRUYWJsZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuZXcgcm93IHRvIHRoZSBsb2NhbCB0YWJsZSBjb3B5IG9ubHkuXHJcbiAgICogVGhlIHJvdyBpcyB0cmFja2VkIGluIGFjdGl2ZVJvd3NDcmVhdGluZyB1bnRpbCBzYXZlZC5cclxuICAgKiBXaGVuIHNhdmVkLCB0aGUgcGFyZW50IHJlY2VpdmVzIHRoZSBldmVudCB0aHJvdWdoIHNhdmVOZXdDcmVhdGVkUm93IG91dHB1dC5cclxuICAgKiBUaGUgcGFyZW50IGRlY2lkZXMgd2hldGhlciB0byBhY2NlcHQgYW5kIGFkZCB0byB0aGVpciBkYXRhIGFycmF5LlxyXG4gICAqL1xyXG4gIGFkZE5ld1JvdygpIHtcclxuICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleC5zZXQobnVsbCk7XHJcbiAgICAvLyBDcmVhdGUgbmV3IHJvdyB3aXRoIGdlbmVyYXRlZCBJRCBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXHJcbiAgICBjb25zdCBuZXdSb3c6IGFueSA9IHtcclxuICAgICAgaWQ6IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgZmllbGRzIHdpdGggbnVsbC9kZWZhdWx0IHZhbHVlc1xyXG4gICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgbmV3Um93W2NvbC5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgdG8gbG9jYWwgdGFibGUgY29weSBvbmx5XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhLCBuZXdSb3ddO1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbbmV3Um93LmlkXSA9IHsgLi4ubmV3Um93IH07XHJcblxyXG4gICAgLy8gTmF2aWdhdGUgdG8gbGFzdCBwYWdlIHRvIHNob3cgdGhlIG5ldyByb3dcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5sYXN0UGFnZSgpO1xyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMuc3REaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5zaG93Q29uZmlybWF0aW9uKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcm93PycpXHJcbiAgICAgIC5waXBlKGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICAgIGRhdGEgPT4gZGF0YS5pZCAhPT0gcm93LmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJvd0RlbGV0ZWQuZW1pdCh7IHJvdywgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhdmVzIGEgcm93IChlaXRoZXIgbmV3IG9yIGVkaXRlZCkuXHJcbiAgICogRW1pdHMgdGhlIHZhbGlkYXRlZCByb3cgdG8gdGhlIHBhcmVudCB0aHJvdWdoIGVpdGhlcjpcclxuICAgKiAtIHNhdmVOZXdDcmVhdGVkUm93OiBmb3IgbmV3bHkgY3JlYXRlZCByb3dzXHJcbiAgICogLSBzYXZlTmV3Um93OiBmb3IgZWRpdGVkIGV4aXN0aW5nIHJvd3NcclxuICAgKlxyXG4gICAqIFRoZSBwYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yOlxyXG4gICAqIC0gUGVyc2lzdGluZyB0aGUgY2hhbmdlIChlLmcuLCBBUEkgY2FsbClcclxuICAgKiAtIFVwZGF0aW5nIHRoZWlyIGRhdGEgYXJyYXlcclxuICAgKiAtIEhhbmRsaW5nIGVycm9ycy9yZWplY3Rpb25zXHJcbiAgICpcclxuICAgKiBUaGUgbGlicmFyeSB1cGRhdGVzIGl0cyBsb2NhbCBjb3B5IG9wdGltaXN0aWNhbGx5LlxyXG4gICAqL1xyXG4gIHNhdmVFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICBjb25zdCBpc0NyZWF0aW5nVGhpc1JvdyA9ICEhdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIGNvbnN0IHJvd0RhdGEgPSBpc0NyZWF0aW5nVGhpc1Jvd1xyXG4gICAgICA/IHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF1cclxuICAgICAgOiB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgcm93XHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVSb3cocm93RGF0YSwgcm93KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICB0aGlzLnNhdmVDcmVhdGVkUm93LmVtaXQoeyAuLi5yb3dEYXRhIH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUVkaXRlZFJvdy5lbWl0KHsgcm93OiB7IC4uLnJvd0RhdGEgfSwgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgIHRoaXMudXBkYXRlUm93SW5EYXRhU291cmNlKGFic29sdXRlSW5kZXgsIHJvdywgcm93RGF0YSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcm93IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCB0YWJsZSBjb3B5XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgKTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGlzIHJvd1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3cuaWRdKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbW1lZGlhdGUgZmllbGQgdmFsdWUgY2hhbmdlcyBmb3IgYXV0by1zYXZlIG1vZGUuXHJcbiAgICogSW4gYXV0by1zYXZlIG1vZGUsIG5nTW9kZWwgaXMgYm91bmQgZGlyZWN0bHkgdG8gcm93RGF0YSwgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuXHJcbiAgICogV2Ugb25seSBlbWl0IHRvIHBhcmVudCBzbyB0aGV5IGNhbiB1cGRhdGUgdGhlaXIgZGF0YSBjb3B5LlxyXG4gICAqL1xyXG4gIG9uRmllbGRWYWx1ZUNoYW5nZWQoXHJcbiAgICByb3c6IGFueSxcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgdmFsdWU6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2Fic29sdXRlSW5kZXhdW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZmllbGQgaWYgYXV0b1NhdmVPbkNoYW5nZSBpcyBlbmFibGVkXHJcbiAgICBpZiAodGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgLy8gVXNlIHZhbGlkYXRlUm93IHdpdGggc2luZ2xlIGNvbHVtbiB0byB2YWxpZGF0ZSBqdXN0IHRoaXMgZmllbGRcclxuICAgICAgdGhpcy52YWxpZGF0ZVJvdyhyb3csIHJvdywgY29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudCBpbW1lZGlhdGVseVxyXG4gICAgLy8gVGhlIHJvdyBvYmplY3QgaXMgYWxyZWFkeSB1cGRhdGVkIGJ5IG5nTW9kZWwgYmluZGluZ1xyXG4gICAgdGhpcy5maWVsZFZhbHVlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgcm93OiB7IC4uLnJvdyB9LFxyXG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgIGluZGV4OiBhYnNvbHV0ZUluZGV4LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVSb3dzKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFJZCA9IGE/LmlkID8/IGE7XHJcbiAgICBjb25zdCBiSWQgPSBiPy5pZCA/PyBiO1xyXG4gICAgcmV0dXJuIGFJZCA9PT0gYklkID8gMCA6IDE7XHJcbiAgfVxyXG5cclxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5zb21lKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpID09PSAwKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCkubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd3MoZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PlxyXG4gICAgICBzZWxlY3RlZC5maWx0ZXIociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgIT09IDApXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRSb3cocm93KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZWQodmFsdWU6IGJvb2xlYW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtyb3ddKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT4gWy4uLnNlbGVjdGVkLCByb3ddKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+XHJcbiAgICAgICAgc2VsZWN0ZWQuZmlsdGVyKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpICE9PSAwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tSb3dBY3Rpb24ocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCgpID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleC5zZXQobnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzUm93U2VsZWN0ZWQocm93KTtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2VkKCFpc1NlbGVjdGVkLCByb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb24oKSkge1xyXG4gICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb24oKSEocm93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWJzb2x1dGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yXHJcbiAgICAgICAgPyB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSArIGluZGV4XHJcbiAgICAgICAgOiBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc0ZpbHRlclJvd0VkaXRUeXBlcygpIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gJ2FjdGlvbnMnICYmICFjb2x1bW4udHlwZSkge1xyXG4gICAgICAgIGNvbHVtbi50eXBlID0gJ2FjdGlvbnMnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWNvbHVtbi5maWx0ZXJUeXBlICYmIGNvbHVtbi5maWx0ZXIpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkgJiYgIWNvbHVtbi5yb3dFZGl0VHlwZSkge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKSB7XHJcbiAgICBsZXQgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YTogYW55LCBmaWx0ZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtczoge1xyXG4gICAgICAgIFtjb2x1bW46IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHN0cmluZztcclxuICAgICAgfSA9IEpTT04ucGFyc2UoZmlsdGVyKTtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybXNLZXlzID0gT2JqZWN0LmtleXMoc2VhcmNoVGVybXMpO1xyXG4gICAgICBsZXQgc2VhcmNoT2sgPSB0cnVlO1xyXG4gICAgICBsZXQgc2VhcmNoT2tHbG9iYWwgPSB0cnVlO1xyXG5cclxuICAgICAgc2VhcmNoVGVybXNLZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAga2V5ICE9PSAnc3RHbG9iYWxTZWFyY2gnICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZy5pbmNsdWRlcyhrZXkpICYmXHJcbiAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlICE9PSBudWxsICYmXHJcbiAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlICE9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaFRlcm1zW2tleV0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVGcm9tOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUbzogc3RyaW5nIHwgbnVsbCA9IChcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXVxyXG4gICAgICAgICAgICApWzFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGVGcm9tIHx8IGRhdGVUbykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRtcENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGtleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0bXBDb2x1bW4gJiYgdG1wQ29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tID8gbmV3IERhdGUoZGF0ZUZyb20pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUb1ZhbHVlID0gZGF0ZVRvXHJcbiAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlVG8pLnNldERhdGUobmV3IERhdGUoZGF0ZVRvKS5nZXREYXRlKCkgKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IERhdGUoZGF0YVtrZXldKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUZyb21WYWx1ZSAmJiBkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEgPj0gZGF0ZUZyb21WYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZUZyb21WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkYXRhW2tleV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2sgPVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICAgIChzZWFyY2hUZXJtc1trZXldLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJ1xyXG4gICAgICAgICAgICAgICAgICA/IGRhdGFba2V5XSA9PT0gc2VhcmNoVGVybXNba2V5XS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICA6IGRhdGFba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICApICE9PSAtMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2VhcmNoVGVybXMuc3RHbG9iYWxTZWFyY2gpIHtcclxuICAgICAgICBzZWFyY2hPa0dsb2JhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhW2NvbF0pIHtcclxuICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgPVxyXG4gICAgICAgICAgICAgIHNlYXJjaE9rR2xvYmFsIHx8XHJcbiAgICAgICAgICAgICAgZGF0YVtjb2xdXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaC50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkgIT09IC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBcHBseSBjdXN0b20gZmlsdGVyIG1ldGhvZCBpZiBwcm92aWRlZFxyXG4gICAgICBsZXQgY3VzdG9tRmlsdGVyT2sgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5pbml0RmlsdGVyTWV0aG9kKCkpIHtcclxuICAgICAgICBjdXN0b21GaWx0ZXJPayA9IHRoaXMuaW5pdEZpbHRlck1ldGhvZCgpIShkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHNlYXJjaE9rICYmIHNlYXJjaE9rR2xvYmFsICYmIGN1c3RvbUZpbHRlck9rO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmaWx0ZXJGdW5jdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdExhenlMb2FkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICBjb25zdCBsb2FkRGF0YVJlcXVlc3Q6IFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhID0ge1xyXG4gICAgICAgIGZpcnN0OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICByb3dzOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZyxcclxuICAgICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2gsXHJcbiAgICAgICAgc29ydEZpZWxkOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkLFxyXG4gICAgICAgIHNvcnRPcmRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcixcclxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMubG9hZERhdGEuZW1pdChsb2FkRGF0YVJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMsXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2gsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxTdG9yYWdlRGF0YSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdFRhYmxlKCkge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5fZGF0YSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4O1xyXG5cclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIpIHtcclxuICAgICAgY29uc3QgZGlzYWJsZUNsZWFyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHsgaWQ6ICcnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhciB9KTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoe1xyXG4gICAgICAgIGlkOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkLFxyXG4gICAgICAgIHN0YXJ0OiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGRpc2FibGVDbGVhcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKCkhKSB7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTb3J0UGFnZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEsXHJcbiAgICAgICAgICBzb3J0RmllbGQ6IHJlcy5hY3RpdmUsXHJcbiAgICAgICAgICBzb3J0T3JkZXI6IHJlcy5kaXJlY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4LFxyXG4gICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgdHlwZTogY29sLnR5cGUgPyBjb2wudHlwZSA6ICdzdHJpbmcnLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc09yZGVyKCk7XHJcbiAgICB0aGlzLnNldENvbHVtbnNWaXNpYmxlKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc09yZGVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YT8uY29sdW1uc09yZGVyKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyXHJcbiAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pKVxyXG4gICAgICAgICAgLm1hcChjb2x1bW4gPT4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uKSEpLFxyXG4gICAgICAgIC4uLnRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgICAgICBjb2x1bW4gPT4gIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sdW1uLmZpZWxkKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNWaXNpYmxlKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YT8uc2VsZWN0ZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgdmlzaWJsZTpcclxuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhjb2wuZmllbGQpIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyLmluY2x1ZGVzKGNvbC5maWVsZCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4ge1xyXG4gICAgICByZXR1cm4gY29sLnZpc2libGU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZExvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkpIHtcclxuICAgICAgY29uc3QgbG9jYWxTdG9yYWdlRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpISk7XHJcblxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlRGF0YSk7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsdGVycyA9IHRoaXMudmFsaWRPbGRGaWx0ZXJzVG9OZXdGb3JtYXQoXHJcbiAgICAgICAgLy8gICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVyc1xyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgLy8gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0R2xvYmFsU2VhcmNoID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChvbGRGaWx0ZXJzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfCBzdHJpbmc7XHJcbiAgfSk6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0ge1xyXG4gICAgY29uc3QgbmV3RmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSA9IHt9O1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9sZEZpbHRlcnMpO1xyXG5cclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbmV3RmlsdGVycztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvbGRGaWx0ZXJzW2tleV0gPT09ICdvYmplY3QnICYmIG9sZEZpbHRlcnNba2V5XSAhPT0gbnVsbCkge1xyXG4gICAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IG9sZEZpbHRlcnNba2V5XSBhcyBTdE1hdGVyaWFsVGFibGVGaWx0ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3RmlsdGVycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSgpLFxyXG4gICAgICBwYWdlSW5kZXg6IDAsXHJcbiAgICAgIHNlbGVjdGVkQ29sdW1uczogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBnbG9iYWxTZWFyY2g6ICcnLFxyXG4gICAgICBjb2x1bW5zT3JkZXI6IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4gY29sLmZpZWxkKSxcclxuICAgICAgZmlsdGVyczoge30sXHJcbiAgICAgIHNvcnRGaWVsZDogJycsXHJcbiAgICAgIHNvcnRPcmRlcjogJ2FzYycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdEVkaXRhYmxlQ29sdW1uKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAvLyBHZXQgYWxsIGVkaXRhYmxlIGNvbHVtbnMgaW4gb3JkZXJcclxuICAgIGNvbnN0IGVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcihcclxuICAgICAgY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4gJiYgY29sLnZpc2libGVcclxuICAgICk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgZWRpdGFibGUgY29sdW1uXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBlZGl0YWJsZUNvbHVtbnMubGVuZ3RoID4gMCAmJiBlZGl0YWJsZUNvbHVtbnNbMF0uZmllbGQgPT09IGNvbHVtbi5maWVsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVSb3coXHJcbiAgICByb3dEYXRhOiBhbnksXHJcbiAgICBvcmlnaW5hbFJvdzogYW55LFxyXG4gICAgc2luZ2xlQ29sdW1uPzogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSBzaW5nbGVDb2x1bW5cclxuICAgICAgPyBbc2luZ2xlQ29sdW1uXVxyXG4gICAgICA6IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pO1xyXG4gICAgY29uc3Qgcm93SWQgPSBvcmlnaW5hbFJvdy5pZDtcclxuXHJcbiAgICAvLyBGb3Igc2luZ2xlIGZpZWxkIHZhbGlkYXRpb24sIHByZXNlcnZlIGV4aXN0aW5nIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzXHJcbiAgICBsZXQgZXJyb3JzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIH0gPSBzaW5nbGVDb2x1bW5cclxuICAgICAgPyB7IC4uLnRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF0gfVxyXG4gICAgICA6IHt9O1xyXG5cclxuICAgIC8vIENsZWFyIGFsbCBlcnJvcnMgaWYgdmFsaWRhdGluZyBlbnRpcmUgcm93XHJcbiAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdKSB7XHJcbiAgICAgIGVycm9ycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcclxuICAgIGxldCBmaXJzdEVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29sIG9mIGVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICBsZXQgZmllbGRIYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICBpZiAoY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb2wuY3VzdG9tRWRpdFJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSxcclxuICAgICAgICAgIG9yaWdpbmFsUm93W2NvbC5maWVsZF0sXHJcbiAgICAgICAgICBvcmlnaW5hbFJvd1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgICAgZXJyb3JzW2NvbC5maWVsZF0gPSByZXN1bHQuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgZmllbGRIYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzdWx0LmVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZmllbGRIYXNFcnJvciAmJiBjb2wuZWRpdENvbHVtblJlcXVpcmVkKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtjb2wuaGVhZGVyfSBpcyByZXF1aXJlZGA7XHJcbiAgICAgICAgICBlcnJvcnNbY29sLmZpZWxkXSA9IGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIGZpZWxkSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENsZWFyIGVycm9yIGZvciB0aGlzIGZpZWxkIGlmIHZhbGlkYXRpb24gcGFzc2VkXHJcbiAgICAgIGlmICghZmllbGRIYXNFcnJvciAmJiBzaW5nbGVDb2x1bW4pIHtcclxuICAgICAgICBkZWxldGUgZXJyb3JzW2NvbC5maWVsZF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENhcHR1cmUgZmlyc3QgZXJyb3IgZm9yIHNuYWNrYmFyIChvbmx5IHdoZW4gdmFsaWRhdGluZyBlbnRpcmUgcm93KVxyXG4gICAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiBmaWVsZEhhc0Vycm9yICYmICFmaXJzdEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIGZpcnN0RXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICBpZiAoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF0gPSBlcnJvcnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaG93IHNuYWNrYmFyIG9ubHkgd2hlbiB2YWxpZGF0aW5nIGVudGlyZSByb3cgKG9uIHNhdmUpXHJcbiAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiBoYXNFcnJvcnMgJiYgZmlyc3RFcnJvck1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5zbmFja2Jhci5lcnJvcihmaXJzdEVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHJldHVybiAhaGFzRXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSb3dJbkRhdGFTb3VyY2UoaW5kZXg6IG51bWJlciwgcm93OiBhbnksIHJvd0RhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnRhYmxlU291cmNlLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKVxyXG4gICAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVkUm93W2NvbC5maWVsZF0gPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZFJvdztcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnNldChbLi4udGhpcy5pbml0Q29sdW1ucygpXSk7XHJcblxyXG4gICAgLy8gQWRkIHNwZWNpYWwgY29sdW1uc1xyXG4gICAgdGhpcy5hZGRTZWxlY3RDb2x1bW5JZk5lZWRlZCgpO1xyXG4gICAgdGhpcy5hZGRFZGl0Q29sdW1uSWZOZWVkZWQoKTtcclxuICAgIHRoaXMuYWRkRXh0ZW5kQ29sdW1uSWZOZWVkZWQoKTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNGaWx0ZXJSb3dFZGl0VHlwZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkU2VsZWN0Q29sdW1uSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgICB0aGlzLnJlbW92ZUNvbHVtbkJ5VHlwZSgnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS51bnNoaWZ0KHtcclxuICAgICAgZmllbGQ6ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnLFxyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAnNDBweCcsXHJcbiAgICAgIHNlbGVjdENvbHVtbkxhYmVsOlxyXG4gICAgICAgIHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd1NlbGVjdENvbHVtbkxhYmVsLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5pdFNlbGVjdGVkUm93KCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFsuLi50aGlzLmluaXRTZWxlY3RlZFJvdygpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEVkaXRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLnJlbW92ZUNvbHVtbkJ5VHlwZSgnYWN0aW9ucy1yb3ctZWRpdGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWRpdGluZ0NvbHVtbjogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgPSB7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyxcclxuICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAnMTEwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dBY3Rpb25zQ29sdW1uTGFiZWwsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy51cGRhdGUoY29sdW1ucyA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RDb2x1bW4gPSBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmIChsYXN0Q29sdW1uPy50eXBlICE9PSAnYWN0aW9ucycpIHtcclxuICAgICAgICByZXR1cm4gWy4uLmNvbHVtbnMsIGVkaXRpbmdDb2x1bW5dO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uY29sdW1uc107XHJcbiAgICAgIG5ld0NvbHVtbnMuc3BsaWNlKG5ld0NvbHVtbnMubGVuZ3RoIC0gMSwgMCwgZWRpdGluZ0NvbHVtbik7XHJcbiAgICAgIHJldHVybiBuZXdDb2x1bW5zO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4dGVuZENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LWV4dGVuZGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkudW5zaGlmdCh7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZXh0ZW5kaW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzMwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dFeHRlbmRDb2x1bW5MYWJlbCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDb2x1bW5CeVR5cGUodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT5cclxuICAgICAgY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWVsZCAhPT0gdHlwZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlQW5kVXBkYXRlRmlsdGVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmluaXRGaWx0ZXJzKTtcclxuICAgIGlmIChmaWx0ZXJLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0ZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWx0ZXJLZXlzKSB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZpbmQoY29sdW1uID0+IGNvbHVtbi5maWVsZCA9PT0ga2V5KTtcclxuICAgICAgaWYgKCFjb2wpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbmV3RmlsdGVyc1trZXldID0ge1xyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldERlZmF1bHRGaWx0ZXJWYWx1ZShjb2wsIHRoaXMuaW5pdEZpbHRlcnNba2V5XSksXHJcbiAgICAgICAgbWF0Y2hNb2RlOiBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50LmdldEJhc2VNYXRjaE1vZGVCeVR5cGUoXHJcbiAgICAgICAgICBjb2wuZmlsdGVyVHlwZSFcclxuICAgICAgICApLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdGaWx0ZXJzKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5pbml0RmlsdGVycykpIHtcclxuICAgICAgdGhpcy5pbml0RmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzID0gbmV3RmlsdGVycztcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEZpbHRlclZhbHVlKFxyXG4gICAgY29sOiBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCxcclxuICAgIGZpbHRlcjogU3RNYXRlcmlhbFRhYmxlRmlsdGVyXHJcbiAgKTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlIHtcclxuICAgIGlmIChmaWx0ZXIubWF0Y2hNb2RlID09PSAnZXF1YWwnKSB7XHJcbiAgICAgIHJldHVybiAoZmlsdGVyLnZhbHVlID8/IG51bGwpIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpXHJcbiAgICAgICAgPyBmaWx0ZXIudmFsdWVcclxuICAgICAgICA6IFtudWxsLCBudWxsXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA/PyAnJykgYXMgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBkYXRhIGNoYW5nZXMgZnJvbSB0aGUgaW5wdXQgc2lnbmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlKGRhdGE6IGFueVtdKTogdm9pZCB7XHJcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGRhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLl9kYXRhLmxlbmd0aCA9PT0gZGF0YS5sZW5ndGggJiZcclxuICAgICAgdGhpcy5zZXROZXdEYXRhV2l0aG91dFJlZnJlc2goKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2lkJyk7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgb2JqZWN0cyBpbiBwbGFjZSB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGFuZCBhdm9pZCBsb3NpbmcgZm9jdXNcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZvckVhY2goKGV4aXN0aW5nUm93LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIG9iamVjdEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgZXhpc3RpbmdSb3dba2V5XSA9IGRhdGFbaW5kZXhdW2tleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gRm9yY2UgdGFibGUgdG8gZGV0ZWN0IGNoYW5nZXMgd2l0aG91dCByZWNyZWF0aW5nIHJvd3NcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gb24gYWxsIGNoaWxkIHJvdyBjZWxsIGNvbXBvbmVudHNcclxuICAgICAgaWYgKHRoaXMucm93Q2VsbHMpIHtcclxuICAgICAgICB0aGlzLnJvd0NlbGxzLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgICBjZWxsLnRyaWdnZXJDaGFuZ2VEZXRlY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDaGVjayBpZiBkYXRhIGlzIGFjdHVhbGx5IGRpZmZlcmVudCAoZXhjbHVkaW5nIElEcyB3ZSBtaWdodCBoYXZlIGFkZGVkKVxyXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IHVwZGF0ZXMgd2hlbiBwYXJlbnQgc2VuZHMgdGhlIHNhbWUgZGF0YVxyXG4gICAgICBpZiAodGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVdpdGhvdXRJZHMgPSBkYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhV2l0aG91dElkcyA9IHRoaXMuX2RhdGEubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0bXAgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgICAgZGVsZXRlIHRtcC5pZDtcclxuICAgICAgICAgIHJldHVybiB0bXA7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRhdGFXaXRob3V0SWRzKSA9PT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGN1cnJlbnREYXRhV2l0aG91dElkcylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENyZWF0ZSBzaGFsbG93IGNvcHkgdG8gYXZvaWQgbXV0YXRpbmcgcGFyZW50IGRhdGFcclxuICAgICAgbGV0IGNsb25lZERhdGEgPSBkYXRhLm1hcChyb3cgPT4gKHsgLi4ucm93IH0pKTtcclxuXHJcbiAgICAgIC8vIEFkZCBJRHMgaWYgbmVlZGVkIChvbmx5IG9uIHRoZSBjb3B5LCBvbmx5IGlmIHJvdyBkb2Vzbid0IGhhdmUgYW4gaWQpXHJcbiAgICAgIGlmICh0aGlzLmFsbG93RWRpdFJvdygpIHx8IHRoaXMuYWxsb3dTZWxlY3RSb3coKSB8fCB0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICAgIGNsb25lZERhdGEgPSBjbG9uZWREYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgLy8gT25seSBhZGQgaWQgaWYgaXQgZG9lc24ndCBleGlzdCAtIGRvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBJRHNcclxuICAgICAgICAgIGlmICghcm93LmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgIGlkOiBTdEJhc2VTZXJ2aWNlLmdlbmVyYXRlR1VJRCgpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJvdztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZGF0YSA9IGNsb25lZERhdGE7XHJcblxyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IGNsb25lZERhdGE7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKCkgJiYgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4O1xyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5fZW1pdFBhZ2VFdmVudCh0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RNYXRlcmlhbFRhYmxlTG9hZERhdGEge1xyXG4gIGZpcnN0OiBudW1iZXI7XHJcbiAgcm93czogbnVtYmVyO1xyXG4gIGdsb2JhbEZpbHRlcjogc3RyaW5nO1xyXG4gIGdsb2JhbEZpbHRlckNvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxuICBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvY2FsU3RvcmFnZSBleHRlbmRzIElDYXB0aW9uRGF0YUNoYW5nZWQge1xyXG4gIHBhZ2VTaXplOiBudW1iZXI7XHJcbiAgcGFnZUluZGV4OiBudW1iZXI7XHJcbiAgc29ydEZpZWxkOiBzdHJpbmc7XHJcbiAgc29ydE9yZGVyOiBTb3J0RGlyZWN0aW9uO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzdC1tYXRlcmlhbC10YWJsZVwiPlxyXG4gIEBpZiAoaXNMb2FkaW5nKCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj5cclxuICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPVwiYWNjZW50XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuXHJcbiAgQGlmIChzaG93VGFibGUpIHtcclxuICAgIDxzdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uXHJcbiAgICAgIFt0YWJsZVRpdGxlXT1cInRhYmxlVGl0bGUoKVwiXHJcbiAgICAgIFthbGxvd1BpY2tDb2x1bW5zXT1cImFsbG93UGlja0NvbHVtbnMoKVwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2goKVwiXHJcbiAgICAgIFthbGxvd1Jlb3JkZXJDb2x1bW5zXT1cImFsbG93UmVvcmRlckNvbHVtbnMoKVwiXHJcbiAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICBbaW5pdEZpbHRlcnNdPVwiaW5pdEZpbHRlcnNcIlxyXG4gICAgICBbaW5pdEdsb2JhbFNlYXJjaF09XCJpbml0R2xvYmFsU2VhcmNoXCJcclxuICAgICAgW3Nob3dDcmVhdGVCdXR0b25dPVwic2hvd0NyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkxhYmVsXT1cImNyZWF0ZUJ1dHRvbkxhYmVsKClcIlxyXG4gICAgICBbY3JlYXRlQnV0dG9uQWN0aW9uXT1cImNyZWF0ZUJ1dHRvbkFjdGlvbigpXCJcclxuICAgICAgW2FsbG93Q3JlYXRlUm93XT1cImFsbG93Q3JlYXRlUm93KClcIlxyXG4gICAgICBbZGlzYWJsZUNyZWF0ZUJ1dHRvbl09XCJkaXNhYmxlQ3JlYXRlQnV0dG9uKClcIlxyXG4gICAgICBbZXh0cmFDdXN0b21GaWx0ZXJdPVwiZXh0cmFDdXN0b21GaWx0ZXIoKVwiXHJcbiAgICAgIFtjcmVhdGluZ1Jvd109XCJjcmVhdGluZ1JvdygpXCJcclxuICAgICAgKGNhcHRpb25EYXRhQ2hhbmdlZCk9XCJjYXB0aW9uRGF0YUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgIChyZXNldFRhYmxlU2V0dGluZ3MpPVwicmVzZXRUYWJsZVNldHRpbmdzKClcIlxyXG4gICAgICAoYWRkTmV3Um93KT1cImFkZE5ld1JvdygpXCJcclxuICAgID48L3N0LW1hdGVyaWFsLXRhYmxlLWNhcHRpb24+XHJcbiAgfVxyXG5cclxuICA8dGFibGVcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ25vLWhvdmVyJzogIXJvd0NsaWNrQWN0aW9uKCksXHJcbiAgICAgICdpcy1leHBlbmRlZC10YWJsZSc6IGFsbG93RXh0ZW5kUm93KCksXHJcbiAgICAgICdjb21wYWN0LXZpZXcnOiBjb21wYWN0VmlldygpXHJcbiAgICB9XCJcclxuICAgIG1hdC10YWJsZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgbWF0U29ydFxyXG4gICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJhbGxvd0V4dGVuZFJvdygpXCJcclxuICA+XHJcbiAgICBAZm9yIChjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zOyB0cmFjayBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5maWVsZFwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi5hY3Rpb25zSW5NZW51IHx8IChjb2x1bW4uYWN0aW9ucyAmJiBtb2JpbGVWaWV3KCkgJiYgY29sdW1uLmFjdGlvbnMhLmxlbmd0aCA+IDEpID8gJzYwcHgnIDogY29sdW1uLndpZHRoXCJcclxuICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb2x1bW4uc29ydFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQGlmIChjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbnMtcm93LXNlbGVjdGluZycgJiYgIXNlbGVjdFJvd09ubHlPbmUoKSkge1xyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFJvd3MoKS5sZW5ndGggPiAwICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMCAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIH0gQGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbnMtcm93LWVkaXRpbmcnICYmIHNob3dFZGl0QWxsUm93cygpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIGVkaXQtYWxsLXJvd3MtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidHVybk9uQWxsRWRpdFJvd3MoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRWRpdCBhbGwgcm93c1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXRfYXJyb3dfZG93bjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXg7IGxldCBqID0gZGF0YUluZGV4XCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4uYWN0aW9uc0luTWVudSB8fCAoY29sdW1uLmFjdGlvbnMgJiYgbW9iaWxlVmlldygpICYmIGNvbHVtbi5hY3Rpb25zIS5sZW5ndGggPiAxKSA/ICc2MHB4JyA6IGNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHN0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsXHJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZWxlbWVudFwiXHJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCJnZXRBYnNvbHV0ZUluZGV4KGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaSlcIlxyXG4gICAgICAgICAgICBbcm93RGF0YUNvcHldPVwiXHJcbiAgICAgICAgICAgICAgYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHwgYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dFZGl0aW5nXT1cIlxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHxcclxuICAgICAgICAgICAgICAhIWFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbcm93SXNTZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgW3Jvd0lzRXhwYW5kZWRdPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSAoYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVwiXHJcbiAgICAgICAgICAgIFtjYW5FZGl0Um93VmFsaWRhdG9yXT1cImNhbkVkaXRSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtjYW5EZWxldGVSb3dWYWxpZGF0b3JdPVwiY2FuRGVsZXRlUm93VmFsaWRhdG9yKClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0Um93T25seU9uZV09XCJzZWxlY3RSb3dPbmx5T25lKClcIlxyXG4gICAgICAgICAgICBbaXNGaXJzdEVkaXRhYmxlQ29sdW1uXT1cImlzRmlyc3RFZGl0YWJsZUNvbHVtbihjb2x1bW4pXCJcclxuICAgICAgICAgICAgW2F1dG9TYXZlT25DaGFuZ2VdPVwiYXV0b1NhdmVPbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2FsbG93RWRpdFJvd109XCJhbGxvd0VkaXRSb3coKVwiXHJcbiAgICAgICAgICAgIFthbGxvd0VkaXRJbkVkaXRSb3ddPVwiYWxsb3dFZGl0SW5FZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbYWxsb3dEZWxldGVJbkVkaXRSb3ddPVwiYWxsb3dEZWxldGVJbkVkaXRSb3coKVwiXHJcbiAgICAgICAgICAgIFtmaWVsZEVycm9yXT1cInZhbGlkYXRpb25FcnJvcnNbZWxlbWVudC5pZF0/Lltjb2x1bW4uZmllbGRdXCJcclxuICAgICAgICAgICAgW21vYmlsZVZpZXddPVwibW9iaWxlVmlldygpXCJcclxuICAgICAgICAgICAgKGVkaXRSb3dFbWl0dGVyKT1cImVkaXRSb3coZWxlbWVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVSb3dFbWl0dGVyKT1cIlxyXG4gICAgICAgICAgICAgIGRlbGV0ZVJvdyhlbGVtZW50LCBjb2x1bW4sIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaSlcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKHNhdmVFZGl0Um93RW1pdHRlcik9XCJcclxuICAgICAgICAgICAgICBzYXZlRWRpdFJvdyhlbGVtZW50LCBjb2x1bW4sIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaSlcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKGNhbmNlbEVkaXRSb3dFbWl0dGVyKT1cImNhbmNlbEVkaXRSb3coZWxlbWVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RSb3dDaGFuZ2UpPVwic2VsZWN0Um93Q2hhbmdlZCgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgKGZpZWxkVmFsdWVDaGFuZ2VkKT1cIlxyXG4gICAgICAgICAgICAgIG9uRmllbGRWYWx1ZUNoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgJGV2ZW50LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGw+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBhbmRlZERldGFpbFwiPlxyXG4gICAgICA8dGRcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gZGF0YUluZGV4XCJcclxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1uc1N0cmluZy5sZW5ndGhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbC13cmFwcGVyXCJcclxuICAgICAgICAgIFtAZGV0YWlsRXhwYW5kXT1cImV4cGFuZGVkUm93SW5kZXgoKSA9PT0gaSA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZGVkLWVsZW1lbnQtZGV0YWlsXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRlbmRlZFJvd1RlbXBsYXRlKCkhXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiBlbGVtZW50LCByb3dJbmRleDogZXhwYW5kZWRSb3dJbmRleCgpIH1cIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwic2VsZWN0ZWRDb2x1bW5zU3RyaW5nXCI+PC90cj5cclxuICAgIDx0clxyXG4gICAgICBtYXQtcm93XHJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBzZWxlY3RlZENvbHVtbnNTdHJpbmc7IGxldCBpID0gZGF0YUluZGV4XCJcclxuICAgICAgW2NsYXNzLmV4cGFuZGVkLWV4cGFuZGVkLXJvd109XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IGlcIlxyXG4gICAgICAoY2xpY2spPVwiY2xpY2tSb3dBY3Rpb24ocm93LCBpKVwiXHJcbiAgICA+PC90cj5cclxuICAgIEBpZiAoYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiXHJcbiAgICAgICAgY2xhc3M9XCJleHRlbmRlZC1kZXRhaWwtcm93XCJcclxuICAgICAgPjwvdHI+XHJcbiAgICB9XHJcbiAgPC90YWJsZT5cclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDE1LCAyMCwgMjVdXCJcclxuICAgIFtsZW5ndGhdPVwiZGF0YUxlbmd0aCgpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG4gIDxzdC1tYXRlcmlhbC10YWJsZS1zZWxlY3RlZC1yb3dzXHJcbiAgICBbYWxsb3dTZWxlY3RSb3ddPVwiYWxsb3dTZWxlY3RSb3coKVwiXHJcbiAgICBbc2VsZWN0Um93T25seU9uZV09XCJzZWxlY3RSb3dPbmx5T25lKClcIlxyXG4gICAgW3NlbGVjdGVkUm93c109XCJzZWxlY3RlZFJvd3MoKVwiXHJcbiAgICBbc2VsZWN0aW9uRmllbGRMYWJlbF09XCJzZWxlY3Rpb25GaWVsZExhYmVsKClcIlxyXG4gICAgW3NlbGVjdFJvd1ZhbHVlRGlzcGxheV09XCJzZWxlY3RSb3dWYWx1ZURpc3BsYXkoKVwiXHJcbiAgICAocmVtb3ZlU2VsZWN0ZWRSb3cpPVwib25SZW1vdmVTZWxlY3RlZFJvdygkZXZlbnQpXCJcclxuICA+PC9zdC1tYXRlcmlhbC10YWJsZS1zZWxlY3RlZC1yb3dzPlxyXG48L2Rpdj5cclxuIl19
|
|
976
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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RUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FDekQ7Z0JBQ0QsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDekMsVUFBVSxDQUNSLHdCQUF3QixFQUN4QixPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDaEQ7YUFDRixDQUFDO1NBQ0g7OzRGQUVVLHNCQUFzQjtrQkF2QmxDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQU1oQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCO3dCQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLEtBQUssQ0FDSCxnQkFBZ0IsRUFDaEIsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUN6RDs0QkFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDt5QkFDRixDQUFDO3FCQUNIOzhMQU13QixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUVsQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZpZXcvdmlldy1zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgU3RCYXNlU2VydmljZSxcclxuICBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQsXHJcbn0gZnJvbSAnbmd4LXN0LWJhc2UtZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgU3RTbmFja0JhclNlcnZpY2UgfSBmcm9tICduZ3gtc3Qtc25hY2stYmFyJztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJQ2FwdGlvbkRhdGFDaGFuZ2VkLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcixcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFN0RGlhbG9nU2VydmljZSB9IGZyb20gJ25neC1zdC1kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXN0LW1hdGVyaWFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgJy4uLy4uLy4uLy4uL2Fzc2V0cy9iYXNlLXRhYmxlLnNjc3MnLFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgICdjb2xsYXBzZWQsdm9pZCcsXHJcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgYm9yZGVyOiAnbm9uZScgfSlcclxuICAgICAgKSxcclxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXHJcbiAgICAgICAgJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLFxyXG4gICAgICAgIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpXHJcbiAgICAgICksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuICBAVmlld0NoaWxkcmVuKE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50KVxyXG4gIHJvd0NlbGxzITogUXVlcnlMaXN0PE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50PjtcclxuXHJcbiAgc2hvd0dsb2JhbFNlYXJjaCA9IGlucHV0KGZhbHNlKTtcclxuXHJcbiAgdGFibGVUaXRsZSA9IGlucHV0KCcnKTtcclxuXHJcbiAgcGFnZVNpemUgPSBpbnB1dDxudW1iZXI+KDEwKTtcclxuXHJcbiAgZGF0YUxlbmd0aCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gIGFsbG93UGlja0NvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGxvY2FsU3RvcmFnZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgbGF6eUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaW5pdENvbHVtbnMgPSBpbnB1dDxTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdPihbXSk7XHJcblxyXG4gIHJvd0NsaWNrQWN0aW9uID0gaW5wdXQ8KHJvdzogYW55KSA9PiB2b2lkPigpO1xyXG5cclxuICBhbGxvd0VkaXRSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93RGVsZXRlSW5FZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIGFsbG93RWRpdEluRWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBzaG93RWRpdEFsbFJvd3MgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdHJ1ZSwgZmllbGQgY2hhbmdlcyBhcmUgc2F2ZWQgaW1tZWRpYXRlbHkgd2l0aG91dCByZXF1aXJpbmcgc2F2ZS9jYW5jZWwgYnV0dG9ucy5cclxuICAgKiBQZXJmZWN0IGZvciBxdWFudGl0eSBpbnB1dHMsIHRvZ2dsZXMsIG9yIHNlbGVjdGlvbiB0YWJsZXMgd2hlcmUgaW5zdGFudCB1cGRhdGVzIGFyZSBuZWVkZWQuXHJcbiAgICovXHJcbiAgYXV0b1NhdmVPbkNoYW5nZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY2FuRWRpdFJvd1ZhbGlkYXRvciA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKCkgPT4gdHJ1ZSk7XHJcblxyXG4gIGNhbkRlbGV0ZVJvd1ZhbGlkYXRvciA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKCkgPT4gdHJ1ZSk7XHJcblxyXG4gIGFsbG93U2VsZWN0Um93ID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICBzZWxlY3Rpb25GaWVsZExhYmVsID0gaW5wdXQoJycpO1xyXG5cclxuICBzZWxlY3RSb3dPbmx5T25lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmb3JtYXR0ZXIgdXNlZCB0byBkZXJpdmUgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGEgc2VsZWN0ZWQgcm93LlxyXG4gICAqXHJcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgc2ltcGxlIGZpZWxkIG5hbWUgcHJvdmlkZWQgYnkge0BsaW5rIHNlbGVjdGlvbkZpZWxkTGFiZWx9XHJcbiAgICogaXMgbm90IHN1ZmZpY2llbnQgKGZvciBleGFtcGxlLCB3aGVuIHlvdSBuZWVkIHRvIGNvbmNhdGVuYXRlIG11bHRpcGxlIGZpZWxkc1xyXG4gICAqIG9yIGFwcGx5IGN1c3RvbSBmb3JtYXR0aW5nIHRvIHRoZSBkaXNwbGF5ZWQgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogSWYgYm90aCB7QGxpbmsgc2VsZWN0aW9uRmllbGRMYWJlbH0gYW5kIGBzZWxlY3RSb3dWYWx1ZURpc3BsYXlgIGFyZSBzZXQsXHJcbiAgICogdGhpcyBmdW5jdGlvbiB0YWtlcyBwcmVjZWRlbmNlIGFuZCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIHZpc2libGUgdGV4dFxyXG4gICAqIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgcm93LlxyXG4gICAqL1xyXG4gIHNlbGVjdFJvd1ZhbHVlRGlzcGxheSA9IGlucHV0PChyb3c6IGFueSkgPT4gc3RyaW5nPigpO1xyXG5cclxuICBzaG93Q3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjcmVhdGVCdXR0b25MYWJlbCA9IGlucHV0KCdDcmVhdGUnKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uQWN0aW9uID0gaW5wdXQ8KCkgPT4gdm9pZD4oKCkgPT4ge30pO1xyXG5cclxuICBkaXNhYmxlQ3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0NyZWF0ZVJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dFeHRlbmRSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGV4dGVuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx7IGRhdGE6IGFueTsgcm93SW5kZXg6IG51bWJlciB9Pj4oKTtcclxuXHJcbiAgaW5pdFNlbGVjdGVkUm93ID0gaW5wdXQ8YW55PigpO1xyXG5cclxuICBleHRyYUN1c3RvbUZpbHRlciA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBmaWx0ZXIgbWV0aG9kIGFwcGxpZWQgdG8gYWxsIHJvd3MgaW4gdGhlIHRhYmxlLlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCByb3cgYW5kIHNob3VsZCByZXR1cm4gdHJ1ZSB0byBpbmNsdWRlIHRoZSByb3csIGZhbHNlIHRvIGV4Y2x1ZGUgaXQuXHJcbiAgICogQXBwbGllZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRhYmxlIGRhdGEgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3cgLSBUaGUgZGF0YSByb3cgdG8gZXZhbHVhdGVcclxuICAgKiBAcmV0dXJucyB0cnVlIHRvIGluY2x1ZGUgdGhlIHJvdyBpbiB0aGUgdGFibGUsIGZhbHNlIHRvIGV4Y2x1ZGUgaXRcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gT25seSBzaG93IGFjdGl2ZSB1c2Vyc1xyXG4gICAqIFtpbml0RmlsdGVyTWV0aG9kXT1cIihyb3cpID0+IHJvdy5pc0FjdGl2ZSA9PT0gdHJ1ZVwiXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIFNob3cgdXNlcnMgd2l0aCBxdWFudGl0eSBncmVhdGVyIHRoYW4gMTBcclxuICAgKiBbaW5pdEZpbHRlck1ldGhvZF09XCIocm93KSA9PiByb3cucXVhbnRpdHkgPiAxMFwiXHJcbiAgICovXHJcbiAgaW5pdEZpbHRlck1ldGhvZCA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW1tdXRhYmxlIERhdGEgUGF0dGVybiAtIE9wdGltaXplZCB2ZXJzaW9uIHdpdGggSUQgY2xlYW51cFxyXG4gICAqL1xyXG4gIGRhdGEgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG5cclxuICBzZXROZXdEYXRhV2l0aG91dFJlZnJlc2ggPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbXBhY3RWaWV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhY3Rpb25Sb3dXaWR0aCA9IGlucHV0PHN0cmluZz4oJzkwcHgnKTtcclxuXHJcbiAgbG9hZERhdGEgPSBvdXRwdXQ8U3RNYXRlcmlhbFRhYmxlTG9hZERhdGE+KCk7XHJcblxyXG4gIHNhdmVFZGl0ZWRSb3cgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzYXZlQ3JlYXRlZFJvdyA9IG91dHB1dDxhbnk+KCk7XHJcblxyXG4gIHJvd0RlbGV0ZWQgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzZWxlY3RSb3dDaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGZpZWxkIHZhbHVlIGNoYW5nZXMgYW5kIGF1dG9TYXZlT25DaGFuZ2UgaXMgZW5hYmxlZC5cclxuICAgKiBQYXJlbnQgc2hvdWxkIHVwZGF0ZSB0aGVpciBkYXRhIGltbWVkaWF0ZWx5LlxyXG4gICAqL1xyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHtcclxuICAgIHJvdzogYW55O1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBpbmRleDogbnVtYmVyO1xyXG4gIH0+KCk7XHJcblxyXG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGluaXRMb2NhbENvbHVtbnMgPSBzaWduYWw8U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGV4cGFuZGVkUm93SW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNyZWF0aW5nUm93ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmcpLmxlbmd0aCA+IDApO1xyXG5cclxuICBjb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnNTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRhYmxlU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuXHJcbiAgaW5pdEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICBpbml0R2xvYmFsU2VhcmNoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgc2hvd1RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgYWN0aXZlUm93c0VkaXRpbmc6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSB9ID0ge307XHJcbiAgYWN0aXZlUm93c0NyZWF0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICAvLyBUcmFjayB2YWxpZGF0aW9uIGVycm9yczogeyByb3dJZDogeyBmaWVsZE5hbWU6IGVycm9yTWVzc2FnZSB9IH1cclxuICB2YWxpZGF0aW9uRXJyb3JzOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcclxuXHJcbiAgbW9iaWxlVmlldyA9IHNpZ25hbChmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZURhdGE6IFN0TWF0ZXJpYWxUYWJsZUxvY2FsU3RvcmFnZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc25hY2tiYXI6IFN0U25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHN0VGFibGVUcmFuc2xhdGlvbnM6IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgc3REaWFsb2dTZXJ2aWNlOiBTdERpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSAxMTAwO1xyXG4gICAgICBpZiAodGhpcy5tb2JpbGVWaWV3KCkgIT09IGlzTW9iaWxlKSB7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVWaWV3LnNldChpc01vYmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgbW9iaWxlIHZpZXcgc3RhdGVcclxuICAgIHRoaXMubW9iaWxlVmlldy5zZXQoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSAxMTAwKTtcclxuXHJcbiAgICAvLyBFZmZlY3QgdG8gaGFuZGxlIGRhdGEgY2hhbmdlc1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgaW5wdXREYXRhID0gdGhpcy5kYXRhKCk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShpbnB1dERhdGEpO1xyXG4gICAgfSwge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfSk7XHJcblxyXG4gICAgLy8gRWZmZWN0IHRvIHJlYXBwbHkgZmlsdGVyIHdoZW4gaW5pdEZpbHRlck1ldGhvZCBjaGFuZ2VzXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAvLyBUcmFjayB0aGUgZmlsdGVyIG1ldGhvZCB0byB0cmlnZ2VyIGVmZmVjdCBvbiBjaGFuZ2VcclxuICAgICAgdGhpcy5pbml0RmlsdGVyTWV0aG9kKCk7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmICF0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGZpbHRlciBwcmVkaWNhdGUgdG8gdXNlIHRoZSBuZXcgZmlsdGVyIG1ldGhvZFxyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyUHJlZGljYXRlID1cclxuICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgICAgIC8vIFRyaWdnZXIgZmlsdGVyIHJlYXBwbGljYXRpb24gYnkgc2V0dGluZyBmaWx0ZXIgc3RyaW5nIGFnYWluXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UuZmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50RmlsdGVyID0gdGhpcy50YWJsZVNvdXJjZS5maWx0ZXI7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9ICcnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSBjdXJyZW50RmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9LCB7YWxsb3dTaWduYWxXcml0ZXM6IHRydWV9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1ucygpO1xyXG4gICAgdGhpcy5sb2FkTG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgdGhpcy52YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXRJbml0VGFibGUoKTtcclxuICAgIHRoaXMuc2V0U29ydFBhZ2VTdWJzY3JpcHRpb24oKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG5cclxuICAgIHRoaXMubmdEZXN0cm95ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLm5nRGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgdHVybk9uQWxsRWRpdFJvd3MoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF0gPSB7IC4uLnJvdyB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FwdGlvbkRhdGFDaGFuZ2VkKGV2ZW50OiBJQ2FwdGlvbkRhdGFDaGFuZ2VkKSB7XHJcbiAgICBjb25zdCBsb2FkTGF6eURhdGEgPVxyXG4gICAgICBldmVudC5nbG9iYWxTZWFyY2ggIT09IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2ggfHxcclxuICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQuZmlsdGVycykgIT09XHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMpO1xyXG5cclxuICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgLi4uZXZlbnQsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgcGFnZUluZGV4OiBsb2FkTGF6eURhdGEgPyAwIDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4LFxyXG4gICAgICBzb3J0RmllbGQ6IHRoaXMuc29ydC5hY3RpdmUsXHJcbiAgICAgIHNvcnRPcmRlcjogdGhpcy5zb3J0LmRpcmVjdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG5cclxuICAgIGlmIChsb2FkTGF6eURhdGEpIHtcclxuICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLl9lbWl0UGFnZUV2ZW50KDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICB0aGlzLmluaXRGaWx0ZXJzID0ge307XHJcbiAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSAnJztcclxuICAgIHRoaXMuc29ydC5zb3J0KHsgaWQ6ICcnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5ldyByb3cgdG8gdGhlIGxvY2FsIHRhYmxlIGNvcHkgb25seS5cclxuICAgKiBUaGUgcm93IGlzIHRyYWNrZWQgaW4gYWN0aXZlUm93c0NyZWF0aW5nIHVudGlsIHNhdmVkLlxyXG4gICAqIFdoZW4gc2F2ZWQsIHRoZSBwYXJlbnQgcmVjZWl2ZXMgdGhlIGV2ZW50IHRocm91Z2ggc2F2ZU5ld0NyZWF0ZWRSb3cgb3V0cHV0LlxyXG4gICAqIFRoZSBwYXJlbnQgZGVjaWRlcyB3aGV0aGVyIHRvIGFjY2VwdCBhbmQgYWRkIHRvIHRoZWlyIGRhdGEgYXJyYXkuXHJcbiAgICovXHJcbiAgYWRkTmV3Um93KCkge1xyXG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChudWxsKTtcclxuICAgIC8vIENyZWF0ZSBuZXcgcm93IHdpdGggZ2VuZXJhdGVkIElEIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cclxuICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge1xyXG4gICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBmaWVsZHMgd2l0aCBudWxsL2RlZmF1bHQgdmFsdWVzXHJcbiAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICBuZXdSb3dbY29sLmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCB0byBsb2NhbCB0YWJsZSBjb3B5IG9ubHlcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGEsIG5ld1Jvd107XHJcbiAgICB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tuZXdSb3cuaWRdID0geyAuLi5uZXdSb3cgfTtcclxuXHJcbiAgICAvLyBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgdG8gc2hvdyB0aGUgbmV3IHJvd1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxhc3RQYWdlKCk7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdID0geyAuLi5yb3cgfTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy5zdERpYWxvZ1NlcnZpY2VcclxuICAgICAgLnNob3dDb25maXJtYXRpb24oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByb3c/JylcclxuICAgICAgLnBpcGUoZmlsdGVyKFN0QmFzZVNlcnZpY2Uubm90TnVsbCkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSB0aGlzLnRhYmxlU291cmNlLmRhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucm93RGVsZXRlZC5lbWl0KHsgcm93LCBpbmRleDogYWJzb2x1dGVJbmRleCB9KTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBhbmQgc2F2ZXMgYSByb3cgKGVpdGhlciBuZXcgb3IgZWRpdGVkKS5cclxuICAgKiBFbWl0cyB0aGUgdmFsaWRhdGVkIHJvdyB0byB0aGUgcGFyZW50IHRocm91Z2ggZWl0aGVyOlxyXG4gICAqIC0gc2F2ZU5ld0NyZWF0ZWRSb3c6IGZvciBuZXdseSBjcmVhdGVkIHJvd3NcclxuICAgKiAtIHNhdmVOZXdSb3c6IGZvciBlZGl0ZWQgZXhpc3Rpbmcgcm93c1xyXG4gICAqXHJcbiAgICogVGhlIHBhcmVudCBpcyByZXNwb25zaWJsZSBmb3I6XHJcbiAgICogLSBQZXJzaXN0aW5nIHRoZSBjaGFuZ2UgKGUuZy4sIEFQSSBjYWxsKVxyXG4gICAqIC0gVXBkYXRpbmcgdGhlaXIgZGF0YSBhcnJheVxyXG4gICAqIC0gSGFuZGxpbmcgZXJyb3JzL3JlamVjdGlvbnNcclxuICAgKlxyXG4gICAqIFRoZSBsaWJyYXJ5IHVwZGF0ZXMgaXRzIGxvY2FsIGNvcHkgb3B0aW1pc3RpY2FsbHkuXHJcbiAgICovXHJcbiAgc2F2ZUVkaXRSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgY29uc3Qgcm93RGF0YSA9IGlzQ3JlYXRpbmdUaGlzUm93XHJcbiAgICAgID8gdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXVxyXG4gICAgICA6IHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSByb3dcclxuICAgIGlmICghdGhpcy52YWxpZGF0ZVJvdyhyb3dEYXRhLCByb3cpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudFxyXG4gICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgIHRoaXMuc2F2ZUNyZWF0ZWRSb3cuZW1pdCh7IC4uLnJvd0RhdGEgfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlRWRpdGVkUm93LmVtaXQoeyByb3c6IHsgLi4ucm93RGF0YSB9LCBpbmRleDogYWJzb2x1dGVJbmRleCB9KTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgdGFibGUgY29weVxyXG4gICAgdGhpcy51cGRhdGVSb3dJbkRhdGFTb3VyY2UoYWJzb2x1dGVJbmRleCwgcm93LCByb3dEYXRhKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBzcGVjaWZpYyByb3cgaXMgYmVpbmcgY3JlYXRlZFxyXG4gICAgY29uc3QgaXNDcmVhdGluZ1RoaXNSb3cgPSAhIXRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICBkYXRhID0+IGRhdGEuaWQgIT09IHJvdy5pZFxyXG4gICAgICApO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYXIgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIHRoaXMgcm93XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvdy5pZF0pIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGltbWVkaWF0ZSBmaWVsZCB2YWx1ZSBjaGFuZ2VzIGZvciBhdXRvLXNhdmUgbW9kZS5cclxuICAgKiBJbiBhdXRvLXNhdmUgbW9kZSwgbmdNb2RlbCBpcyBib3VuZCBkaXJlY3RseSB0byByb3dEYXRhLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBpdC5cclxuICAgKiBXZSBvbmx5IGVtaXQgdG8gcGFyZW50IHNvIHRoZXkgY2FuIHVwZGF0ZSB0aGVpciBkYXRhIGNvcHkuXHJcbiAgICovXHJcbiAgb25GaWVsZFZhbHVlQ2hhbmdlZChcclxuICAgIHJvdzogYW55LFxyXG4gICAgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGFbYWJzb2x1dGVJbmRleF1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWVsZCBpZiBhdXRvU2F2ZU9uQ2hhbmdlIGlzIGVuYWJsZWRcclxuICAgIGlmICh0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICAvLyBVc2UgdmFsaWRhdGVSb3cgd2l0aCBzaW5nbGUgY29sdW1uIHRvIHZhbGlkYXRlIGp1c3QgdGhpcyBmaWVsZFxyXG4gICAgICB0aGlzLnZhbGlkYXRlUm93KHJvdywgcm93LCBjb2x1bW4pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgdG8gcGFyZW50IGltbWVkaWF0ZWx5XHJcbiAgICAvLyBUaGUgcm93IG9iamVjdCBpcyBhbHJlYWR5IHVwZGF0ZWQgYnkgbmdNb2RlbCBiaW5kaW5nXHJcbiAgICB0aGlzLmZpZWxkVmFsdWVDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICByb3c6IHsgLi4ucm93IH0sXHJcbiAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgaW5kZXg6IGFic29sdXRlSW5kZXgsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcGFyZVJvd3MoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYUlkID0gYT8uaWQgPz8gYTtcclxuICAgIGNvbnN0IGJJZCA9IGI/LmlkID8/IGI7XHJcbiAgICByZXR1cm4gYUlkID09PSBiSWQgPyAwIDogMTtcclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cygpLnNvbWUociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgPT09IDApO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd3MoKS5sZW5ndGg7XHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsUm93cyhldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+XHJcbiAgICAgIHNlbGVjdGVkLmZpbHRlcihyID0+IHRoaXMuY29tcGFyZVJvd3Mociwgcm93KSAhPT0gMClcclxuICAgICk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVTZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZFJvdyhyb3cpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlZCh2YWx1ZTogYm9vbGVhbiwgcm93OiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoW3Jvd10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PiBbLi4uc2VsZWN0ZWQsIHJvd10pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT5cclxuICAgICAgICBzZWxlY3RlZC5maWx0ZXIociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgIT09IDApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICBjbGlja1Jvd0FjdGlvbihyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZFJvd0luZGV4KCkgPT09IGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChudWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXguc2V0KGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpO1xyXG4gICAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZWQoIWlzU2VsZWN0ZWQsIHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5yb3dDbGlja0FjdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGlja0FjdGlvbigpIShyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBYnNvbHV0ZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0b3JcclxuICAgICAgICA/IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICsgaW5kZXhcclxuICAgICAgICA6IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCkge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLmZpZWxkID09PSAnYWN0aW9ucycgJiYgIWNvbHVtbi50eXBlKSB7XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSAnYWN0aW9ucyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sdW1uLmZpbHRlclR5cGUgJiYgY29sdW1uLmZpbHRlcikge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCh0aGlzLmFsbG93RWRpdFJvdygpIHx8IHRoaXMuYXV0b1NhdmVPbkNoYW5nZSgpKSAmJiAhY29sdW1uLnJvd0VkaXRUeXBlKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2RhdGUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdjdXN0b20tdGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpIHtcclxuICAgIGxldCBmaWx0ZXJGdW5jdGlvbiA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zOiB7XHJcbiAgICAgICAgW2NvbHVtbjogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogc3RyaW5nO1xyXG4gICAgICB9ID0gSlNPTi5wYXJzZShmaWx0ZXIpO1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtc0tleXMgPSBPYmplY3Qua2V5cyhzZWFyY2hUZXJtcyk7XHJcbiAgICAgIGxldCBzZWFyY2hPayA9IHRydWU7XHJcbiAgICAgIGxldCBzZWFyY2hPa0dsb2JhbCA9IHRydWU7XHJcblxyXG4gICAgICBzZWFyY2hUZXJtc0tleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBrZXkgIT09ICdzdEdsb2JhbFNlYXJjaCcgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmluY2x1ZGVzKGtleSkgJiZcclxuICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoVGVybXNba2V5XS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUZyb206IHN0cmluZyB8IG51bGwgPSAoXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSBhcyBbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF1cclxuICAgICAgICAgICAgKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRvOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0ZUZyb20gfHwgZGF0ZVRvKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG1wQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0ga2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRtcENvbHVtbiAmJiB0bXBDb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlRnJvbVZhbHVlID0gZGF0ZUZyb20gPyBuZXcgRGF0ZShkYXRlRnJvbSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRvVmFsdWUgPSBkYXRlVG9cclxuICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVUbykuc2V0RGF0ZShuZXcgRGF0ZShkYXRlVG8pLmdldERhdGUoKSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgRGF0ZShkYXRhW2tleV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRlRnJvbVZhbHVlICYmIGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID1cclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlRnJvbVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhID49IGRhdGVGcm9tVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgZGF0YVtrZXldICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgKHNlYXJjaFRlcm1zW2tleV0ubWF0Y2hNb2RlID09PSAnZXF1YWwnXHJcbiAgICAgICAgICAgICAgICAgID8gZGF0YVtrZXldID09PSBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIDogZGF0YVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICkgIT09IC0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHNlYXJjaE9rR2xvYmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFbY29sXSkge1xyXG4gICAgICAgICAgICBzZWFyY2hPa0dsb2JhbCA9XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgfHxcclxuICAgICAgICAgICAgICBkYXRhW2NvbF1cclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zLnN0R2xvYmFsU2VhcmNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSAhPT0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWx0ZXIgbWV0aG9kIGlmIHByb3ZpZGVkXHJcbiAgICAgIGxldCBjdXN0b21GaWx0ZXJPayA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmluaXRGaWx0ZXJNZXRob2QoKSkge1xyXG4gICAgICAgIGN1c3RvbUZpbHRlck9rID0gdGhpcy5pbml0RmlsdGVyTWV0aG9kKCkhKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VhcmNoT2sgJiYgc2VhcmNoT2tHbG9iYWwgJiYgY3VzdG9tRmlsdGVyT2s7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbHRlckZ1bmN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0TGF6eUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIGNvbnN0IGxvYWREYXRhUmVxdWVzdDogU3RNYXRlcmlhbFRhYmxlTG9hZERhdGEgPSB7XHJcbiAgICAgICAgZmlyc3Q6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlckNvbHVtbnM6IHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgICBzb3J0RmllbGQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5sb2FkRGF0YS5lbWl0KGxvYWREYXRhUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyxcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSEsXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFN0b3JhZ2VEYXRhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbml0VGFibGUoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQgJiYgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcikge1xyXG4gICAgICBjb25zdCBkaXNhYmxlQ2xlYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyIH0pO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgaWQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZGlzYWJsZUNsZWFyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSEpIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHNvcnRGaWVsZDogcmVzLmFjdGl2ZSxcclxuICAgICAgICAgIHNvcnRPcmRlcjogcmVzLmRpcmVjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICB0eXBlOiBjb2wudHlwZSA/IGNvbC50eXBlIDogJ3N0cmluZycsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zT3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5jb2x1bW5zT3JkZXIpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXJcclxuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikpXHJcbiAgICAgICAgICAubWFwKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pISksXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgICAgIGNvbHVtbiA9PiAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2x1bW4uZmllbGQpXHJcbiAgICAgICAgKSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc1Zpc2libGUoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICB2aXNpYmxlOlxyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5maWVsZCkgfHxcclxuICAgICAgICAgICAgIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sLmZpZWxkKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiBjb2wudmlzaWJsZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBjb25zdCBsb2NhbFN0b3JhZ2VEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhKTtcclxuXHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2VEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VEYXRhKTtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzID0gdGhpcy52YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChcclxuICAgICAgICAvLyAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICAvLyB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KG9sZEZpbHRlcnM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB8IHN0cmluZztcclxuICB9KTogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSB7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2xkRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICBpZiAodHlwZW9mIG9sZEZpbHRlcnNba2V5XSA9PT0gJ29iamVjdCcgJiYgb2xkRmlsdGVyc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyc1trZXldID0gb2xkRmlsdGVyc1trZXldIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXHJcbiAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGdsb2JhbFNlYXJjaDogJycsXHJcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBmaWx0ZXJzOiB7fSxcclxuICAgICAgc29ydEZpZWxkOiAnJyxcclxuICAgICAgc29ydE9yZGVyOiAnYXNjJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcclxuICAgIC8vIEdldCBhbGwgZWRpdGFibGUgY29sdW1ucyBpbiBvcmRlclxyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbiAmJiBjb2wudmlzaWJsZVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmIGVkaXRhYmxlQ29sdW1uc1swXS5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvdyhcclxuICAgIHJvd0RhdGE6IGFueSxcclxuICAgIG9yaWdpbmFsUm93OiBhbnksXHJcbiAgICBzaW5nbGVDb2x1bW4/OiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGVkaXRhYmxlQ29sdW1ucyA9IHNpbmdsZUNvbHVtblxyXG4gICAgICA/IFtzaW5nbGVDb2x1bW5dXHJcbiAgICAgIDogdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbik7XHJcbiAgICBjb25zdCByb3dJZCA9IG9yaWdpbmFsUm93LmlkO1xyXG5cclxuICAgIC8vIEZvciBzaW5nbGUgZmllbGQgdmFsaWRhdGlvbiwgcHJlc2VydmUgZXhpc3RpbmcgZXJyb3JzIGZvciBvdGhlciBmaWVsZHNcclxuICAgIGxldCBlcnJvcnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHNpbmdsZUNvbHVtblxyXG4gICAgICA/IHsgLi4udGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXSB9XHJcbiAgICAgIDoge307XHJcblxyXG4gICAgLy8gQ2xlYXIgYWxsIGVycm9ycyBpZiB2YWxpZGF0aW5nIGVudGlyZSByb3dcclxuICAgIGlmICghc2luZ2xlQ29sdW1uICYmIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF0pIHtcclxuICAgICAgZXJyb3JzID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xyXG4gICAgbGV0IGZpcnN0RXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgZWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgIGxldCBmaWVsZEhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgIGlmIChjb2wuY3VzdG9tRWRpdFJvd1ZhbGlkYXRvcikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbC5jdXN0b21FZGl0Um93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdLFxyXG4gICAgICAgICAgb3JpZ2luYWxSb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgIG9yaWdpbmFsUm93XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICBlcnJvcnNbY29sLmZpZWxkXSA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICBmaWVsZEhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXN1bHQuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFmaWVsZEhhc0Vycm9yICYmIGNvbC5lZGl0Q29sdW1uUmVxdWlyZWQpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2NvbC5oZWFkZXJ9IGlzIHJlcXVpcmVkYDtcclxuICAgICAgICAgIGVycm9yc1tjb2wuZmllbGRdID0gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgZmllbGRIYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2xlYXIgZXJyb3IgZm9yIHRoaXMgZmllbGQgaWYgdmFsaWRhdGlvbiBwYXNzZWRcclxuICAgICAgaWYgKCFmaWVsZEhhc0Vycm9yICYmIHNpbmdsZUNvbHVtbikge1xyXG4gICAgICAgIGRlbGV0ZSBlcnJvcnNbY29sLmZpZWxkXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2FwdHVyZSBmaXJzdCBlcnJvciBmb3Igc25hY2tiYXIgKG9ubHkgd2hlbiB2YWxpZGF0aW5nIGVudGlyZSByb3cpXHJcbiAgICAgIGlmICghc2luZ2xlQ29sdW1uICYmIGZpZWxkSGFzRXJyb3IgJiYgIWZpcnN0RXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgZmlyc3RFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBlcnJvcnNcclxuICAgIGlmIChPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXSA9IGVycm9ycztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNob3cgc25hY2tiYXIgb25seSB3aGVuIHZhbGlkYXRpbmcgZW50aXJlIHJvdyAob24gc2F2ZSlcclxuICAgIGlmICghc2luZ2xlQ29sdW1uICYmIGhhc0Vycm9ycyAmJiBmaXJzdEVycm9yTWVzc2FnZSkge1xyXG4gICAgICB0aGlzLnNuYWNrYmFyLmVycm9yKGZpcnN0RXJyb3JNZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgcmV0dXJuICFoYXNFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJvd0luRGF0YVNvdXJjZShpbmRleDogbnVtYmVyLCByb3c6IGFueSwgcm93RGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMudGFibGVTb3VyY2UuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4ucm93IH07XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgICAgLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIHVwZGF0ZWRSb3dbY29sLmZpZWxkXSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YVtpbmRleF0gPSB1cGRhdGVkUm93O1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMuc2V0KFsuLi50aGlzLmluaXRDb2x1bW5zKCldKTtcclxuXHJcbiAgICAvLyBBZGQgc3BlY2lhbCBjb2x1bW5zXHJcbiAgICB0aGlzLmFkZFNlbGVjdENvbHVtbklmTmVlZGVkKCk7XHJcbiAgICB0aGlzLmFkZEVkaXRDb2x1bW5JZk5lZWRlZCgpO1xyXG4gICAgdGhpcy5hZGRFeHRlbmRDb2x1bW5JZk5lZWRlZCgpO1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc0ZpbHRlclJvd0VkaXRUeXBlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRTZWxlY3RDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LXNlbGVjdGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6ICc0MHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93U2VsZWN0Q29sdW1uTGFiZWwsXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pbml0U2VsZWN0ZWRSb3coKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoWy4uLnRoaXMuaW5pdFNlbGVjdGVkUm93KCldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRWRpdENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93RWRpdFJvdygpIHx8IHRoaXMuYXV0b1NhdmVPbkNoYW5nZSgpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1lZGl0aW5nJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlZGl0aW5nQ29sdW1uOiBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCA9IHtcclxuICAgICAgZmllbGQ6ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LWVkaXRpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6IHRoaXMuYWN0aW9uUm93V2lkdGgoKSxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93QWN0aW9uc0NvbHVtbkxhYmVsLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobGFzdENvbHVtbj8udHlwZSAhPT0gJ2FjdGlvbnMnKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5jb2x1bW5zLCBlZGl0aW5nQ29sdW1uXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICBuZXdDb2x1bW5zLnNwbGljZShuZXdDb2x1bW5zLmxlbmd0aCAtIDEsIDAsIGVkaXRpbmdDb2x1bW4pO1xyXG4gICAgICByZXR1cm4gbmV3Q29sdW1ucztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHRlbmRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1leHRlbmRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1leHRlbmRpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6ICczMHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93RXh0ZW5kQ29sdW1uTGFiZWwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ29sdW1uQnlUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+XHJcbiAgICAgIGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgIT09IHR5cGUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5pbml0RmlsdGVycyk7XHJcbiAgICBpZiAoZmlsdGVyS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmlsdGVyS2V5cykge1xyXG4gICAgICBjb25zdCBjb2wgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5maW5kKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGtleSk7XHJcbiAgICAgIGlmICghY29sKSBjb250aW51ZTtcclxuXHJcbiAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sLCB0aGlzLmluaXRGaWx0ZXJzW2tleV0pLFxyXG4gICAgICAgIG1hdGNoTW9kZTogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3RmlsdGVycykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5pdEZpbHRlcnMpKSB7XHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSBuZXdGaWx0ZXJzO1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGNvbDogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICBmaWx0ZXI6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclxyXG4gICk6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSB7XHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJykge1xyXG4gICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA/PyBudWxsKSBhcyBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKVxyXG4gICAgICAgID8gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgOiBbbnVsbCwgbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPz8gJycpIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgZGF0YSBjaGFuZ2VzIGZyb20gdGhlIGlucHV0IHNpZ25hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShkYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFkYXRhIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMuc2V0TmV3RGF0YVdpdGhvdXRSZWZyZXNoKClcclxuICAgICkge1xyXG4gICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdpZCcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG9iamVjdHMgaW4gcGxhY2UgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBhbmQgYXZvaWQgbG9zaW5nIGZvY3VzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKChleGlzdGluZ1JvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBvYmplY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhW2luZGV4XVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEZvcmNlIHRhYmxlIHRvIGRldGVjdCBjaGFuZ2VzIHdpdGhvdXQgcmVjcmVhdGluZyByb3dzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGFsbCBjaGlsZCByb3cgY2VsbCBjb21wb25lbnRzXHJcbiAgICAgIGlmICh0aGlzLnJvd0NlbGxzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgICAgY2VsbC50cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZGF0YSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgKGV4Y2x1ZGluZyBJRHMgd2UgbWlnaHQgaGF2ZSBhZGRlZClcclxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSB1cGRhdGVzIHdoZW4gcGFyZW50IHNlbmRzIHRoZSBzYW1lIGRhdGFcclxuICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFXaXRob3V0SWRzID0gZGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHsgLi4ucm93IH07XHJcbiAgICAgICAgICBkZWxldGUgdG1wLmlkO1xyXG4gICAgICAgICAgcmV0dXJuIHRtcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YVdpdGhvdXRJZHMgPSB0aGlzLl9kYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhV2l0aG91dElkcykgPT09XHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50RGF0YVdpdGhvdXRJZHMpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5IHRvIGF2b2lkIG11dGF0aW5nIHBhcmVudCBkYXRhXHJcbiAgICAgIGxldCBjbG9uZWREYXRhID0gZGF0YS5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XHJcblxyXG4gICAgICAvLyBBZGQgSURzIGlmIG5lZWRlZCAob25seSBvbiB0aGUgY29weSwgb25seSBpZiByb3cgZG9lc24ndCBoYXZlIGFuIGlkKVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkgfHwgdGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgYWRkIGlkIGlmIGl0IGRvZXNuJ3QgZXhpc3QgLSBkb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgSURzXHJcbiAgICAgICAgICBpZiAoIXJvdy5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2RhdGEgPSBjbG9uZWREYXRhO1xyXG5cclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBjbG9uZWREYXRhO1xyXG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhIHtcclxuICBmaXJzdDogbnVtYmVyO1xyXG4gIHJvd3M6IG51bWJlcjtcclxuICBnbG9iYWxGaWx0ZXI6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBJQ2FwdGlvbkRhdGFDaGFuZ2VkIHtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGVcIj5cclxuICBAaWYgKGlzTG9hZGluZygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImFjY2VudFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoc2hvd1RhYmxlKSB7XHJcbiAgICA8c3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvblxyXG4gICAgICBbdGFibGVUaXRsZV09XCJ0YWJsZVRpdGxlKClcIlxyXG4gICAgICBbYWxsb3dQaWNrQ29sdW1uc109XCJhbGxvd1BpY2tDb2x1bW5zKClcIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoKClcIlxyXG4gICAgICBbYWxsb3dSZW9yZGVyQ29sdW1uc109XCJhbGxvd1Jlb3JkZXJDb2x1bW5zKClcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2luaXRGaWx0ZXJzXT1cImluaXRGaWx0ZXJzXCJcclxuICAgICAgW2luaXRHbG9iYWxTZWFyY2hdPVwiaW5pdEdsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtzaG93Q3JlYXRlQnV0dG9uXT1cInNob3dDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25MYWJlbF09XCJjcmVhdGVCdXR0b25MYWJlbCgpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkFjdGlvbl09XCJjcmVhdGVCdXR0b25BY3Rpb24oKVwiXHJcbiAgICAgIFthbGxvd0NyZWF0ZVJvd109XCJhbGxvd0NyZWF0ZVJvdygpXCJcclxuICAgICAgW2Rpc2FibGVDcmVhdGVCdXR0b25dPVwiZGlzYWJsZUNyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2V4dHJhQ3VzdG9tRmlsdGVyXT1cImV4dHJhQ3VzdG9tRmlsdGVyKClcIlxyXG4gICAgICBbY3JlYXRpbmdSb3ddPVwiY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgIChjYXB0aW9uRGF0YUNoYW5nZWQpPVwiY2FwdGlvbkRhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAocmVzZXRUYWJsZVNldHRpbmdzKT1cInJlc2V0VGFibGVTZXR0aW5ncygpXCJcclxuICAgICAgKGFkZE5ld1Jvdyk9XCJhZGROZXdSb3coKVwiXHJcbiAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uPlxyXG4gIH1cclxuXHJcbiAgPHRhYmxlXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICduby1ob3Zlcic6ICFyb3dDbGlja0FjdGlvbigpLFxyXG4gICAgICAnaXMtZXhwZW5kZWQtdGFibGUnOiBhbGxvd0V4dGVuZFJvdygpLFxyXG4gICAgICAnY29tcGFjdC12aWV3JzogY29tcGFjdFZpZXcoKVxyXG4gICAgfVwiXHJcbiAgICBtYXQtdGFibGVcclxuICAgIFtkYXRhU291cmNlXT1cInRhYmxlU291cmNlXCJcclxuICAgIG1hdFNvcnRcclxuICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiYWxsb3dFeHRlbmRSb3coKVwiXHJcbiAgPlxyXG4gICAgQGZvciAoY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uczsgdHJhY2sgY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uZmllbGRcIj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4uYWN0aW9uc0luTWVudSB8fCAoY29sdW1uLmFjdGlvbnMgJiYgbW9iaWxlVmlldygpICYmIGNvbHVtbi5hY3Rpb25zIS5sZW5ndGggPiAxKSA/ICc2MHB4JyA6IGNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnNvcnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnICYmICFzZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMCAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyAmJiBzaG93RWRpdEFsbFJvd3MoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZCBlZGl0LWFsbC1yb3dzLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInR1cm5PbkFsbEVkaXRSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgYWxsIHJvd3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0X2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4OyBsZXQgaiA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLmFjdGlvbnNJbk1lbnUgfHwgKGNvbHVtbi5hY3Rpb25zICYmIG1vYmlsZVZpZXcoKSAmJiBjb2x1bW4uYWN0aW9ucyEubGVuZ3RoID4gMSkgPyAnNjBweCcgOiBjb2x1bW4ud2lkdGhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzdC1tYXRlcmlhbC10YWJsZS1yb3ctY2VsbFxyXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgIFtyb3dEYXRhXT1cImVsZW1lbnRcIlxyXG4gICAgICAgICAgICBbcm93SW5kZXhdPVwiZ2V0QWJzb2x1dGVJbmRleChhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXCJcclxuICAgICAgICAgICAgW3Jvd0RhdGFDb3B5XT1cIlxyXG4gICAgICAgICAgICAgIGFjdGl2ZVJvd3NFZGl0aW5nW2VsZW1lbnQuaWRdIHx8IGFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbcm93RWRpdGluZ109XCJcclxuICAgICAgICAgICAgICAhIWFjdGl2ZVJvd3NFZGl0aW5nW2VsZW1lbnQuaWRdIHx8XHJcbiAgICAgICAgICAgICAgISFhY3RpdmVSb3dzQ3JlYXRpbmdbZWxlbWVudC5pZF1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3Jvd0lzU2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIFtyb3dJc0V4cGFuZGVkXT1cImV4cGFuZGVkUm93SW5kZXgoKSA9PT0gKGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaSlcIlxyXG4gICAgICAgICAgICBbY2FuRWRpdFJvd1ZhbGlkYXRvcl09XCJjYW5FZGl0Um93VmFsaWRhdG9yKClcIlxyXG4gICAgICAgICAgICBbY2FuRGVsZXRlUm93VmFsaWRhdG9yXT1cImNhbkRlbGV0ZVJvd1ZhbGlkYXRvcigpXCJcclxuICAgICAgICAgICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgICAgICAgICAgW2lzRmlyc3RFZGl0YWJsZUNvbHVtbl09XCJpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uKVwiXHJcbiAgICAgICAgICAgIFthdXRvU2F2ZU9uQ2hhbmdlXT1cImF1dG9TYXZlT25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgIFthbGxvd0VkaXRSb3ddPVwiYWxsb3dFZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbYWxsb3dFZGl0SW5FZGl0Um93XT1cImFsbG93RWRpdEluRWRpdFJvdygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlSW5FZGl0Um93XT1cImFsbG93RGVsZXRlSW5FZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbZmllbGRFcnJvcl09XCJ2YWxpZGF0aW9uRXJyb3JzW2VsZW1lbnQuaWRdPy5bY29sdW1uLmZpZWxkXVwiXHJcbiAgICAgICAgICAgIFttb2JpbGVWaWV3XT1cIm1vYmlsZVZpZXcoKVwiXHJcbiAgICAgICAgICAgIChlZGl0Um93RW1pdHRlcik9XCJlZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoZGVsZXRlUm93RW1pdHRlcik9XCJcclxuICAgICAgICAgICAgICBkZWxldGVSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChzYXZlRWRpdFJvd0VtaXR0ZXIpPVwiXHJcbiAgICAgICAgICAgICAgc2F2ZUVkaXRSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChjYW5jZWxFZGl0Um93RW1pdHRlcik9XCJjYW5jZWxFZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoc2VsZWN0Um93Q2hhbmdlKT1cInNlbGVjdFJvd0NoYW5nZWQoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIChmaWVsZFZhbHVlQ2hhbmdlZCk9XCJcclxuICAgICAgICAgICAgICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICRldmVudC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgICAgPHRkXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnNTdHJpbmcubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWwtd3JhcHBlclwiXHJcbiAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IGkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSgpIVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogZWxlbWVudCwgcm93SW5kZXg6IGV4cGFuZGVkUm93SW5kZXgoKSB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZC1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSBpXCJcclxuICAgICAgKGNsaWNrKT1cImNsaWNrUm93QWN0aW9uKHJvdywgaSlcIlxyXG4gICAgPjwvdHI+XHJcbiAgICBAaWYgKGFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgPHRyXHJcbiAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gICAgICAgIGNsYXNzPVwiZXh0ZW5kZWQtZGV0YWlsLXJvd1wiXHJcbiAgICAgID48L3RyPlxyXG4gICAgfVxyXG4gIDwvdGFibGU+XHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAxNSwgMjAsIDI1XVwiXHJcbiAgICBbbGVuZ3RoXT1cImRhdGFMZW5ndGgoKVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8c3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93c1xyXG4gICAgW2FsbG93U2VsZWN0Um93XT1cImFsbG93U2VsZWN0Um93KClcIlxyXG4gICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzKClcIlxyXG4gICAgW3NlbGVjdGlvbkZpZWxkTGFiZWxdPVwic2VsZWN0aW9uRmllbGRMYWJlbCgpXCJcclxuICAgIFtzZWxlY3RSb3dWYWx1ZURpc3BsYXldPVwic2VsZWN0Um93VmFsdWVEaXNwbGF5KClcIlxyXG4gICAgKHJlbW92ZVNlbGVjdGVkUm93KT1cIm9uUmVtb3ZlU2VsZWN0ZWRSb3coJGV2ZW50KVwiXHJcbiAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93cz5cclxuPC9kaXY+XHJcbiJdfQ==
|