keevo-components 2.0.156 → 2.0.158
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.component.mjs +4 -3
- package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +6 -3
- package/esm2022/lib/components/kv-icon/kv-icon.component.mjs +3 -3
- package/esm2022/lib/components/kv-table-draggable/kv-table-draggable.component.mjs +70 -44
- package/esm2022/lib/components/kv-widget-card/kv-widget-card.component.mjs +3 -3
- package/fesm2022/keevo-components.mjs +81 -51
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-button/kv-button.component.d.ts +1 -1
- package/lib/components/kv-content-viewer/kv-content-viewer.component.d.ts +2 -1
- package/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.d.ts +2 -1
- package/lib/components/kv-table-draggable/kv-table-draggable.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -115,6 +115,20 @@ export class KvTableDraggableComponent {
|
|
|
115
115
|
this.isEmptyDataSource = computed(() => {
|
|
116
116
|
return JSON.stringify(this.dataSourceSignal()) === JSON.stringify(this.dataSourceMock);
|
|
117
117
|
});
|
|
118
|
+
this.currentPageActions = computed(() => {
|
|
119
|
+
const currentPageData = this.currentPageData();
|
|
120
|
+
return currentPageData?.map((x) => this.config.actions
|
|
121
|
+
? this.config.actions.map((y) => mapToMenuItem(y, x))
|
|
122
|
+
: []) || [];
|
|
123
|
+
});
|
|
124
|
+
this.dragDropData = computed(() => {
|
|
125
|
+
if (this.config.lazy) {
|
|
126
|
+
return this.currentPageData();
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return this.dataSourceSignal();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
118
132
|
this.columnsFilter = computed(() => {
|
|
119
133
|
const dynamicColumns = (this.tableConfig()?.columns ?? []).filter(col => !col.fixedColumn);
|
|
120
134
|
return [...dynamicColumns, ...this.deletedColuns];
|
|
@@ -135,7 +149,9 @@ export class KvTableDraggableComponent {
|
|
|
135
149
|
}
|
|
136
150
|
const startIndex = this.first();
|
|
137
151
|
const pageSize = this.rows();
|
|
138
|
-
|
|
152
|
+
const safeStartIndex = Math.min(startIndex, Math.max(0, sourceData.length - pageSize));
|
|
153
|
+
const safeEndIndex = Math.min(safeStartIndex + pageSize, sourceData.length);
|
|
154
|
+
return sourceData.slice(safeStartIndex, safeEndIndex);
|
|
139
155
|
});
|
|
140
156
|
this.isRowSelectable = this.isRowSelectable.bind(this);
|
|
141
157
|
}
|
|
@@ -143,14 +159,22 @@ export class KvTableDraggableComponent {
|
|
|
143
159
|
if (this.isDragging) {
|
|
144
160
|
return;
|
|
145
161
|
}
|
|
146
|
-
if (this.dataSource
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
162
|
+
if (this.dataSource) {
|
|
163
|
+
const hasLengthChanged = this.dataSource.length !== this.currDataSource.length;
|
|
164
|
+
const hasContentChanged = !hasLengthChanged &&
|
|
165
|
+
JSON.stringify(this.dataSource) !== JSON.stringify(this.currDataSource);
|
|
166
|
+
if (hasLengthChanged || hasContentChanged) {
|
|
167
|
+
this.currDataSource = [...this.dataSource];
|
|
168
|
+
this.dataSourceSignal.set([...this.dataSource]);
|
|
169
|
+
this.createTableActions();
|
|
170
|
+
if (hasLengthChanged && this.paginator) {
|
|
171
|
+
const totalPages = Math.ceil(this.dataSource.length / this.rows());
|
|
172
|
+
const currentPage = Math.floor(this.first() / this.rows()) + 1;
|
|
173
|
+
if (currentPage > totalPages && totalPages > 0) {
|
|
174
|
+
this.first.set((totalPages - 1) * this.rows());
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
154
178
|
}
|
|
155
179
|
}
|
|
156
180
|
loadingSkeletonUtilities() {
|
|
@@ -328,6 +352,8 @@ export class KvTableDraggableComponent {
|
|
|
328
352
|
};
|
|
329
353
|
this.onPaginate.emit(objeto);
|
|
330
354
|
this.actionsOffset = event.first;
|
|
355
|
+
this.first.set(event.first);
|
|
356
|
+
this.rows.set(event.rows);
|
|
331
357
|
this.createTableActions();
|
|
332
358
|
}
|
|
333
359
|
}
|
|
@@ -655,12 +681,12 @@ export class KvTableDraggableComponent {
|
|
|
655
681
|
const previewTable = document.createElement('table');
|
|
656
682
|
const previewTbody = document.createElement('tbody');
|
|
657
683
|
const previewRow = document.createElement('tr');
|
|
658
|
-
previewTable.style.cssText = `
|
|
659
|
-
width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
|
|
660
|
-
margin: 0;
|
|
661
|
-
border-collapse: collapse;
|
|
662
|
-
table-layout: fixed;
|
|
663
|
-
background: white;
|
|
684
|
+
previewTable.style.cssText = `
|
|
685
|
+
width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
|
|
686
|
+
margin: 0;
|
|
687
|
+
border-collapse: collapse;
|
|
688
|
+
table-layout: fixed;
|
|
689
|
+
background: white;
|
|
664
690
|
`;
|
|
665
691
|
if (parentTable) {
|
|
666
692
|
previewTable.className = parentTable.className;
|
|
@@ -674,38 +700,38 @@ export class KvTableDraggableComponent {
|
|
|
674
700
|
originalCells.forEach((originalCell, index) => {
|
|
675
701
|
const previewCell = originalCell.cloneNode(true);
|
|
676
702
|
const cellRect = originalCell.getBoundingClientRect();
|
|
677
|
-
previewCell.style.cssText = `
|
|
678
|
-
width: ${cellRect.width}px;
|
|
679
|
-
min-width: ${cellRect.width}px;
|
|
680
|
-
max-width: ${cellRect.width}px;
|
|
681
|
-
height: ${cellRect.height}px;
|
|
682
|
-
padding: ${window.getComputedStyle(originalCell).padding};
|
|
683
|
-
text-align: ${window.getComputedStyle(originalCell).textAlign};
|
|
684
|
-
vertical-align: ${window.getComputedStyle(originalCell).verticalAlign};
|
|
685
|
-
border: none;
|
|
686
|
-
background: transparent;
|
|
687
|
-
pointer-events: none;
|
|
688
|
-
box-sizing: border-box;
|
|
689
|
-
overflow: hidden;
|
|
690
|
-
white-space: nowrap;
|
|
691
|
-
text-overflow: ellipsis;
|
|
703
|
+
previewCell.style.cssText = `
|
|
704
|
+
width: ${cellRect.width}px;
|
|
705
|
+
min-width: ${cellRect.width}px;
|
|
706
|
+
max-width: ${cellRect.width}px;
|
|
707
|
+
height: ${cellRect.height}px;
|
|
708
|
+
padding: ${window.getComputedStyle(originalCell).padding};
|
|
709
|
+
text-align: ${window.getComputedStyle(originalCell).textAlign};
|
|
710
|
+
vertical-align: ${window.getComputedStyle(originalCell).verticalAlign};
|
|
711
|
+
border: none;
|
|
712
|
+
background: transparent;
|
|
713
|
+
pointer-events: none;
|
|
714
|
+
box-sizing: border-box;
|
|
715
|
+
overflow: hidden;
|
|
716
|
+
white-space: nowrap;
|
|
717
|
+
text-overflow: ellipsis;
|
|
692
718
|
`;
|
|
693
719
|
previewRow.appendChild(previewCell);
|
|
694
720
|
});
|
|
695
721
|
previewTbody.appendChild(previewRow);
|
|
696
722
|
previewTable.appendChild(previewTbody);
|
|
697
723
|
preview.appendChild(previewTable);
|
|
698
|
-
preview.style.cssText = `
|
|
699
|
-
display: block;
|
|
700
|
-
background: white;
|
|
701
|
-
border: 1px solid rgba(var(--kv-color-system), 0.2);
|
|
702
|
-
border-radius: 8px;
|
|
703
|
-
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
|
|
704
|
-
z-index: 1000;
|
|
705
|
-
overflow: hidden;
|
|
706
|
-
width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
|
|
707
|
-
max-width: 90vw;
|
|
708
|
-
pointer-events: none;
|
|
724
|
+
preview.style.cssText = `
|
|
725
|
+
display: block;
|
|
726
|
+
background: white;
|
|
727
|
+
border: 1px solid rgba(var(--kv-color-system), 0.2);
|
|
728
|
+
border-radius: 8px;
|
|
729
|
+
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
|
|
730
|
+
z-index: 1000;
|
|
731
|
+
overflow: hidden;
|
|
732
|
+
width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
|
|
733
|
+
max-width: 90vw;
|
|
734
|
+
pointer-events: none;
|
|
709
735
|
`;
|
|
710
736
|
setTimeout(() => {
|
|
711
737
|
if (preview) {
|
|
@@ -724,11 +750,11 @@ export class KvTableDraggableComponent {
|
|
|
724
750
|
this.isDragging = false;
|
|
725
751
|
}
|
|
726
752
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableDraggableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i3.TelefonePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
727
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableDraggableComponent, selector: "kv-table-draggable", inputs: { first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, ellipsisText: { classPropertyName: "ellipsisText", publicName: "ellipsisText", isSignal: true, isRequired: false, transformFunction: null }, isLoadingSkeleton: { classPropertyName: "isLoadingSkeleton", publicName: "isLoadingSkeleton", isSignal: true, isRequired: false, transformFunction: null }, filterButton: { classPropertyName: "filterButton", publicName: "filterButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonBadge: { classPropertyName: "filterButtonBadge", publicName: "filterButtonBadge", isSignal: true, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: false, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, defaultSortField: { classPropertyName: "defaultSortField", publicName: "defaultSortField", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: false, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: false, isRequired: false, transformFunction: null }, filterColumnsBtn: { classPropertyName: "filterColumnsBtn", publicName: "filterColumnsBtn", isSignal: false, isRequired: false, transformFunction: null }, replaceEmptyValues: { classPropertyName: "replaceEmptyValues", publicName: "replaceEmptyValues", isSignal: false, isRequired: false, transformFunction: null }, filtrosAvancados: { classPropertyName: "filtrosAvancados", publicName: "filtrosAvancados", isSignal: false, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: false, isRequired: false, transformFunction: null }, isTableScrollable: { classPropertyName: "isTableScrollable", publicName: "isTableScrollable", isSignal: false, isRequired: false, transformFunction: null }, tableCaptalized: { classPropertyName: "tableCaptalized", publicName: "tableCaptalized", isSignal: false, isRequired: false, transformFunction: null }, rowTrackBy: { classPropertyName: "rowTrackBy", publicName: "rowTrackBy", isSignal: false, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: false, isRequired: false, transformFunction: null }, disabledHeaderCheckbox: { classPropertyName: "disabledHeaderCheckbox", publicName: "disabledHeaderCheckbox", isSignal: false, isRequired: false, transformFunction: null }, enableDragDrop: { classPropertyName: "enableDragDrop", publicName: "enableDragDrop", isSignal: false, isRequired: false, transformFunction: null }, dragDropDisabled: { classPropertyName: "dragDropDisabled", publicName: "dragDropDisabled", isSignal: false, isRequired: false, transformFunction: null }, applyStyle: { classPropertyName: "applyStyle", publicName: "applyStyle", isSignal: false, isRequired: false, transformFunction: null }, pageLinksOptions: { classPropertyName: "pageLinksOptions", publicName: "pageLinksOptions", isSignal: false, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { first: "firstChange", rows: "rowsChange", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange", onRowReorder: "onRowReorder" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true, isSignal: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n #table\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows()\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n\r\n cdkDropList\r\n [cdkDropListData]=\"currentPageData()\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"vertical\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\r\n >\r\n @if (config.enableFilter) {\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n } @if(filterButton()) {\r\n <p-button\r\n styleClass=\"kv-button small tertiary text-xs font-medium\"\r\n label=\"Filtrar\"\r\n icon=\"pi pi-filter\"\r\n [badge]=\"filterButtonBadge()\"\r\n badgeClass=\"text-gray-800\"\r\n class=\"text-xs\"\r\n (onClick)=\"op.toggle($event)\"\r\n ></p-button>\r\n }\r\n\r\n <p-overlayPanel #op>\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'left'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"(action.items && action.items.length > 0) || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (enableDragDrop) {\r\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\r\n </th>\r\n }\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n (cdkDragStarted)=\"onDragStarted($event)\"\r\n (cdkDragEnded)=\"onDragEnded()\"\r\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\r\n [cdkDragData]=\"selectedItems\"\r\n\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n\r\n @if (enableDragDrop) {\r\n <td cdkDragHandle>\r\n <span class=\"material-symbols-outlined text-sm\">\r\n drag_indicator\r\n </span>\r\n </td>\r\n }\r\n\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"\r\n ellipsisText() && returnMaxWidth()(col.width)\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <!-- more_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i11.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i14.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i18.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }] }); }
|
|
753
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableDraggableComponent, selector: "kv-table-draggable", inputs: { first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, ellipsisText: { classPropertyName: "ellipsisText", publicName: "ellipsisText", isSignal: true, isRequired: false, transformFunction: null }, isLoadingSkeleton: { classPropertyName: "isLoadingSkeleton", publicName: "isLoadingSkeleton", isSignal: true, isRequired: false, transformFunction: null }, filterButton: { classPropertyName: "filterButton", publicName: "filterButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonBadge: { classPropertyName: "filterButtonBadge", publicName: "filterButtonBadge", isSignal: true, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: false, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, defaultSortField: { classPropertyName: "defaultSortField", publicName: "defaultSortField", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: false, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: false, isRequired: false, transformFunction: null }, filterColumnsBtn: { classPropertyName: "filterColumnsBtn", publicName: "filterColumnsBtn", isSignal: false, isRequired: false, transformFunction: null }, replaceEmptyValues: { classPropertyName: "replaceEmptyValues", publicName: "replaceEmptyValues", isSignal: false, isRequired: false, transformFunction: null }, filtrosAvancados: { classPropertyName: "filtrosAvancados", publicName: "filtrosAvancados", isSignal: false, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: false, isRequired: false, transformFunction: null }, isTableScrollable: { classPropertyName: "isTableScrollable", publicName: "isTableScrollable", isSignal: false, isRequired: false, transformFunction: null }, tableCaptalized: { classPropertyName: "tableCaptalized", publicName: "tableCaptalized", isSignal: false, isRequired: false, transformFunction: null }, rowTrackBy: { classPropertyName: "rowTrackBy", publicName: "rowTrackBy", isSignal: false, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: false, isRequired: false, transformFunction: null }, disabledHeaderCheckbox: { classPropertyName: "disabledHeaderCheckbox", publicName: "disabledHeaderCheckbox", isSignal: false, isRequired: false, transformFunction: null }, enableDragDrop: { classPropertyName: "enableDragDrop", publicName: "enableDragDrop", isSignal: false, isRequired: false, transformFunction: null }, dragDropDisabled: { classPropertyName: "dragDropDisabled", publicName: "dragDropDisabled", isSignal: false, isRequired: false, transformFunction: null }, applyStyle: { classPropertyName: "applyStyle", publicName: "applyStyle", isSignal: false, isRequired: false, transformFunction: null }, pageLinksOptions: { classPropertyName: "pageLinksOptions", publicName: "pageLinksOptions", isSignal: false, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { first: "firstChange", rows: "rowsChange", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange", onRowReorder: "onRowReorder" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true, isSignal: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<div class=\"kv-table-container\">\n @if (config) {\n <p-table\n #dt\n #table\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows()\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n [first]=\"first()\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n (onSort)=\"onSort($event)\"\n (onPage)=\"onPage($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\n [responsive]=\"true\"\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n\n cdkDropList\n [cdkDropListData]=\"dragDropData()\"\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"vertical\"\n >\n @if (config.enableCation) {\n <ng-template pTemplate=\"caption\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\n [style.padding.rem]=\"0.1\"\n >\n <div class=\"col-12 flex flex-column\">\n @if (config.title) {\n <div class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n } @if (config.subtitle) {\n <div class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n widthPage() < 768 ? 'col-10' : 'col-12'\n }} gap-1 p-0\"\n >\n @if (config.enableFilter) {\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"widthPage() > 800\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n [placeholder]=\"searchPlaceholder\"\n autocomplete=\"off\"\n #inputField\n class=\"text-sm col-6\"\n />\n } @if(filterColumnsBtn) {\n <div #botaoFiltro>\n <kv-button\n id=\"botaoFiltro\"\n [icon]=\"'align_vertical_top'\"\n (onClick)=\"abrirMenuFiltro($event)\"\n severity=\"tertiary\"\n pTooltip=\"Ocultar/Exibir colunas\"\n size=\"small\"\n >\n </kv-button>\n </div>\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card styleClass=\"p-1\">\n <div\n class=\"flex flex-column text-medium w-15rem p-1\"\n *ngFor=\"let col of columnsFilter()\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n } @if(filterButton()) {\n <p-button\n styleClass=\"kv-button small tertiary text-xs font-medium\"\n label=\"Filtrar\"\n icon=\"pi pi-filter\"\n [badge]=\"filterButtonBadge()\"\n badgeClass=\"text-gray-800\"\n class=\"text-xs\"\n (onClick)=\"op.toggle($event)\"\n ></p-button>\n }\n\n <p-overlayPanel #op>\n <ng-content select=\"[filtro]\"> </ng-content>\n </p-overlayPanel>\n </div>\n\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\n @for (action of config.actionsLote; track i; let i = $index) {\n <div class=\"flex align-items-center justify-content-center\">\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\n (getOrExecute(action.visible, selectedItems) ?? true)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'left'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n size=\"small\"\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\n [items]=\"action.items || []\"\n [popup]=\"(action.items && action.items.length > 0) || false\"\n />\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n }\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @if (enableDragDrop) {\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\n </th>\n }\n @if (config.enableSelect) {\n <th>\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n [disabled]=\"disabledHeaderCheckbox\"\n ></p-tableHeaderCheckbox>\n </th>\n } @for (col of columns; track $index) {\n <th\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div\n class=\"flex flex-row align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n >\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\n @if (col.sortable) {\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\n } @if (col.headerTooltip) {\n <span\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n }\n </div>\n </th>\n } @if (config.actions && config.actions.length > 0) {\n <th></th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n let-rowIndex=\"rowIndex\"\n >\n <tr\n cdkDrag\n cdkDragLockAxis=\"y\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\n [cdkDragData]=\"selectedItems\"\n\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{\n capitalize: tableCaptalized,\n last: rowIndex === dataSource.length - 1\n }\"\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\n >\n\n @if (enableDragDrop) {\n <td cdkDragHandle>\n <span class=\"material-symbols-outlined text-sm\">\n drag_indicator\n </span>\n </td>\n }\n\n @if (config.enableSelect) {\n <td style=\"width: 8px !important\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n } @for (col of columns; track $index) {\n <ng-container>\n @if (rowgroup && !col.template) {\n <td\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n class=\"{{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }}\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\n !isEmptyDataSource()) {\n <span\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"\n ellipsisText() && returnMaxWidth()(col.width)\n \"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </span>\n\n @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n\n } @if (isSwitchField(col)) {\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </ng-template>\n </td>\n } @if (!rowgroup && !col.grouped && !col.template) {\n <td\n #tableCell\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n @if(!isEmptyDataSource()) {\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row gap-2 align-items-center ' +\n (col?.centralize && 'justify-content-center')\n \"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\n @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n }\n </span>\n } @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n } @if (isSwitchField(col)) {\n\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n }\n </ng-template>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </td>\n } @if (col.template) {\n <td\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n >\n @if (getCustomTemplate(col.template.name)) {\n\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && ' justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\n [style.background-color]=\"col.tagColor(rowData, col)\"\n ></div>\n } @if(!isEmptyDataSource()) {\n\n <div class=\"w-full\">\n <ng-container\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n />\n </div>\n }\n </div>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <p-skeleton\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\n ></p-skeleton>\n } }\n </td>\n }\n </ng-container>\n } @if (config.actions && config.actions.length > 0) {\n <td>\n <div class=\"flex flex-row justify-content-end w-full\">\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <!-- more_vert -->\n more_horiz\n </span>\n\n <p-tieredMenu\n #menu\n [popup]=\"true\"\n [model]=\"currentPageActions()[rowIndex]\"\n appendTo=\"body\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n [pTooltip]=\"item.tooltip\"\n tooltipPosition=\"left\"\n class=\"cursor-pointer\"\n >\n <span class=\"text-xs\">\n {{ item.label }}\n </span>\n </div>\n </ng-template>\n </p-tieredMenu>\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\n }\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i11.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i14.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i18.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }] }); }
|
|
728
754
|
}
|
|
729
755
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableDraggableComponent, decorators: [{
|
|
730
756
|
type: Component,
|
|
731
|
-
args: [{ selector: 'kv-table-draggable', template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n #table\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows()\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n\r\n cdkDropList\r\n [cdkDropListData]=\"currentPageData()\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"vertical\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\r\n >\r\n @if (config.enableFilter) {\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n } @if(filterButton()) {\r\n <p-button\r\n styleClass=\"kv-button small tertiary text-xs font-medium\"\r\n label=\"Filtrar\"\r\n icon=\"pi pi-filter\"\r\n [badge]=\"filterButtonBadge()\"\r\n badgeClass=\"text-gray-800\"\r\n class=\"text-xs\"\r\n (onClick)=\"op.toggle($event)\"\r\n ></p-button>\r\n }\r\n\r\n <p-overlayPanel #op>\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'left'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"(action.items && action.items.length > 0) || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (enableDragDrop) {\r\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\r\n </th>\r\n }\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n (cdkDragStarted)=\"onDragStarted($event)\"\r\n (cdkDragEnded)=\"onDragEnded()\"\r\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\r\n [cdkDragData]=\"selectedItems\"\r\n\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n\r\n @if (enableDragDrop) {\r\n <td cdkDragHandle>\r\n <span class=\"material-symbols-outlined text-sm\">\r\n drag_indicator\r\n </span>\r\n </td>\r\n }\r\n\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"\r\n ellipsisText() && returnMaxWidth()(col.width)\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <!-- more_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"] }]
|
|
757
|
+
args: [{ selector: 'kv-table-draggable', template: "<div class=\"kv-table-container\">\n @if (config) {\n <p-table\n #dt\n #table\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows()\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n [first]=\"first()\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n (onSort)=\"onSort($event)\"\n (onPage)=\"onPage($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\n [responsive]=\"true\"\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n\n cdkDropList\n [cdkDropListData]=\"dragDropData()\"\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"vertical\"\n >\n @if (config.enableCation) {\n <ng-template pTemplate=\"caption\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\n [style.padding.rem]=\"0.1\"\n >\n <div class=\"col-12 flex flex-column\">\n @if (config.title) {\n <div class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n } @if (config.subtitle) {\n <div class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n widthPage() < 768 ? 'col-10' : 'col-12'\n }} gap-1 p-0\"\n >\n @if (config.enableFilter) {\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"widthPage() > 800\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n [placeholder]=\"searchPlaceholder\"\n autocomplete=\"off\"\n #inputField\n class=\"text-sm col-6\"\n />\n } @if(filterColumnsBtn) {\n <div #botaoFiltro>\n <kv-button\n id=\"botaoFiltro\"\n [icon]=\"'align_vertical_top'\"\n (onClick)=\"abrirMenuFiltro($event)\"\n severity=\"tertiary\"\n pTooltip=\"Ocultar/Exibir colunas\"\n size=\"small\"\n >\n </kv-button>\n </div>\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card styleClass=\"p-1\">\n <div\n class=\"flex flex-column text-medium w-15rem p-1\"\n *ngFor=\"let col of columnsFilter()\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n } @if(filterButton()) {\n <p-button\n styleClass=\"kv-button small tertiary text-xs font-medium\"\n label=\"Filtrar\"\n icon=\"pi pi-filter\"\n [badge]=\"filterButtonBadge()\"\n badgeClass=\"text-gray-800\"\n class=\"text-xs\"\n (onClick)=\"op.toggle($event)\"\n ></p-button>\n }\n\n <p-overlayPanel #op>\n <ng-content select=\"[filtro]\"> </ng-content>\n </p-overlayPanel>\n </div>\n\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\n @for (action of config.actionsLote; track i; let i = $index) {\n <div class=\"flex align-items-center justify-content-center\">\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\n (getOrExecute(action.visible, selectedItems) ?? true)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'left'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n size=\"small\"\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\n [items]=\"action.items || []\"\n [popup]=\"(action.items && action.items.length > 0) || false\"\n />\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n }\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @if (enableDragDrop) {\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\n </th>\n }\n @if (config.enableSelect) {\n <th>\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n [disabled]=\"disabledHeaderCheckbox\"\n ></p-tableHeaderCheckbox>\n </th>\n } @for (col of columns; track $index) {\n <th\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div\n class=\"flex flex-row align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n >\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\n @if (col.sortable) {\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\n } @if (col.headerTooltip) {\n <span\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n }\n </div>\n </th>\n } @if (config.actions && config.actions.length > 0) {\n <th></th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n let-rowIndex=\"rowIndex\"\n >\n <tr\n cdkDrag\n cdkDragLockAxis=\"y\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\n [cdkDragData]=\"selectedItems\"\n\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{\n capitalize: tableCaptalized,\n last: rowIndex === dataSource.length - 1\n }\"\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\n >\n\n @if (enableDragDrop) {\n <td cdkDragHandle>\n <span class=\"material-symbols-outlined text-sm\">\n drag_indicator\n </span>\n </td>\n }\n\n @if (config.enableSelect) {\n <td style=\"width: 8px !important\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n } @for (col of columns; track $index) {\n <ng-container>\n @if (rowgroup && !col.template) {\n <td\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n class=\"{{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }}\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\n !isEmptyDataSource()) {\n <span\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"\n ellipsisText() && returnMaxWidth()(col.width)\n \"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </span>\n\n @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n\n } @if (isSwitchField(col)) {\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </ng-template>\n </td>\n } @if (!rowgroup && !col.grouped && !col.template) {\n <td\n #tableCell\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n @if(!isEmptyDataSource()) {\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row gap-2 align-items-center ' +\n (col?.centralize && 'justify-content-center')\n \"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\n @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n }\n </span>\n } @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n } @if (isSwitchField(col)) {\n\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n }\n </ng-template>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </td>\n } @if (col.template) {\n <td\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n >\n @if (getCustomTemplate(col.template.name)) {\n\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && ' justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\n [style.background-color]=\"col.tagColor(rowData, col)\"\n ></div>\n } @if(!isEmptyDataSource()) {\n\n <div class=\"w-full\">\n <ng-container\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n />\n </div>\n }\n </div>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <p-skeleton\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\n ></p-skeleton>\n } }\n </td>\n }\n </ng-container>\n } @if (config.actions && config.actions.length > 0) {\n <td>\n <div class=\"flex flex-row justify-content-end w-full\">\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <!-- more_vert -->\n more_horiz\n </span>\n\n <p-tieredMenu\n #menu\n [popup]=\"true\"\n [model]=\"currentPageActions()[rowIndex]\"\n appendTo=\"body\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n [pTooltip]=\"item.tooltip\"\n tooltipPosition=\"left\"\n class=\"cursor-pointer\"\n >\n <span class=\"text-xs\">\n {{ item.label }}\n </span>\n </div>\n </ng-template>\n </p-tieredMenu>\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\n }\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"] }]
|
|
732
758
|
}], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i3.TelefonePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { _templates: [{
|
|
733
759
|
type: Input,
|
|
734
760
|
args: ['templates']
|
|
@@ -823,4 +849,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
823
849
|
type: HostListener,
|
|
824
850
|
args: ['document:click', ['$event']]
|
|
825
851
|
}] } });
|
|
826
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLWRyYWdnYWJsZS9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZHJhZ2dhYmxlL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZCLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZHLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUdmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJdEQsT0FBTyxFQUNMLFlBQVksRUFFWixhQUFhLEdBQ2QsTUFBTSx3Q0FBd0MsQ0FBQztBQUtoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFckYsTUFBTSxVQUFVLEdBQ2QsMHFQQUEwcVAsQ0FBQztBQU83cVAsTUFBTSxPQUFPLHlCQUF5QjtJQStEcEMsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ25CLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsWUFBWSxFQUFFLEtBQUss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QUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0RyYWdTdGFydCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgc2lnbmFsLFxyXG4gIHZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVBhZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmltcG9ydCB7IENwZkNucGpQaXBlIH0gZnJvbSAnLi4vLi4vYXBpL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0T3JFeGVjdXRlLFxyXG4gIFZhbHVlT3JGbixcclxuICBtYXBUb01lbnVJdGVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9hcGkvcGlwZXMvdGVsZWZvbmUucGlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYXBpL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuXHJcbmNvbnN0IGltZ0RlZmF1bHQgPVxyXG4gICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10YWJsZS1kcmFnZ2FibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUYWJsZURyYWdnYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgXHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZW51RmlsdHJvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgY2hlY2tib3hDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWVudUl0ZW1zITogTWVudUl0ZW1bXTtcclxuICB0YWJsZUFjdGlvbnM6IE1lbnVJdGVtW11bXSA9IFtdO1xyXG4gIGN1cnJEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGlvbnNPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcHJlcG9zaXRpb25zID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICdkZScsICdkYScsICdkbycsICdlbScsICdubycsICduYScsICdwYXJhJywgJ3BvcicsICdjb20nLCAnYScsICdvJywgJ2UnXHJcbiAgXSk7XHJcbiAgcHJpdmF0ZSByb21hbk51bWVyYWxzID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJywgJ1ZJJywgJ1ZJSScsICdWSUlJJywgJ0lYJywgJ1gnLCAnWEknLCAnWElJJywgJ1hJSUknLCAnWElWJywgJ1hWJyxcclxuICAgICdYVkknLCAnWFZJSScsICdYVklJSScsICdYSVgnLCAnWFgnXHJcbiAgXSk7XHJcbiAgcHJpdmF0ZSBzaWdsYXMgPSBuZXcgU2V0PHN0cmluZz4oW1xyXG4gICAgJ1VJJywgJ1VYJywgJ1RJJ1xyXG4gIF0pO1xyXG5cclxuICBmaXJzdCA9IG1vZGVsPG51bWJlcj4oMCk7XHJcbiAgcm93cyA9IG1vZGVsPG51bWJlcj4oNSk7XHJcbiAgXHJcbiAgdGFibGVDZWxsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZUNlbGwnKTtcclxuXHJcbiAgZWxsaXBzaXNUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTG9hZGluZ1NrZWxldG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGZpbHRlckJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBmaWx0ZXJCdXR0b25CYWRnZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ29uZmlnID0gc2lnbmFsPFRhYmxlQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHdpZHRoUGFnZSA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG5cclxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbnNCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByZXBsYWNlRW1wdHlWYWx1ZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcm93VHJhY2tCeTogKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gYW55ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbTtcclxuICBASW5wdXQoKSByZXNwb25zaXZlTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZEhlYWRlckNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlRHJhZ0Ryb3A6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRyYWdEcm9wRGlzYWJsZWQ6IChpdGVtOiBhbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcclxuICBASW5wdXQoKSBhcHBseVN0eWxlOiBGdW5jdGlvbiA9IChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pID0+ICcnO1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMudGFibGVDb25maWcuc2V0KHtcclxuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXModGhpcy50YWJsZUNvbmZpZygpISk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUGFnaW5hdGU6IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2luYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Sb3dSZW9yZGVyOiBFdmVudEVtaXR0ZXI8e3ByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW06IGFueSwgbmV3T3JkZXI6IGFueVtdfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVGaWx0cm9EaXYnKSBtZW51RmlsdHJvRGl2ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dEZpZWxkJykgaW5wdXRGaWVsZCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcclxuICBAVmlld0NoaWxkKFRhYmxlKSBwdGFibGUhOiBUYWJsZTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlndXJhY2FvRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKSE7XHJcbiAgICB0aGlzLmRlZmluaXJGaWx0cm9zR2xvYmFpcyhjb25maWcpO1xyXG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXMoY29uZmlnKTtcclxuICB9KTtcclxuXHJcbiAgZGF0YVNvdXJjZVNpZ25hbCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICB3aWR0aFNrZWxldG9uczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgd2lkdGhSYW5kb20gPSBjb21wdXRlZCgoKSA9PiAoY29sOiBhbnksIHJvdzogYW55KSA9PiB7XHJcbiAgICBpZiAoIWNvbC50ZW1wbGF0ZSAmJiAhY29sLmljb24gJiYgIWNvbC5maWVsZFR5cGUgJiYgIWNvbC5ib29sZWFuICYmICFjb2wucGlwZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWR0aFNrZWxldG9uc1tyb3ddICogMTAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDEwMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgXHJcbiAgICAgICAgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggIT09IHRoaXMuY3VyckRhdGFTb3VyY2UubGVuZ3RoIHx8XHJcbiAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VyckRhdGFTb3VyY2UpKSkge1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcclxuICAgICAgdGhpcy5jcmVhdGVUYWJsZUFjdGlvbnMoKTtcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGFTb3VyY2VNb2NrOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpc0VtcHR5RGF0YVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2VTaWduYWwoKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZU1vY2spO1xyXG4gIH0pXHJcblxyXG4gIGxvYWRpbmdTa2VsZXRvblV0aWxpdGllcygpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID09PSAwICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xyXG4gICAgICBsZXQgcm93SXRlbTogYW55ID0ge307XHJcbiAgICAgIHRoaXMudGFibGVDb25maWcoKT8uY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICByb3dJdGVtW2NvbC5maWVsZF0gPSAnJztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VNb2NrID0gQXJyYXkodGhpcy5yb3dzKCkpLmZpbGwoeyAuLi5yb3dJdGVtIH0pO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2VNb2NrO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3MoKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aFNrZWxldG9ucy5wdXNoKE1hdGgucmFuZG9tKCkgKiAwLjcgKyAwLjIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZ1NrZWxldG9uVXRpbGl0aWVzKCk7XHJcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xyXG4gICAgdGhpcy53aWR0aFBhZ2Uuc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrSGlkZUNvbHVtbnMoKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBkZWZhdWx0U29ydEZpZWxkID0gdGhpcy5kZWZhdWx0U29ydEZpZWxkO1xyXG4gICAgaWYgKGRlZmF1bHRTb3J0RmllbGQgJiYgdGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdHlwZW9mIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICB0eXBlb2YgYltkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZydcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiAoYVtkZWZhdWx0U29ydEZpZWxkXSBhcyBzdHJpbmcpLmxvY2FsZUNvbXBhcmUoXHJcbiAgICAgICAgICAgIChiW2RlZmF1bHRTb3J0RmllbGRdIGFzIHN0cmluZylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbidcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSBiW2RlZmF1bHRTb3J0RmllbGRdXHJcbiAgICAgICAgICAgID8gMFxyXG4gICAgICAgICAgICA6IGFbZGVmYXVsdFNvcnRGaWVsZF1cclxuICAgICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgICA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgYVtkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIChhW2RlZmF1bHRTb3J0RmllbGRdIGFzIG51bWJlcikgLSAoYltkZWZhdWx0U29ydEZpZWxkXSBhcyBudW1iZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVmaW5pckNvbHVuYXNDb25maWd1cmF2ZWlzKGNvbmZpZzogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoMCwgdGhpcy5jb2x1bW5zLmxlbmd0aCk7XHJcblxyXG4gICAgY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmlyRmlsdHJvc0dsb2JhaXMoY29uZmlnOiBUYWJsZUNvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZz8uZW5hYmxlRmlsdGVyKSB7XHJcblxyXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5zcGxpY2UoMCwgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMubGVuZ3RoKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2x1bW4uZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMucHRhYmxlKSB0aGlzLnB0YWJsZS5yZXNldCgpO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCkgdGhpcy5pbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHJvd0RhdGFbY29sLmZpZWxkXSA9PSAnYm9vbGVhbic7XHJcbiAgfVxyXG5cclxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25QYWdlKGV2ZW50OiBUYWJsZVBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maXJzdC5zZXQoZXZlbnQuZmlyc3QpO1xyXG4gICAgdGhpcy5yb3dzLnNldChldmVudC5yb3dzKTtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ2ltYWdlJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgaXNTd2l0Y2hGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ3N3aXRjaCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZFJvdyhyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlUm93ID8gdGhpcy5jb25maWcuZGlzYWJsZVJvdyhyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdHlsZUNsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjb2wgPyBjb2wuc3R5bGVDbGFzcyEocm93RGF0YSwgY29sLCBkYXRhKSA6ICcnXHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYUN1cnNvcigpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOiBpbWFnZSAvIGpwZzsgYmFzZTY0LCAke2ltZ0RlZmF1bHR9IGA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTogaW1hZ2UgLyBqcGc7IGJhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19IGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVyRmllbGQuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdpbmF0ZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgbGV0IHBhZ2luYUluaWNpYWwgPVxyXG4gICAgICAgIChldmVudD8uZmlyc3QgPiAwID8gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzIDogZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9IGV2ZW50Lmdsb2JhbEZpbHRlcjtcclxuXHJcbiAgICAgIGlmIChldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ZXZlbnQuc29ydEZpZWxkfSAke2V2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnfSBgO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICAgIG9yZGVybmFjYW9Hcm91cDogeyBjb2x1bW46IGV2ZW50LnNvcnRGaWVsZCwgZGlyZWN0aW9uOiBldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJyB9LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uc09mZnNldCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChzZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy50YWJsZVNpemUgPiA4MDAgPyAocm93Q2xhc3MgPSAndGV4dC1iYXNlJykgOiAocm93Q2xhc3MgPSAndGV4dC1zbScpO1xyXG5cclxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpXHJcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93Q2xhc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAoY29sLnRyYW5zZm9ybSkge1xyXG4gICAgICByZXR1cm4gY29sLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiB0aGlzLnJlcGxhY2VFbXB0eVZhbHVlcyAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgcmV0dXJuICctJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5JywgJ1VUQycpO1xyXG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXkgaGg6bW0nKTtcclxuICAgICAgICBjYXNlICdkYXRlTW9udGhZZWFyJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ01NL3l5eXknKTtcclxuICAgICAgICBjYXNlICdkZWNpbWFsJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XHJcbiAgICAgICAgY2FzZSAnY3BmY25waic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRlbGVmb25lUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtQ2FwaXRhbGl6ZSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICUgYDtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1DYXBpdGFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnICcpLm1hcCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgd29yZFVwcGVyID0gd29yZC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBjb25zdCB3b3JkTG93ZXIgPSB3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5yb21hbk51bWVyYWxzLmhhcyh3b3JkVXBwZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHdvcmQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNpZ2xhcy5oYXMod29yZFVwcGVyKSkge1xyXG4gICAgICAgIHJldHVybiB3b3JkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggIT09IDAgJiYgdGhpcy5wcmVwb3NpdGlvbnMuaGFzKHdvcmRMb3dlcikpIHtcclxuICAgICAgICByZXR1cm4gd29yZExvd2VyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9Mb2NhbGVVcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhIH07XHJcblxyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XHJcblxyXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5hclJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4sIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHZpc2libGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgY2hpcCAtIHN0eWxlIHcgLSBhdXRvIGJvcmRlciAtIHJvdW5kIC0gMnhsIHAgLSAyIHRleHQgLSAke3RoaXMucmV0b3JuYXJSb3coXHJcbiAgICAgIHJvd0RhdGEsXHJcbiAgICAgIGNvbCxcclxuICAgICAgJ3N0eWxlY2hpcCdcclxuICAgIClcclxuICAgICAgfSBib3JkZXIgLSAke3RoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnc3R5bGVjaGlwJyl9IGA7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0ljb24ocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcHJvdycpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoY29sdW1uKSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY29sdW1ucy5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbHVtbihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcclxuICAgICAgKHgpID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID1cclxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeCkgPT4geC5maWVsZCA9PSBmaWVsZCk7XHJcblxyXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgY29sLmNoZWNrZWQgPSBlLmNoZWNrZWQ7XHJcbiAgICBpZiAoZS5jaGVja2VkKSB0aGlzLmFkZENvbHVtbihjb2wuZmllbGQpO1xyXG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChjb2wucG9zaXRpb24pIHRoaXMuY29uZmlnLmNvbHVtbnMuc29ydCh0aGlzLnNvcnRCeVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWJyaXJNZW51RmlsdHJvKGU6IGFueSkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcclxuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA3MDApXHJcbiAgICAgIHRoaXMuc3R5bGVTZXR0ZXIoXHJcbiAgICAgICAgJ2xlZnQnLFxyXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxyXG4gICAgICAgICdsZWZ0JyxcclxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwICsgJ3B4J1xyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKTtcclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBmZWNoYXJNZW51RmlsdHJvKCkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsIHN0eWxlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgZGVsZXRlZENvbHVtbiA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gY29sLmZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBlbHNlIGNvbC5jaGVja2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtMTogYW55LCBlbGVtMjogYW55KSB7XHJcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW0xLnBvc2l0aW9uID4gZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XHJcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XHJcbiAgICBsZXQgaGlkZUNvbHVtbnNDb25maWcgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmhpZGVDb2x1bW4gPT0gdHJ1ZVxyXG4gICAgKTtcclxuICAgIGhpZGVDb2x1bW5zQ29uZmlnLmZvckVhY2goY29sID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIG9uU3dpdGNoQ2hhbmdlKGVzdGFkbzogYW55LCByb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZXN0YWRvOiBlc3RhZG8sXHJcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgIGNvbDogY29sLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcm93RGF0YVtjb2wuZmllbGRdID0gZXN0YWRvO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGFibGVBY3Rpb25zKCkge1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbnMgPSB0aGlzLmRhdGFTb3VyY2U/Lm1hcCgoeCkgPT5cclxuICAgICAgdGhpcy5jb25maWcuYWN0aW9uc1xyXG4gICAgICAgID8gdGhpcy5jb25maWcuYWN0aW9ucy5tYXAoKHkpID0+IG1hcFRvTWVudUl0ZW0oeSwgeCkpXHJcbiAgICAgICAgOiBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uU29ydChlOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbmZpZygpOiBUYWJsZUNvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpITtcclxuICB9XHJcblxyXG4gIGNvbHVtbnNGaWx0ZXIgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBkeW5hbWljQ29sdW1ucyA9ICh0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcihjb2wgPT4gIWNvbC5maXhlZENvbHVtbik7XHJcblxyXG4gICAgcmV0dXJuIFsuLi5keW5hbWljQ29sdW1ucywgLi4udGhpcy5kZWxldGVkQ29sdW5zXTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuTWF4V2lkdGggPSBjb21wdXRlZCgoKSA9PiAod2lkdGhDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgbGV0IHdpZHRoVGFibGUgPSB0aGlzLnRhYmxlQ2VsbCgpPy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBsZXQgcGVyY2VudCA9IE51bWJlcih3aWR0aENvbC5yZXBsYWNlKCclJywgJycpKTtcclxuXHJcbiAgICBsZXQgd2lkdGhDYWxjID0gd2lkdGhUYWJsZSAqIHBlcmNlbnQgLyAxMDA7XHJcblxyXG4gICAgcmV0dXJuIGAke3dpZHRoQ2FsY31weGA7XHJcbiAgfSk7XHJcblxyXG4gIGN1cnJlbnRQYWdlRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHNvdXJjZURhdGEgPSB0aGlzLmRhdGFTb3VyY2VTaWduYWwoKTtcclxuICAgIFxyXG4gICAgaWYgKCFzb3VyY2VEYXRhIHx8IHNvdXJjZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikge1xyXG4gICAgICByZXR1cm4gc291cmNlRGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3QoKTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5yb3dzKCk7XHJcbiAgICByZXR1cm4gc291cmNlRGF0YS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgcGFnZVNpemUpO1xyXG4gIH0pO1xyXG5cclxuXHJcblxyXG5cclxuICAvL2luaWNpbyBkYXMgZnVuw6fDtWVzIGVzcGVjw61maWNhcyBkZSBkcmFnIGFuZCBkcm9wXHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkRHJhZ09wZXJhdGlvbihldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjdXJyZW50UGFnZVN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0KCk7XHJcbiAgICAgIGNvbnN0IGdsb2JhbFByZXZpb3VzSW5kZXggPSBjdXJyZW50UGFnZVN0YXJ0SW5kZXggKyBldmVudC5wcmV2aW91c0luZGV4O1xyXG4gICAgICBjb25zdCBnbG9iYWxDdXJyZW50SW5kZXggPSBjdXJyZW50UGFnZVN0YXJ0SW5kZXggKyBldmVudC5jdXJyZW50SW5kZXg7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRGF0YUFycmF5ID0gWy4uLnRoaXMuY3VycmVudFBhZ2VEYXRhKCldO1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShjdXJyZW50UGFnZURhdGFBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc3BsaWNlKGN1cnJlbnRQYWdlU3RhcnRJbmRleCwgdGhpcy5yb3dzKCksIC4uLmN1cnJlbnRQYWdlRGF0YUFycmF5KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5vblJvd1Jlb3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4OiBnbG9iYWxQcmV2aW91c0luZGV4LFxyXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXHJcbiAgICAgICAgICBpdGVtOiBjdXJyZW50UGFnZURhdGFBcnJheVtldmVudC5jdXJyZW50SW5kZXhdLFxyXG4gICAgICAgICAgbmV3T3JkZXI6IFsuLi50aGlzLmRhdGFTb3VyY2VdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbFByZXZpb3VzSW5kZXggPj0gdGhpcy5kYXRhU291cmNlLmxlbmd0aCB8fCBnbG9iYWxDdXJyZW50SW5kZXggPj0gdGhpcy5kYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCfinYwgR2xvYmFsIGluZGljZXMgb3V0c2lkZSBkYXRhU291cmNlIGJvdW5kczonLCB7XHJcbiAgICAgICAgICAgIGdsb2JhbFByZXZpb3VzSW5kZXgsXHJcbiAgICAgICAgICAgIGdsb2JhbEN1cnJlbnRJbmRleCxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UsIGdsb2JhbFByZXZpb3VzSW5kZXgsIGdsb2JhbEN1cnJlbnRJbmRleCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5vblJvd1Jlb3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4OiBnbG9iYWxQcmV2aW91c0luZGV4LFxyXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXHJcbiAgICAgICAgICBpdGVtOiB0aGlzLmRhdGFTb3VyY2VbZ2xvYmFsQ3VycmVudEluZGV4XSxcclxuICAgICAgICAgIG5ld09yZGVyOiBbLi4udGhpcy5kYXRhU291cmNlXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXHJcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXgsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsaWREcmFnT3BlcmF0aW9uKHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMuY3VycmVudFBhZ2VEYXRhKCkubGVuZ3RoO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHByZXZpb3VzSW5kZXggPj0gMCAmJiBwcmV2aW91c0luZGV4IDwgY3VycmVudFBhZ2VTaXplICYmIFxyXG4gICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgY3VycmVudFBhZ2VTaXplO1xyXG4gICAgXHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gSW52YWxpZCBkcmFnIG9wZXJhdGlvbjonLCB7XHJcbiAgICAgICAgcHJldmlvdXNJbmRleCxcclxuICAgICAgICBjdXJyZW50SW5kZXgsXHJcbiAgICAgICAgY3VycmVudFBhZ2VTaXplLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YUxlbmd0aDogdGhpcy5jdXJyZW50UGFnZURhdGEoKS5sZW5ndGgsXHJcbiAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aCxcclxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucm93cygpLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHRoaXMuZmlyc3QoKSAvIHRoaXMucm93cygpKSArIDFcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KTogdm9pZCB7XHJcbiAgICBjb25zdCBkcmFnZ2VkUm93ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50O1xyXG4gICAgXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgXHJcbiAgICBjb25zdCBhcHBseVByZXZpZXdTdHlsZXMgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLWRyYWctcHJldmlldycpIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAocHJldmlldyAmJiBkcmFnZ2VkUm93KSB7XHJcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QuYWRkKCdpbml0aWFsaXppbmcnKTtcclxuICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ3JlYWR5Jyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBkcmFnZ2VkUm93LmNsb3Nlc3QoJ3RhYmxlJyk7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDZWxscyA9IGRyYWdnZWRSb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCB0YWJsZVJlY3QgPSBwYXJlbnRUYWJsZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3Qgcm93UmVjdCA9IGRyYWdnZWRSb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKHByZXZpZXcuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgcHJldmlldy5yZW1vdmVDaGlsZChwcmV2aWV3LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBwcmV2aWV3VGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpZXdUYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5Jyk7XHJcbiAgICAgICAgY29uc3QgcHJldmlld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcHJldmlld1RhYmxlLnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICB3aWR0aDogJHt0YWJsZVJlY3Q/LndpZHRoID8gTWF0aC5taW4odGFibGVSZWN0LndpZHRoLCA4MDApIDogJ2F1dG8nfXB4O1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgICBgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChwYXJlbnRUYWJsZSkge1xyXG4gICAgICAgICAgcHJldmlld1RhYmxlLmNsYXNzTmFtZSA9IHBhcmVudFRhYmxlLmNsYXNzTmFtZTtcclxuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkVGFibGVTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudFRhYmxlKTtcclxuICAgICAgICAgIHByZXZpZXdUYWJsZS5zdHlsZS5mb250RmFtaWx5ID0gY29tcHV0ZWRUYWJsZVN0eWxlLmZvbnRGYW1pbHk7XHJcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuZm9udFNpemUgPSBjb21wdXRlZFRhYmxlU3R5bGUuZm9udFNpemU7XHJcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkVGFibGVTdHlsZS5saW5lSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBwcmV2aWV3Um93LmNsYXNzTmFtZSA9IGRyYWdnZWRSb3cuY2xhc3NOYW1lO1xyXG4gICAgICAgIHByZXZpZXdSb3cuc3R5bGUuaGVpZ2h0ID0gYCR7cm93UmVjdC5oZWlnaHR9cHhgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG9yaWdpbmFsQ2VsbHMuZm9yRWFjaCgob3JpZ2luYWxDZWxsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJldmlld0NlbGwgPSBvcmlnaW5hbENlbGwuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50O1xyXG4gICAgICAgICAgY29uc3QgY2VsbFJlY3QgPSBvcmlnaW5hbENlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHByZXZpZXdDZWxsLnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICAgIHdpZHRoOiAke2NlbGxSZWN0LndpZHRofXB4O1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogJHtjZWxsUmVjdC53aWR0aH1weDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAke2NlbGxSZWN0LmhlaWdodH1weDtcclxuICAgICAgICAgICAgcGFkZGluZzogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnBhZGRpbmd9O1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiAke3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yaWdpbmFsQ2VsbCkudGV4dEFsaWdufTtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246ICR7d2luZG93LmdldENvbXB1dGVkU3R5bGUob3JpZ2luYWxDZWxsKS52ZXJ0aWNhbEFsaWdufTtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgYDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcHJldmlld1Jvdy5hcHBlbmRDaGlsZChwcmV2aWV3Q2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcHJldmlld1Rib2R5LmFwcGVuZENoaWxkKHByZXZpZXdSb3cpO1xyXG4gICAgICAgIHByZXZpZXdUYWJsZS5hcHBlbmRDaGlsZChwcmV2aWV3VGJvZHkpO1xyXG4gICAgICAgIHByZXZpZXcuYXBwZW5kQ2hpbGQocHJldmlld1RhYmxlKTtcclxuICAgICAgICBcclxuICAgICAgICBwcmV2aWV3LnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAwLjIpO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgd2lkdGg6ICR7dGFibGVSZWN0Py53aWR0aCA/IE1hdGgubWluKHRhYmxlUmVjdC53aWR0aCwgODAwKSA6ICdhdXRvJ31weDtcclxuICAgICAgICAgIG1heC13aWR0aDogOTB2dztcclxuICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG4gICAgICAgIGA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocHJldmlldykge1xyXG4gICAgICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ2luaXRpYWxpemluZycpO1xyXG4gICAgICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5hZGQoJ3JlYWR5Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseVByZXZpZXdTdHlsZXMpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXBwbHlQcmV2aWV3U3R5bGVzKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJrdi10YWJsZS1jb250YWluZXJcIj5cclxuICBAaWYgKGNvbmZpZykge1xyXG4gIDxwLXRhYmxlXHJcbiAgICAjZHRcclxuICAgICN0YWJsZVxyXG4gICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcclxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcclxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgIFtyb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXHJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXHJcbiAgICBbcm93c109XCJyb3dzKClcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcclxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIFtmaXJzdF09XCJmaXJzdCgpXCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAob25Tb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcclxuICAgIChvblBhZ2UpPVwib25QYWdlKCRldmVudClcIlxyXG4gICAgcm93R3JvdXBNb2RlPVwicm93c3BhblwiXHJcbiAgICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxyXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cIndpZHRoUGFnZSgpID4gOTYwID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgIFtwYWdlTGlua3NdPVwid2lkdGhQYWdlKCkgPiA5NjAgPyAyIDogMVwiXHJcbiAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcclxuICAgIFtyZXNwb25zaXZlTGF5b3V0XT1cInJlc3BvbnNpdmVMYXlvdXQgPyAnc3RhY2snIDogJydcIlxyXG4gICAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxyXG4gICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxyXG4gICAgW3Jvd1RyYWNrQnldPVwicm93VHJhY2tCeVwiXHJcblxyXG4gICAgY2RrRHJvcExpc3RcclxuICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY3VycmVudFBhZ2VEYXRhKClcIlxyXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxyXG4gICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICA+XHJcbiAgICBAaWYgKGNvbmZpZy5lbmFibGVDYXRpb24pIHtcclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wIG1iLTJcIlxyXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLnJlbV09XCIwLjFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGlmIChjb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBtZDpjb2wtNiBsZzpjb2wtNCB7e1xyXG4gICAgICAgICAgICB3aWR0aFBhZ2UoKSA8IDc2OCA/ICdjb2wtMTAnIDogJ2NvbC0xMidcclxuICAgICAgICAgIH19ICBnYXAtMSBwLTBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZUZpbHRlcikge1xyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cIndpZHRoUGFnZSgpID4gODAwXCJcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIoZHQsICRldmVudClcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAjaW5wdXRGaWVsZFxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIH0gQGlmKGZpbHRlckNvbHVtbnNCdG4pIHtcclxuICAgICAgICAgIDxkaXYgI2JvdGFvRmlsdHJvPlxyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJib3Rhb0ZpbHRyb1wiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FsaWduX3ZlcnRpY2FsX3RvcCdcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFicmlyTWVudUZpbHRybygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInRlcnRpYXJ5XCJcclxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIk9jdWx0YXIvRXhpYmlyIGNvbHVuYXNcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDAgbWVudS1jb2x1bW5zLWZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB0ZXh0LW1lZGl1bSB3LTE1cmVtIHAtMVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY2hlY2tNZW51RmlsdHJvKGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICNmaWx0ZXJDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiZGluYW1pY0NvbHVtblNldCgkZXZlbnQsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3AtY2FyZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfSBAaWYoZmlsdGVyQnV0dG9uKCkpIHtcclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwia3YtYnV0dG9uIHNtYWxsIHRlcnRpYXJ5IHRleHQteHMgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRyYXJcIlxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcclxuICAgICAgICAgICAgW2JhZGdlXT1cImZpbHRlckJ1dHRvbkJhZGdlKClcIlxyXG4gICAgICAgICAgICBiYWRnZUNsYXNzPVwidGV4dC1ncmF5LTgwMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC14c1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgID48L3AtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIDxwLW92ZXJsYXlQYW5lbCAjb3A+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmaWx0cm9dXCI+IDwvbmctY29udGVudD5cclxuICAgICAgICAgIDwvcC1vdmVybGF5UGFuZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0yIGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTIgcC0wXCI+XHJcbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgQGlmICgoKChzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpKSAmJlxyXG4gICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi52aXNpYmxlLCBzZWxlY3RlZEl0ZW1zKSA/PyB0cnVlKSkge1xyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aW9uPy5jb21tYW5kKCk7IGFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmxhYmVsLCBzZWxlY3RlZEl0ZW1zKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImFjdGlvbi5pdGVtcyB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgW3BvcHVwXT1cIihhY3Rpb24uaXRlbXMgJiYgYWN0aW9uLml0ZW1zLmxlbmd0aCA+IDApIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICBAaWYgKGVuYWJsZURyYWdEcm9wKSB7XHJcbiAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIiBjbGFzcz1cImRyYWctaGFuZGxlLWhlYWRlclwiPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xyXG4gICAgICAgIDx0aD5cclxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3hcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkSGVhZGVyQ2hlY2tib3hcIlxyXG4gICAgICAgICAgPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSkge1xyXG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLmZpZWxkXCIgY2xhc3M9XCJwYi0xXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICB9IEBpZiAoY29sLmhlYWRlclRvb2x0aXApIHtcclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgPmluZm88L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH0gQGlmIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dEYXRhXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxyXG4gICAgPlxyXG4gICAgICA8dHJcclxuICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieVwiXHJcbiAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcclxuICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFlbmFibGVEcmFnRHJvcCB8fCBkcmFnRHJvcERpc2FibGVkKHJvd0RhdGEpXCJcclxuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwic2VsZWN0ZWRJdGVtc1wiXHJcblxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsXHJcbiAgICAgICAgICBsYXN0OiByb3dJbmRleCA9PT0gZGF0YVNvdXJjZS5sZW5ndGggLSAxXHJcbiAgICAgICAgfVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7eyBpc0Rpc2FibGVkUm93KHJvd0RhdGEpID8gJ2Rpc2FibGVkLXJvdycgOiAnJyB9fVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgICAgQGlmIChlbmFibGVEcmFnRHJvcCkge1xyXG4gICAgICAgIDx0ZCBjZGtEcmFnSGFuZGxlPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtc21cIj5cclxuICAgICAgICAgICAgZHJhZ19pbmRpY2F0b3JcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYgKGNvbmZpZy5lbmFibGVTZWxlY3QpIHtcclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA4cHggIWltcG9ydGFudFwiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICB9IEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIEBpZiAocm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgIGNvbC5zdHlsZUNsYXNzXHJcbiAgICAgICAgICAgICAgICAgID8gY29sLnN0eWxlQ2xhc3Mocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBpZiAoIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpICYmXHJcbiAgICAgICAgICAgICAgICAhaXNFbXB0eURhdGFTb3VyY2UoKSkge1xyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgfX0gdGV4dC14cyB7eyBlbGxpcHNpc1RleHQoKSAmJiAnZWxsaXBzaXMtdGV4dCcgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzVGV4dCgpICYmIHJldHVybk1heFdpZHRoKCkoY29sLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoY29sLnRhZ0NvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH0gQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZighaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjguOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcclxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoaXNJbWFnZUZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uRmllbGQpIHtcclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgICBAaWYgKCFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDI1cHhcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoY29sLnN3aXRjaERpc2FibGUpe1xyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbC5zd2l0Y2hEaXNhYmxlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sPy5vbmx5UmVhZEZpZWxkID8/IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgQGlmKCFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXgge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNi44cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzMwcHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKCFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAjdGFibGVDZWxsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZSB7e1xyXG4gICAgICAgICAgICAgICAgY29sLnN0eWxlQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICAgIH19IFwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYoIWlzRW1wdHlEYXRhU291cmNlKCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgJyArXHJcbiAgICAgICAgICAgICAgICAgIChjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImVsbGlwc2lzVGV4dCgpICYmIHJldHVybk1heFdpZHRoKCkoY29sLndpZHRoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKCFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKSl7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmljb24pIHtcclxuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAyNXB4XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC5zd2l0Y2hEaXNhYmxlKXtcclxuICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuc3dpdGNoRGlzYWJsZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjguOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzMwcHgnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlIHt7XHJcbiAgICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xyXG4gICAgICAgICAgICAgICAgICA/IGNvbC5zdHlsZUNsYXNzKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICAgICAgfX0gXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZiAoZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpKSB7XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wudG9vbHRpcFRhZyAmJiBjb2wudG9vbHRpcFRhZyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sLnRhZ0NvbG9yKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYoIWlzRW1wdHlEYXRhU291cmNlKCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIlxyXG4gICAgICAgICAgICAgID48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgfSB9XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgfSBAaWYgKGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtb3JlX3ZlcnQgLS0+XHJcbiAgICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8cC10aWVyZWRNZW51XHJcbiAgICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cInRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdXCJcclxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtLnRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9wLXRpZXJlZE1lbnU+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c3BhbiBwVG9vbHRpcD1cInt7IHRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdWzBdPy50b29sdGlwIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+YTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoZW5hYmxlRHJhZ0Ryb3AgPyAxIDogMCkgKyAoY29uZmlnLmVuYWJsZVNlbGVjdCA/IDEgOiAwKSArIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwID8gMSA6IDApXCJcclxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gbS0wIHRleHQteHNcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxyXG4vPlxyXG5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURANDgsNDAwLDAsMFwiXHJcbi8+XHJcbiJdfQ==
|
|
852
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLWRyYWdnYWJsZS9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZHJhZ2dhYmxlL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZCLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZHLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUdmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJdEQsT0FBTyxFQUNMLFlBQVksRUFFWixhQUFhLEdBQ2QsTUFBTSx3Q0FBd0MsQ0FBQztBQUtoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFckYsTUFBTSxVQUFVLEdBQ2QsMHFQQUEwcVAsQ0FBQztBQU83cVAsTUFBTSxPQUFPLHlCQUF5QjtJQStEcEMsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ25CLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsWUFBWSxFQUFFLEtBQUss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QUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRXFCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDQSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0MsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNnQixLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ25CLE1BQU07c0JBQXZCLFNBQVM7dUJBQUMsS0FBSztnQkFFb0IsU0FBUztzQkFBNUMsZUFBZTt1QkFBQyxpQkFBaUI7Z0JBdUtsQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFWekMsV0FBVztzQkFEVixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFuRCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0RyYWdTdGFydCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVQYWdlRXZlbnQgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBDcGZDbnBqUGlwZSB9IGZyb20gJy4uLy4uL2FwaS9waXBlcy9jcGZjbnBqLnBpcGUnO1xuaW1wb3J0IHtcbiAgZ2V0T3JFeGVjdXRlLFxuICBWYWx1ZU9yRm4sXG4gIG1hcFRvTWVudUl0ZW0sXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnLmNvbHVtbic7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xuaW1wb3J0IHsgVGVsZWZvbmVQaXBlIH0gZnJvbSAnLi4vLi4vYXBpL3BpcGVzL3RlbGVmb25lLnBpcGUnO1xuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9hcGkvZGlyZWN0aXZlcy90ZW1wbGF0ZS90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5jb25zdCBpbWdEZWZhdWx0ID1cbiAgJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWRyYWdnYWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgS3ZUYWJsZURyYWdnYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XG4gIFxuICBjb2x1bW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcbiAgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWVudUZpbHRybzogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgY2hlY2tib3hDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG1lbnVJdGVtcyE6IE1lbnVJdGVtW107XG4gIHRhYmxlQWN0aW9uczogTWVudUl0ZW1bXVtdID0gW107XG4gIGN1cnJEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICBhY3Rpb25zT2Zmc2V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGlzRHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHByZXBvc2l0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgJ2RlJywgJ2RhJywgJ2RvJywgJ2VtJywgJ25vJywgJ25hJywgJ3BhcmEnLCAncG9yJywgJ2NvbScsICdhJywgJ28nLCAnZSdcbiAgXSk7XG4gIHByaXZhdGUgcm9tYW5OdW1lcmFscyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgJ0knLCAnSUknLCAnSUlJJywgJ0lWJywgJ1YnLCAnVkknLCAnVklJJywgJ1ZJSUknLCAnSVgnLCAnWCcsICdYSScsICdYSUknLCAnWElJSScsICdYSVYnLCAnWFYnLFxuICAgICdYVkknLCAnWFZJSScsICdYVklJSScsICdYSVgnLCAnWFgnXG4gIF0pO1xuICBwcml2YXRlIHNpZ2xhcyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgJ1VJJywgJ1VYJywgJ1RJJ1xuICBdKTtcblxuICBmaXJzdCA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIHJvd3MgPSBtb2RlbDxudW1iZXI+KDUpO1xuICBcbiAgdGFibGVDZWxsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZUNlbGwnKTtcblxuICBlbGxpcHNpc1RleHQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGlzTG9hZGluZ1NrZWxldG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBmaWx0ZXJCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlckJ1dHRvbkJhZGdlID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNvbmZpZyA9IHNpZ25hbDxUYWJsZUNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgd2lkdGhQYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1Blc3F1aXNhci4uLic7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdpbmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcGxhY2VFbXB0eVZhbHVlczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJvd1RyYWNrQnk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGFueSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XG4gIEBJbnB1dCgpIHJlc3BvbnNpdmVMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlZEhlYWRlckNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZURyYWdEcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJhZ0Ryb3BEaXNhYmxlZDogKGl0ZW06IGFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuICBASW5wdXQoKSBhcHBseVN0eWxlOiBGdW5jdGlvbiA9IChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pID0+ICcnO1xuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zITogbnVtYmVyO1xuICBASW5wdXQoKSBzaG93Rmlyc3RMYXN0SWNvbiE6IGJvb2xlYW47XG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcbiAgICB0aGlzLnRhYmxlQ29uZmlnLnNldCh7XG4gICAgICBlbmFibGVDYXRpb246IHZhbHVlLmVuYWJsZUNhdGlvbiB8fCB0cnVlLFxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXG4gICAgICBlbmFibGVGaWx0ZXI6IHZhbHVlLmVuYWJsZUZpbHRlciB8fCB0cnVlLFxuICAgICAgLi4udmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlZmluaXJDb2x1bmFzQ29uZmlndXJhdmVpcyh0aGlzLnRhYmxlQ29uZmlnKCkhKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdpbmF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uU3dpdGNoVGFibGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25Sb3dSZW9yZGVyOiBFdmVudEVtaXR0ZXI8e3ByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW06IGFueSwgbmV3T3JkZXI6IGFueVtdfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wdXRGaWVsZCcpIGlucHV0RmllbGQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZSE6IFRhYmxlO1xuICBAVmlld0NoaWxkKFRhYmxlKSBwdGFibGUhOiBUYWJsZTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8YW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29uZmlndXJhY2FvRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCkhO1xuICAgIHRoaXMuZGVmaW5pckZpbHRyb3NHbG9iYWlzKGNvbmZpZyk7XG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXMoY29uZmlnKTtcbiAgfSk7XG5cbiAgZGF0YVNvdXJjZVNpZ25hbCA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXG4gIHdpZHRoU2tlbGV0b25zOiBudW1iZXJbXSA9IFtdO1xuXG4gIHdpZHRoUmFuZG9tID0gY29tcHV0ZWQoKCkgPT4gKGNvbDogYW55LCByb3c6IGFueSkgPT4ge1xuICAgIGlmICghY29sLnRlbXBsYXRlICYmICFjb2wuaWNvbiAmJiAhY29sLmZpZWxkVHlwZSAmJiAhY29sLmJvb2xlYW4gJiYgIWNvbC5waXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy53aWR0aFNrZWxldG9uc1tyb3ddICogMTAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1cbiAgfSk7XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgY29uc3QgaGFzTGVuZ3RoQ2hhbmdlZCA9IHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggIT09IHRoaXMuY3VyckRhdGFTb3VyY2UubGVuZ3RoO1xuICAgICAgY29uc3QgaGFzQ29udGVudENoYW5nZWQgPSAhaGFzTGVuZ3RoQ2hhbmdlZCAmJiBcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU291cmNlKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyRGF0YVNvdXJjZSk7XG4gICAgICBcbiAgICAgIGlmIChoYXNMZW5ndGhDaGFuZ2VkIHx8IGhhc0NvbnRlbnRDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY3VyckRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGVBY3Rpb25zKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaGFzTGVuZ3RoQ2hhbmdlZCAmJiB0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5kYXRhU291cmNlLmxlbmd0aCAvIHRoaXMucm93cygpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IE1hdGguZmxvb3IodGhpcy5maXJzdCgpIC8gdGhpcy5yb3dzKCkpICsgMTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzICYmIHRvdGFsUGFnZXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0LnNldCgodG90YWxQYWdlcyAtIDEpICogdGhpcy5yb3dzKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRhdGFTb3VyY2VNb2NrOiBhbnlbXSA9IFtdO1xuXG4gIGlzRW1wdHlEYXRhU291cmNlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2VTaWduYWwoKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZU1vY2spO1xuICB9KVxuXG4gIGxvYWRpbmdTa2VsZXRvblV0aWxpdGllcygpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgIGxldCByb3dJdGVtOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMudGFibGVDb25maWcoKT8uY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgcm93SXRlbVtjb2wuZmllbGRdID0gJyc7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kYXRhU291cmNlTW9jayA9IEFycmF5KHRoaXMucm93cygpKS5maWxsKHsgLi4ucm93SXRlbSB9KTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZU1vY2s7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzKCk7IGkrKykge1xuICAgICAgICB0aGlzLndpZHRoU2tlbGV0b25zLnB1c2goTWF0aC5yYW5kb20oKSAqIDAuNyArIDAuMik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkaW5nU2tlbGV0b25VdGlsaXRpZXMoKTtcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tIaWRlQ29sdW1ucygpO1xuICAgIFxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuY3VyckRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkZWZhdWx0U29ydEZpZWxkID0gdGhpcy5kZWZhdWx0U29ydEZpZWxkO1xuICAgIGlmIChkZWZhdWx0U29ydEZpZWxkICYmIHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnc3RyaW5nJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gKGFbZGVmYXVsdFNvcnRGaWVsZF0gYXMgc3RyaW5nKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgICAgKGJbZGVmYXVsdFNvcnRGaWVsZF0gYXMgc3RyaW5nKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdib29sZWFuJyAmJlxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09IGJbZGVmYXVsdFNvcnRGaWVsZF1cbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBhW2RlZmF1bHRTb3J0RmllbGRdXG4gICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnbnVtYmVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gKGFbZGVmYXVsdFNvcnRGaWVsZF0gYXMgbnVtYmVyKSAtIChiW2RlZmF1bHRTb3J0RmllbGRdIGFzIG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpc2FibGVkLXJvdycpLmZvckVhY2gocm93ID0+IHtcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVmaW5pckNvbHVuYXNDb25maWd1cmF2ZWlzKGNvbmZpZzogVGFibGVDb25maWcpIHtcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDAsIHRoaXMuY29sdW1ucy5sZW5ndGgpO1xuXG4gICAgY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlZmluaXJGaWx0cm9zR2xvYmFpcyhjb25maWc6IFRhYmxlQ29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZz8uZW5hYmxlRmlsdGVyKSB7XG5cbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLnNwbGljZSgwLCB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWcuY29sdW1ucykge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbHVtbi5maWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRUYWJsZSgpIHtcbiAgICBpZiAodGhpcy5wdGFibGUpIHRoaXMucHRhYmxlLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCkgdGhpcy5pbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgZ2V0T3JFeGVjdXRlPFQ+KGFjdGlvbjogVmFsdWVPckZuPFQ+LCBkYXRhOiBhbnkpOiBUIHtcbiAgICByZXR1cm4gZ2V0T3JFeGVjdXRlKGFjdGlvbiwgZGF0YSk7XG4gIH1cblxuICBpc0Jvb2xlYW5GaWVsZChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHJvd0RhdGFbY29sLmZpZWxkXSA9PSAnYm9vbGVhbic7XG4gIH1cblxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2NoaXAnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uUGFnZShldmVudDogVGFibGVQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpcnN0LnNldChldmVudC5maXJzdCk7XG4gICAgdGhpcy5yb3dzLnNldChldmVudC5yb3dzKTtcbiAgfVxuXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBpc1N3aXRjaEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ3N3aXRjaCcgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAhdGhpcy5pc0Rpc2FibGVkQ2hlY2tib3goZXZlbnQuZGF0YSk7XG4gIH1cblxuICBpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxuICAgICAgPyB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSlcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBpc0Rpc2FibGVkUm93KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlUm93ID8gdGhpcy5jb25maWcuZGlzYWJsZVJvdyhyb3dEYXRhKSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZUNsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sID8gY29sLnN0eWxlQ2xhc3MhKHJvd0RhdGEsIGNvbCwgZGF0YSkgOiAnJ1xuICB9XG5cbiAgdmVyaWZpY2FDdXJzb3IoKSB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpc2FibGVkLXJvdycpLmZvckVhY2gocm93ID0+IHtcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgIGNlbGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxuICAgICovXG4gICAgbGV0IHJldG9ybm8gPSBgZGF0YTogaW1hZ2UgLyBqcGc7IGJhc2U2NCwgJHtpbWdEZWZhdWx0fSBgO1xuICAgIGlmIChyb3dEYXRhICYmIGNvbCAmJiByb3dEYXRhW2NvbC5maWVsZF0gJiYgcm93RGF0YVtjb2wuZmllbGRdICE9PSAnJykge1xuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xuICAgICAgZWxzZSByZXRvcm5vID0gYGRhdGE6IGltYWdlIC8ganBnOyBiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfSBgO1xuICAgIH1cblxuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG5cbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5maWx0ZXJGaWVsZC5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdpbmF0ZShldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XG4gICAgICAgIChldmVudD8uZmlyc3QgPiAwID8gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzIDogZXZlbnQuZmlyc3QpICsgMTtcbiAgICAgIGxldCB0ZXJtb1Blc3F1aXNhID0gJyc7XG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XG5cbiAgICAgIGlmIChldmVudC5nbG9iYWxGaWx0ZXIpIHRlcm1vUGVzcXVpc2EgPSBldmVudC5nbG9iYWxGaWx0ZXI7XG5cbiAgICAgIGlmIChldmVudC5zb3J0RmllbGQpXG4gICAgICAgIG9yZGVuYWNhbyA9IGAke2V2ZW50LnNvcnRGaWVsZH0gJHtldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ30gYDtcblxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xuICAgICAgICBwYWdpbmFJbmljaWFsOiBwYWdpbmFJbmljaWFsLFxuICAgICAgICB0YW1hbmhvUGFnaW5hOiBldmVudC5yb3dzLFxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcbiAgICAgICAgb3JkZXJuYWNhb0dyb3VwOiB7IGNvbHVtbjogZXZlbnQuc29ydEZpZWxkLCBkaXJlY3Rpb246IGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xuXG4gICAgICB0aGlzLmFjdGlvbnNPZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICAgIFxuICAgICAgdGhpcy5maXJzdC5zZXQoZXZlbnQuZmlyc3QpO1xuICAgICAgdGhpcy5yb3dzLnNldChldmVudC5yb3dzKTtcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGVUYWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWU6IGFueSkge1xuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW1Mb3RlLmVtaXQoc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XG5cbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XG5cbiAgICBpZiAoY29sLmV4cGlyZWREYXRlID09IHRydWUpIHtcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxuICAgICAgICA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gcm93Q2xhc3M7XG4gIH1cblxuICBwcml2YXRlIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbJ2RhdGF2ZW5jaW1lbnRvJ107XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKCkgJiYgY29sLmZpZWxkID09ICdhcmVhJztcbiAgfVxuXG4gIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcblxuICAgIGlmIChjb2wudHJhbnNmb3JtKSB7XG4gICAgICByZXR1cm4gY29sLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiB0aGlzLnJlcGxhY2VFbXB0eVZhbHVlcyAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICghY29sLnBpcGUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XG4gICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXknLCAnVVRDJyk7XG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5IGhoOm1tJyk7XG4gICAgICAgIGNhc2UgJ2RhdGVNb250aFllYXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ01NL3l5eXknKTtcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCAnMS4yLTInLCAncHQtQlInKTtcbiAgICAgICAgY2FzZSAnY3BmY25waic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgY2FzZSAndGVsZWZvbmUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLnRlbGVmb25lUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICdjYXBpdGFsaXplJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1DYXBpdGFsaXplKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnbW9uZXknOlxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICUgYDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcgJykubWFwKCh3b3JkLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgd29yZFVwcGVyID0gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3Qgd29yZExvd2VyID0gd29yZC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAodGhpcy5yb21hbk51bWVyYWxzLmhhcyh3b3JkVXBwZXIpKSB7XG4gICAgICAgIHJldHVybiB3b3JkO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zaWdsYXMuaGFzKHdvcmRVcHBlcikpIHtcbiAgICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCAhPT0gMCAmJiB0aGlzLnByZXBvc2l0aW9ucy5oYXMod29yZExvd2VyKSkge1xuICAgICAgICByZXR1cm4gd29yZExvd2VyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9Mb2NhbGVVcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcbiAgfVxuXG4gIGFkanVzdFRhYmxlU2l6ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZVNpemUgPCA4MDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAnJztcbiAgICB9XG4gIH1cblxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgIGxldCBldmVudERvdWJsZUNsaWNrID0geyBldmVudDogZSwgcm93RGF0YTogcm93RGF0YSB9O1xuXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xuXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XG4gIH1cblxuICByZXRvcm5hclJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4sIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9yb3dhY3Rpb24gPSB0aGlzLmNvbmZpZy5yb3dzID8gdGhpcy5jb25maWcucm93c1tjb2wuZmllbGRdIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuXG4gIHByaXZhdGUgZXhpYmlyQ2FtcG8oZmllbGQ6IGFueSwgcm93RGF0YTogYW55KSB7XG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XG5cbiAgICByZXR1cm4gdmlzaWJsZTtcbiAgfVxuXG4gIHJldHVybkNsYXNzQ2hpcChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgY2hpcCAtIHN0eWxlIHcgLSBhdXRvIGJvcmRlciAtIHJvdW5kIC0gMnhsIHAgLSAyIHRleHQgLSAke3RoaXMucmV0b3JuYXJSb3coXG4gICAgICByb3dEYXRhLFxuICAgICAgY29sLFxuICAgICAgJ3N0eWxlY2hpcCdcbiAgICApXG4gICAgICB9IGJvcmRlciAtICR7dGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdzdHlsZWNoaXAnKX0gYDtcbiAgfVxuXG4gIHJldHVybkNsYXNzSWNvbihyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcbiAgfVxuXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcGljb25yb3cnKTtcbiAgfVxuXG4gIHJldHVyblRvb2x0aXBSb3cocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwcm93Jyk7XG4gIH1cblxuICBkZWxldGVDb2x1bW4oZmllbGQ6IHN0cmluZykge1xuICAgIGxldCBpbmRleDogbnVtYmVyO1xuXG4gICAgbGV0IGNvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoXG4gICAgICB4ID0+IHguZmllbGQgPT0gZmllbGRcbiAgICApO1xuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY29sdW1ucy5pbmRleE9mKGNvbHVtbik7XG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMucHVzaChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbHVtbihmaWVsZDogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4OiBudW1iZXI7XG5cbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcbiAgICAgICh4KSA9PiB4LmZpZWxkID09IGZpZWxkXG4gICAgKTtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICBsZXQgZGVsZXRlZENvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeCkgPT4geC5maWVsZCA9PSBmaWVsZCk7XG5cbiAgICAgIGlmIChkZWxldGVkQ29sdW1uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuc2xpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnB1c2goZGVsZXRlZENvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGluYW1pY0NvbHVtblNldChlOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBjb2wuY2hlY2tlZCA9IGUuY2hlY2tlZDtcbiAgICBpZiAoZS5jaGVja2VkKSB0aGlzLmFkZENvbHVtbihjb2wuZmllbGQpO1xuICAgIGVsc2UgdGhpcy5kZWxldGVDb2x1bW4oY29sLmZpZWxkKTtcblxuICAgIGlmIChjb2wucG9zaXRpb24pIHRoaXMuY29uZmlnLmNvbHVtbnMuc29ydCh0aGlzLnNvcnRCeVBvc2l0aW9uKCkpO1xuICB9XG5cbiAgYWJyaXJNZW51RmlsdHJvKGU6IGFueSkge1xuICAgIHRoaXMubWVudUZpbHRybyA9ICF0aGlzLm1lbnVGaWx0cm87XG4gICAgdGhpcy5jaGVja2JveENsaWNrZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgNzAwKVxuICAgICAgdGhpcy5zdHlsZVNldHRlcihcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIDI4OCArICdweCdcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5zdHlsZVNldHRlcihcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwICsgJ3B4J1xuICAgICAgKTtcblxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKTtcbiAgICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgdGhpcy5tZW51RmlsdHJvID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpO1xuICB9XG5cbiAgZmVjaGFyTWVudUZpbHRybygpIHtcbiAgICB0aGlzLm1lbnVGaWx0cm8gPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zdHlsZVNldHRlcigndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zQnRuID09IHRydWUgJiYgdGhpcy5tZW51RmlsdHJvID09IHRydWUpIHtcbiAgICAgIHRoaXMuZmVjaGFyTWVudUZpbHRybygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGlja0V2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zQnRuID09IHRydWUgJiYgdGhpcy5tZW51RmlsdHJvID09IHRydWUpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgbWVudUZpbHRyb0RpdiA9XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtZW51RmlsdHJvRGl2Jyk7XG4gICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNib3Rhb0ZpbHRybycpO1xuICAgICAgY29uc3QgaXNDaGVja2JveENsaWNrZWQgPVxuICAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XG4gICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QudG9TdHJpbmcoKSA9PSAnJztcbiAgICAgIGNvbnN0IGlzSW5zaWRlTWVudSA9XG4gICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxuICAgICAgICBib3Rhb0ZpbHRybz8uY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpIHx8XG4gICAgICAgIGlzQ2hlY2tib3hDbGlja2VkO1xuXG4gICAgICBpZiAoIWlzSW5zaWRlTWVudSkgdGhpcy5mZWNoYXJNZW51RmlsdHJvKCk7XG4gICAgfVxuICB9XG5cbiAgc3R5bGVTZXR0ZXIoc3R5bGU6IHN0cmluZywgZGF0YTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsIHN0eWxlLCBkYXRhKTtcbiAgfVxuXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XG4gICAgbGV0IGRlbGV0ZWRDb2x1bW4gPSB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZChcbiAgICAgIHggPT4geC5maWVsZCA9PSBjb2wuZmllbGRcbiAgICApO1xuICAgIGlmIChkZWxldGVkQ29sdW1uKSBjb2wuY2hlY2tlZCA9IGZhbHNlO1xuICAgIGVsc2UgY29sLmNoZWNrZWQgPSB0cnVlO1xuICB9XG5cbiAgc29ydEJ5UG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtMTogYW55LCBlbGVtMjogYW55KSB7XG4gICAgICBpZiAoZWxlbTEucG9zaXRpb24gPCBlbGVtMi5wb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0xLnBvc2l0aW9uID4gZWxlbTIucG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGVja0hpZGVDb2x1bW5zKCkge1xuICAgIGxldCBoaWRlQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICBjb2wgPT4gY29sLmhpZGVDb2x1bW4gPT0gdHJ1ZVxuICAgICk7XG4gICAgaGlkZUNvbHVtbnNDb25maWcuZm9yRWFjaChjb2wgPT4gdGhpcy5kZWxldGVDb2x1bW4oY29sLmZpZWxkKSk7XG4gIH1cblxuICBnZXRDdXN0b21UZW1wbGF0ZSh0ZW1wbGF0ZW5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcbiAgfVxuXG4gIG9uU3dpdGNoQ2hhbmdlKGVzdGFkbzogYW55LCByb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICB0aGlzLm9uU3dpdGNoVGFibGVDaGFuZ2UuZW1pdCh7XG4gICAgICBlc3RhZG86IGVzdGFkbyxcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXG4gICAgICBjb2w6IGNvbCxcbiAgICB9KTtcblxuICAgIHJvd0RhdGFbY29sLmZpZWxkXSA9IGVzdGFkbztcbiAgfVxuXG4gIGNyZWF0ZVRhYmxlQWN0aW9ucygpIHtcbiAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IHRoaXMuZGF0YVNvdXJjZT8ubWFwKCh4KSA9PlxuICAgICAgdGhpcy5jb25maWcuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKCh5KSA9PiBtYXBUb01lbnVJdGVtKHksIHgpKVxuICAgICAgICA6IFtdXG4gICAgKTtcbiAgfVxuXG4gIGN1cnJlbnRQYWdlQWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLmN1cnJlbnRQYWdlRGF0YSgpO1xuICAgIHJldHVybiBjdXJyZW50UGFnZURhdGE/Lm1hcCgoeCkgPT5cbiAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnNcbiAgICAgICAgPyB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoeSkgPT4gbWFwVG9NZW51SXRlbSh5LCB4KSlcbiAgICAgICAgOiBbXVxuICAgICkgfHwgW107XG4gIH0pO1xuXG4gIGRyYWdEcm9wRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VEYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2VTaWduYWwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIG9uU29ydChlOiBhbnkpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgfVxuXG4gIGdldCBjb25maWcoKTogVGFibGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnKCkhO1xuICB9XG5cbiAgY29sdW1uc0ZpbHRlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkeW5hbWljQ29sdW1ucyA9ICh0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcihjb2wgPT4gIWNvbC5maXhlZENvbHVtbik7XG5cbiAgICByZXR1cm4gWy4uLmR5bmFtaWNDb2x1bW5zLCAuLi50aGlzLmRlbGV0ZWRDb2x1bnNdO1xuICB9KTtcblxuICByZXR1cm5NYXhXaWR0aCA9IGNvbXB1dGVkKCgpID0+ICh3aWR0aENvbDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IHdpZHRoVGFibGUgPSB0aGlzLnRhYmxlQ2VsbCgpPy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgbGV0IHBlcmNlbnQgPSBOdW1iZXIod2lkdGhDb2wucmVwbGFjZSgnJScsICcnKSk7XG5cbiAgICBsZXQgd2lkdGhDYWxjID0gd2lkdGhUYWJsZSAqIHBlcmNlbnQgLyAxMDA7XG5cbiAgICByZXR1cm4gYCR7d2lkdGhDYWxjfXB4YDtcbiAgfSk7XG5cbiAgY3VycmVudFBhZ2VEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZURhdGEgPSB0aGlzLmRhdGFTb3VyY2VTaWduYWwoKTtcbiAgICBcbiAgICBpZiAoIXNvdXJjZURhdGEgfHwgc291cmNlRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikge1xuICAgICAgcmV0dXJuIHNvdXJjZURhdGE7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0KCk7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnJvd3MoKTtcbiAgICBcbiAgICBjb25zdCBzYWZlU3RhcnRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIE1hdGgubWF4KDAsIHNvdXJjZURhdGEubGVuZ3RoIC0gcGFnZVNpemUpKTtcbiAgICBjb25zdCBzYWZlRW5kSW5kZXggPSBNYXRoLm1pbihzYWZlU3RhcnRJbmRleCArIHBhZ2VTaXplLCBzb3VyY2VEYXRhLmxlbmd0aCk7XG4gICAgXG4gICAgcmV0dXJuIHNvdXJjZURhdGEuc2xpY2Uoc2FmZVN0YXJ0SW5kZXgsIHNhZmVFbmRJbmRleCk7XG4gIH0pO1xuXG5cblxuXG4gIC8vaW5pY2lvIGRhcyBmdW7Dp8O1ZXMgZXNwZWPDrWZpY2FzIGRlIGRyYWcgYW5kIGRyb3BcblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWREcmFnT3BlcmF0aW9uKGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBjdXJyZW50UGFnZVN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0KCk7XG4gICAgICBjb25zdCBnbG9iYWxQcmV2aW91c0luZGV4ID0gY3VycmVudFBhZ2VTdGFydEluZGV4ICsgZXZlbnQucHJldmlvdXNJbmRleDtcbiAgICAgIGNvbnN0IGdsb2JhbEN1cnJlbnRJbmRleCA9IGN1cnJlbnRQYWdlU3RhcnRJbmRleCArIGV2ZW50LmN1cnJlbnRJbmRleDtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhQXJyYXkgPSBbLi4udGhpcy5jdXJyZW50UGFnZURhdGEoKV07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShjdXJyZW50UGFnZURhdGFBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zcGxpY2UoY3VycmVudFBhZ2VTdGFydEluZGV4LCB0aGlzLnJvd3MoKSwgLi4uY3VycmVudFBhZ2VEYXRhQXJyYXkpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMub25Sb3dSZW9yZGVyLmVtaXQoe1xuICAgICAgICAgIHByZXZpb3VzSW5kZXg6IGdsb2JhbFByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXG4gICAgICAgICAgaXRlbTogY3VycmVudFBhZ2VEYXRhQXJyYXlbZXZlbnQuY3VycmVudEluZGV4XSxcbiAgICAgICAgICBuZXdPcmRlcjogWy4uLnRoaXMuZGF0YVNvdXJjZV1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZ2xvYmFsUHJldmlvdXNJbmRleCA+PSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoIHx8IGdsb2JhbEN1cnJlbnRJbmRleCA+PSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCfinYwgR2xvYmFsIGluZGljZXMgb3V0c2lkZSBkYXRhU291cmNlIGJvdW5kczonLCB7XG4gICAgICAgICAgICBnbG9iYWxQcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgZ2xvYmFsQ3VycmVudEluZGV4LFxuICAgICAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZGF0YVNvdXJjZSwgZ2xvYmFsUHJldmlvdXNJbmRleCwgZ2xvYmFsQ3VycmVudEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VyckRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHRoaXMub25Sb3dSZW9yZGVyLmVtaXQoe1xuICAgICAgICAgIHByZXZpb3VzSW5kZXg6IGdsb2JhbFByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXG4gICAgICAgICAgaXRlbTogdGhpcy5kYXRhU291cmNlW2dsb2JhbEN1cnJlbnRJbmRleF0sXG4gICAgICAgICAgbmV3T3JkZXI6IFsuLi50aGlzLmRhdGFTb3VyY2VdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xuICAgICAgXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWREcmFnT3BlcmF0aW9uKHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSB0aGlzLmN1cnJlbnRQYWdlRGF0YSgpLmxlbmd0aDtcbiAgICBjb25zdCBpc1ZhbGlkID0gcHJldmlvdXNJbmRleCA+PSAwICYmIHByZXZpb3VzSW5kZXggPCBjdXJyZW50UGFnZVNpemUgJiYgXG4gICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgY3VycmVudFBhZ2VTaXplO1xuICAgIFxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gSW52YWxpZCBkcmFnIG9wZXJhdGlvbjonLCB7XG4gICAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgICAgY3VycmVudFBhZ2VTaXplLFxuICAgICAgICBjdXJyZW50UGFnZURhdGFMZW5ndGg6IHRoaXMuY3VycmVudFBhZ2VEYXRhKCkubGVuZ3RoLFxuICAgICAgICBkYXRhU291cmNlTGVuZ3RoOiB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLFxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxuICAgICAgICByb3dzOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY3VycmVudFBhZ2U6IE1hdGguZmxvb3IodGhpcy5maXJzdCgpIC8gdGhpcy5yb3dzKCkpICsgMVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KTogdm9pZCB7XG4gICAgY29uc3QgZHJhZ2dlZFJvdyA9IGV2ZW50LnNvdXJjZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudDtcbiAgICBcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFwcGx5UHJldmlld1N0eWxlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLWRyYWctcHJldmlldycpIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQ7XG5cbiAgICAgIGlmIChwcmV2aWV3ICYmIGRyYWdnZWRSb3cpIHtcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QuYWRkKCdpbml0aWFsaXppbmcnKTtcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QucmVtb3ZlKCdyZWFkeScpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBkcmFnZ2VkUm93LmNsb3Nlc3QoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ2VsbHMgPSBkcmFnZ2VkUm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0YWJsZVJlY3QgPSBwYXJlbnRUYWJsZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHJvd1JlY3QgPSBkcmFnZ2VkUm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBcbiAgICAgICAgd2hpbGUgKHByZXZpZXcuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHByZXZpZXcucmVtb3ZlQ2hpbGQocHJldmlldy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcHJldmlld1RhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgICAgY29uc3QgcHJldmlld1Rib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcbiAgICAgICAgY29uc3QgcHJldmlld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgIFxuICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgICB3aWR0aDogJHt0YWJsZVJlY3Q/LndpZHRoID8gTWF0aC5taW4odGFibGVSZWN0LndpZHRoLCA4MDApIDogJ2F1dG8nfXB4O1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGA7XG4gICAgICAgIFxuICAgICAgICBpZiAocGFyZW50VGFibGUpIHtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuY2xhc3NOYW1lID0gcGFyZW50VGFibGUuY2xhc3NOYW1lO1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkVGFibGVTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudFRhYmxlKTtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuZm9udEZhbWlseSA9IGNvbXB1dGVkVGFibGVTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgIHByZXZpZXdUYWJsZS5zdHlsZS5mb250U2l6ZSA9IGNvbXB1dGVkVGFibGVTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkVGFibGVTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBwcmV2aWV3Um93LmNsYXNzTmFtZSA9IGRyYWdnZWRSb3cuY2xhc3NOYW1lO1xuICAgICAgICBwcmV2aWV3Um93LnN0eWxlLmhlaWdodCA9IGAke3Jvd1JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgXG4gICAgICAgIG9yaWdpbmFsQ2VsbHMuZm9yRWFjaCgob3JpZ2luYWxDZWxsLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdDZWxsID0gb3JpZ2luYWxDZWxsLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBjZWxsUmVjdCA9IG9yaWdpbmFsQ2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBwcmV2aWV3Q2VsbC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgd2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBoZWlnaHQ6ICR7Y2VsbFJlY3QuaGVpZ2h0fXB4O1xuICAgICAgICAgICAgcGFkZGluZzogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnBhZGRpbmd9O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnRleHRBbGlnbn07XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnZlcnRpY2FsQWxpZ259O1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIGA7XG4gICAgICAgICAgXG4gICAgICAgICAgcHJldmlld1Jvdy5hcHBlbmRDaGlsZChwcmV2aWV3Q2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcHJldmlld1Rib2R5LmFwcGVuZENoaWxkKHByZXZpZXdSb3cpO1xuICAgICAgICBwcmV2aWV3VGFibGUuYXBwZW5kQ2hpbGQocHJldmlld1Rib2R5KTtcbiAgICAgICAgcHJldmlldy5hcHBlbmRDaGlsZChwcmV2aWV3VGFibGUpO1xuICAgICAgICBcbiAgICAgICAgcHJldmlldy5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMC4yKTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgd2lkdGg6ICR7dGFibGVSZWN0Py53aWR0aCA/IE1hdGgubWluKHRhYmxlUmVjdC53aWR0aCwgODAwKSA6ICdhdXRvJ31weDtcbiAgICAgICAgICBtYXgtd2lkdGg6IDkwdnc7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGA7XG4gICAgICAgIFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAocHJldmlldykge1xuICAgICAgICAgICAgcHJldmlldy5jbGFzc0xpc3QucmVtb3ZlKCdpbml0aWFsaXppbmcnKTtcbiAgICAgICAgICAgIHByZXZpZXcuY2xhc3NMaXN0LmFkZCgncmVhZHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwKTtcbiAgICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXBwbHlQcmV2aWV3U3R5bGVzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseVByZXZpZXdTdHlsZXMpO1xuICB9XG5cbiAgb25EcmFnRW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJrdi10YWJsZS1jb250YWluZXJcIj5cbiAgQGlmIChjb25maWcpIHtcbiAgPHAtdGFibGVcbiAgICAjZHRcbiAgICAjdGFibGVcbiAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIlxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcbiAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICAgIFtyb3dzXT1cInJvd3MoKVwiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcbiAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcbiAgICBbZmlyc3RdPVwiZmlyc3QoKVwiXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gICAgKG9uUGFnZSk9XCJvblBhZ2UoJGV2ZW50KVwiXG4gICAgcm93R3JvdXBNb2RlPVwicm93c3BhblwiXG4gICAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcbiAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwid2lkdGhQYWdlKCkgPiA5NjAgPyB0cnVlIDogZmFsc2VcIlxuICAgIFtwYWdlTGlua3NdPVwid2lkdGhQYWdlKCkgPiA5NjAgPyAyIDogMVwiXG4gICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXG4gICAgW3Jlc3BvbnNpdmVMYXlvdXRdPVwicmVzcG9uc2l2ZUxheW91dCA/ICdzdGFjaycgOiAnJ1wiXG4gICAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5XCJcblxuICAgIGNka0Ryb3BMaXN0XG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkcmFnRHJvcERhdGEoKVwiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxuICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gID5cbiAgICBAaWYgKGNvbmZpZy5lbmFibGVDYXRpb24pIHtcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wIG1iLTJcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy5yZW1dPVwiMC4xXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgQGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAaWYgKGNvbmZpZy5zdWJ0aXRsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcbiAgICAgICAgICAgIHdpZHRoUGFnZSgpIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ1xuICAgICAgICAgIH19ICBnYXAtMSBwLTBcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChjb25maWcuZW5hYmxlRmlsdGVyKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICBwQXV0b0ZvY3VzXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cIndpZHRoUGFnZSgpID4gODAwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcihkdCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICNpbnB1dEZpZWxkXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTZcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAaWYoZmlsdGVyQ29sdW1uc0J0bikge1xuICAgICAgICAgIDxkaXYgI2JvdGFvRmlsdHJvPlxuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImJvdGFvRmlsdHJvXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FsaWduX3ZlcnRpY2FsX3RvcCdcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJhYnJpck1lbnVGaWx0cm8oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIk9jdWx0YXIvRXhpYmlyIGNvbHVuYXNcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rdi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjbWVudUZpbHRyb0RpdlxuICAgICAgICAgICAgaWQ9XCJtZW51RmlsdHJvRGl2XCJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwIG1lbnUtY29sdW1ucy1maWx0cm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtbWVkaXVtIHctMTVyZW0gcC0xXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjaGVja01lbnVGaWx0cm8oY29sKSB9fVxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJkaW5hbWljQ29sdW1uU2V0KCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9wLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAaWYoZmlsdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJrdi1idXR0b24gc21hbGwgdGVydGlhcnkgdGV4dC14cyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRyYXJcIlxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWZpbHRlclwiXG4gICAgICAgICAgICBbYmFkZ2VdPVwiZmlsdGVyQnV0dG9uQmFkZ2UoKVwiXG4gICAgICAgICAgICBiYWRnZUNsYXNzPVwidGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxwLW92ZXJsYXlQYW5lbCAjb3A+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmlsdHJvXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTIganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMiBwLTBcIj5cbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKCgoKHNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkpICYmXG4gICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi52aXNpYmxlLCBzZWxlY3RlZEl0ZW1zKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uZGlzYWJsZWQsIHNlbGVjdGVkSXRlbXMpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb24uc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmxhYmVsLCBzZWxlY3RlZEl0ZW1zKSB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhY3Rpb24uaXRlbXMgfHwgW11cIlxuICAgICAgICAgICAgICBbcG9wdXBdPVwiKGFjdGlvbi5pdGVtcyAmJiBhY3Rpb24uaXRlbXMubGVuZ3RoID4gMCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoZW5hYmxlRHJhZ0Ryb3ApIHtcbiAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIiBjbGFzcz1cImRyYWctaGFuZGxlLWhlYWRlclwiPlxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICA8dGg+XG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveFxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEhlYWRlckNoZWNrYm94XCJcbiAgICAgICAgICA+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH0gQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8dGhcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChjb2wuc29ydGFibGUpIHtcbiAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiBjbGFzcz1cInBiLTFcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICB9IEBpZiAoY29sLmhlYWRlclRvb2x0aXApIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXG4gICAgICAgICAgICAgID5pbmZvPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH0gQGlmIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDx0aD48L3RoPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd0RhdGFcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXG4gICAgICBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIlxuICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgID5cbiAgICAgIDx0clxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInlcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcbiAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhZW5hYmxlRHJhZ0Ryb3AgfHwgZHJhZ0Ryb3BEaXNhYmxlZChyb3dEYXRhKVwiXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJzZWxlY3RlZEl0ZW1zXCJcblxuICAgICAgICAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsXG4gICAgICAgICAgbGFzdDogcm93SW5kZXggPT09IGRhdGFTb3VyY2UubGVuZ3RoIC0gMVxuICAgICAgICB9XCJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7eyBpc0Rpc2FibGVkUm93KHJvd0RhdGEpID8gJ2Rpc2FibGVkLXJvdycgOiAnJyB9fVwiXG4gICAgICA+XG5cbiAgICAgICAgQGlmIChlbmFibGVEcmFnRHJvcCkge1xuICAgICAgICA8dGQgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1zbVwiPlxuICAgICAgICAgICAgZHJhZ19pbmRpY2F0b3JcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA4cHggIWltcG9ydGFudFwiPlxuICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveFxuICAgICAgICAgICAgICBbdmFsdWVdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIEBpZiAocm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7XG4gICAgICAgICAgICAgICAgY29sLnN0eWxlQ2xhc3NcbiAgICAgICAgICAgICAgICAgID8gY29sLnN0eWxlQ2xhc3Mocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkgJiZcbiAgICAgICAgICAgICAgICAhaXNFbXB0eURhdGFTb3VyY2UoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIHt7XG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgIH19IHRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBlbGxpcHNpc1RleHQoKSAmJiByZXR1cm5NYXhXaWR0aCgpKGNvbC53aWR0aClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbikge1xuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgQGlmKCFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICczMHB4J1xuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxuICAgICAgICAgICAgICAgIEBpZiAoIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcbiAgICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xuICAgICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDI1cHhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBpZihjb2wuc3dpdGNoRGlzYWJsZSl7XG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sLnN3aXRjaERpc2FibGUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sPy5vbmx5UmVhZEZpZWxkID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfSBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICczMHB4J1xuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKCFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICN0YWJsZUNlbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZSB7e1xuICAgICAgICAgICAgICAgIGNvbC5zdHlsZUNsYXNzXG4gICAgICAgICAgICAgICAgICA/IGNvbC5zdHlsZUNsYXNzKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICB9fSBcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XG5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyICcgK1xuICAgICAgICAgICAgICAgICAgKGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcicpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiZWxsaXBzaXNUZXh0KCkgJiYgcmV0dXJuTWF4V2lkdGgoKShjb2wud2lkdGgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgICAgIH0gQGlmICghaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkpe1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB7eyBlbGxpcHNpc1RleHQoKSAmJiAnZWxsaXBzaXMtdGV4dCcgfX1cIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmljb24pIHtcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGlmIChpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9IEBpZiAoaXNJbWFnZUZpZWxkKGNvbCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uRmllbGQpIHtcbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XG4gICAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjVweFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC5zd2l0Y2hEaXNhYmxlKXtcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuc3dpdGNoRGlzYWJsZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXgge3tcbiAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGUge3tcbiAgICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xuICAgICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgfX0gXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSkpIHtcblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLnRvb2x0aXBUYWcgJiYgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgICAgICAgICAgPHAtc2tlbGV0b25cbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiXG4gICAgICAgICAgICAgID48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBpZiAoY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBtb3JlX3ZlcnQgLS0+XG4gICAgICAgICAgICAgICAgbW9yZV9ob3JpelxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHAtdGllcmVkTWVudVxuICAgICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJjdXJyZW50UGFnZUFjdGlvbnMoKVtyb3dJbmRleF1cIlxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXRlbS50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC10aWVyZWRNZW51PlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIHBUb29sdGlwPVwie3sgdGFibGVBY3Rpb25zW3Jvd0luZGV4IC0gYWN0aW9uc09mZnNldF1bMF0/LnRvb2x0aXAgfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5hPC9zcGFuPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoZW5hYmxlRHJhZ0Ryb3AgPyAxIDogMCkgKyAoY29uZmlnLmVuYWJsZVNlbGVjdCA/IDEgOiAwKSArIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwID8gMSA6IDApXCJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gbS0wIHRleHQteHNcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICB9XG48L2Rpdj5cblxuPGxpbmtcbiAgcmVsPVwic3R5bGVzaGVldFwiXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zXCJcbi8+XG5cbjxsaW5rXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURANDgsNDAwLDAsMFwiXG4vPlxuIl19
|