keevo-components 1.7.3 → 1.7.4
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/README.md +24 -24
- package/esm2022/keevo-components.mjs +4 -4
- package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
- package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
- package/esm2022/lib/api/base-components/base-component-crud-form.mjs +282 -279
- package/esm2022/lib/api/base-components/base-component-crud-list.mjs +74 -74
- package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
- package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -31
- package/esm2022/lib/api/base-components/base-component-dropdown.mjs +161 -161
- package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
- package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
- package/esm2022/lib/api/base-components/base-component.mjs +49 -49
- package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
- package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
- package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
- package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
- package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
- package/esm2022/lib/api/components/error/error.component.mjs +26 -26
- package/esm2022/lib/api/components/error/kverror.module.mjs +35 -35
- package/esm2022/lib/api/components/table/action-item.mjs +2 -2
- package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
- package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
- package/esm2022/lib/api/components/table/table.config.mjs +2 -2
- package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
- package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
- package/esm2022/lib/api/helpers/keevo-validators.mjs +64 -64
- package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
- package/esm2022/lib/api/models/menu/menu.model.mjs +2 -2
- package/esm2022/lib/api/models/menu/menucompleto.model.mjs +2 -2
- package/esm2022/lib/api/models/menu/sistemamenu.model.mjs +2 -2
- package/esm2022/lib/api/modules/primeng.module.mjs +251 -251
- package/esm2022/lib/api/services/base.api.service.mjs +74 -74
- package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
- package/esm2022/lib/api/services/component.service.mjs +27 -27
- package/esm2022/lib/api/services/form.service.mjs +84 -84
- package/esm2022/lib/api/services/imagens.service.mjs +28 -28
- package/esm2022/lib/api/services/notification.service.mjs +67 -67
- package/esm2022/lib/api/services/object.service.mjs +26 -26
- package/esm2022/lib/avatar/avatar.component.mjs +64 -64
- package/esm2022/lib/avatar/kv-avatar.module.mjs +24 -24
- package/esm2022/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
- package/esm2022/lib/buttons/button-popup/button-popup.component.mjs +31 -31
- package/esm2022/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
- package/esm2022/lib/buttons/button-success/button-success.component.mjs +17 -17
- package/esm2022/lib/buttons/kvbutton.module.mjs +39 -39
- package/esm2022/lib/chart/chart.component.mjs +145 -145
- package/esm2022/lib/chart/kvchart.module.mjs +32 -32
- package/esm2022/lib/directives/template.directive.mjs +24 -24
- package/esm2022/lib/inputs/check/check.component.mjs +26 -26
- package/esm2022/lib/inputs/dropdown/dropdown.component.mjs +37 -37
- package/esm2022/lib/inputs/editor/editor.component.mjs +88 -88
- package/esm2022/lib/inputs/input-calendar/input-calendar.component.mjs +89 -89
- package/esm2022/lib/inputs/input-mask/input-mask.component.mjs +29 -29
- package/esm2022/lib/inputs/input-number/input-number.component.mjs +59 -59
- package/esm2022/lib/inputs/input-password/input-password.component.mjs +33 -33
- package/esm2022/lib/inputs/input-text/input-text.component.mjs +21 -21
- package/esm2022/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +41 -41
- package/esm2022/lib/inputs/input-textarea/input-textarea.component.mjs +43 -43
- package/esm2022/lib/inputs/input-time/input-time.component.mjs +24 -24
- package/esm2022/lib/inputs/kvinputs.module.mjs +108 -108
- package/esm2022/lib/inputs/multi-select/multi-select.component.mjs +41 -41
- package/esm2022/lib/inputs/radio-group/radio-group.component.mjs +53 -53
- package/esm2022/lib/inputs/switch/switch.component.mjs +32 -32
- package/esm2022/lib/keevo-components.module.mjs +112 -112
- package/esm2022/lib/label/label.component.mjs +14 -14
- package/esm2022/lib/label/label.module.mjs +23 -23
- package/esm2022/lib/loader/kvloader.module.mjs +28 -28
- package/esm2022/lib/loader/loader.component.mjs +17 -17
- package/esm2022/lib/loader/loader.service.mjs +29 -29
- package/esm2022/lib/login/kvlogin.module.mjs +47 -47
- package/esm2022/lib/login/login.component.mjs +52 -52
- package/esm2022/lib/menu/kvmenu.module.mjs +43 -43
- package/esm2022/lib/menu/menu.component.mjs +215 -215
- package/esm2022/lib/orgchart/orgchart.component.mjs +100 -100
- package/esm2022/lib/orgchart/orgchart.module.mjs +24 -24
- package/esm2022/lib/page-form/kv-page-form.module.mjs +38 -38
- package/esm2022/lib/page-form/page-form.component.mjs +147 -147
- package/esm2022/lib/picklist/kvpicklist.module.mjs +32 -32
- package/esm2022/lib/picklist/picklist.component.mjs +48 -48
- package/esm2022/lib/pipes/codigofile.pipe.mjs +19 -19
- package/esm2022/lib/pipes/cpfcnpj.pipe.mjs +25 -25
- package/esm2022/lib/pipes/pipes.module.mjs +34 -34
- package/esm2022/lib/pipes/telefone.pipe.mjs +45 -45
- package/esm2022/lib/table/kvtable.module.mjs +32 -32
- package/esm2022/lib/table/table.component.mjs +513 -513
- package/esm2022/lib/tree-table/kv-treetable.component.mjs +371 -371
- package/esm2022/lib/tree-table/kv-treetable.module.mjs +32 -32
- package/esm2022/lib/tree-view/kvtree-view.module.mjs +28 -28
- package/esm2022/lib/tree-view/tree-view.component.mjs +30 -30
- package/esm2022/lib/workspace/kvworkspace.module.mjs +51 -51
- package/esm2022/lib/workspace/workspace.component.mjs +183 -183
- package/esm2022/public-api.mjs +144 -144
- package/fesm2022/keevo-components.mjs +4569 -4566
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/api/base-components/base-component-button.d.ts +14 -14
- package/lib/api/base-components/base-component-chart.d.ts +40 -40
- package/lib/api/base-components/base-component-crud-form.d.ts +141 -138
- package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
- package/lib/api/base-components/base-component-crud.d.ts +36 -36
- package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -15
- package/lib/api/base-components/base-component-dropdown.d.ts +42 -42
- package/lib/api/base-components/base-component-input.d.ts +31 -31
- package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
- package/lib/api/base-components/base-component.d.ts +21 -21
- package/lib/api/components/chart/chart.config.d.ts +11 -11
- package/lib/api/components/chart/chart.model.d.ts +9 -9
- package/lib/api/components/chart/orchart.config.d.ts +35 -35
- package/lib/api/components/chart/orchart.item.d.ts +26 -26
- package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
- package/lib/api/components/error/error.component.d.ts +12 -12
- package/lib/api/components/error/kverror.module.d.ts +10 -10
- package/lib/api/components/table/action-item.d.ts +5 -5
- package/lib/api/components/table/kv-menuitem.d.ts +9 -9
- package/lib/api/components/table/table.config.column.d.ts +21 -21
- package/lib/api/components/table/table.config.d.ts +17 -17
- package/lib/api/components/table/table.paginate.d.ts +6 -6
- package/lib/api/helpers/component-providers.d.ts +2 -2
- package/lib/api/helpers/keevo-validators.d.ts +10 -10
- package/lib/api/helpers/translate-primeng.d.ts +4 -4
- package/lib/api/models/menu/menu.model.d.ts +10 -10
- package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
- package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
- package/lib/api/modules/primeng.module.d.ts +61 -61
- package/lib/api/services/base.api.service.d.ts +25 -25
- package/lib/api/services/breadcrumbs.service.d.ts +16 -16
- package/lib/api/services/component.service.d.ts +11 -11
- package/lib/api/services/form.service.d.ts +27 -27
- package/lib/api/services/imagens.service.d.ts +10 -10
- package/lib/api/services/notification.service.d.ts +25 -25
- package/lib/api/services/object.service.d.ts +8 -8
- package/lib/avatar/avatar.component.d.ts +19 -19
- package/lib/avatar/kv-avatar.module.d.ts +8 -8
- package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
- package/lib/buttons/button-popup/button-popup.component.d.ts +13 -13
- package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
- package/lib/buttons/button-success/button-success.component.d.ts +7 -7
- package/lib/buttons/kvbutton.module.d.ts +11 -11
- package/lib/chart/chart.component.d.ts +56 -56
- package/lib/chart/kvchart.module.d.ts +10 -10
- package/lib/directives/template.directive.d.ts +11 -11
- package/lib/inputs/check/check.component.d.ts +11 -11
- package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
- package/lib/inputs/editor/editor.component.d.ts +36 -36
- package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
- package/lib/inputs/input-mask/input-mask.component.d.ts +12 -12
- package/lib/inputs/input-number/input-number.component.d.ts +19 -19
- package/lib/inputs/input-password/input-password.component.d.ts +13 -13
- package/lib/inputs/input-text/input-text.component.d.ts +9 -9
- package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +16 -16
- package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
- package/lib/inputs/input-time/input-time.component.d.ts +10 -10
- package/lib/inputs/kvinputs.module.d.ts +25 -25
- package/lib/inputs/multi-select/multi-select.component.d.ts +14 -14
- package/lib/inputs/radio-group/radio-group.component.d.ts +18 -18
- package/lib/inputs/switch/switch.component.d.ts +13 -13
- package/lib/keevo-components.module.d.ts +20 -20
- package/lib/label/label.component.d.ts +7 -7
- package/lib/label/label.module.d.ts +8 -8
- package/lib/loader/kvloader.module.d.ts +9 -9
- package/lib/loader/loader.component.d.ts +8 -8
- package/lib/loader/loader.service.d.ts +10 -10
- package/lib/login/kvlogin.module.d.ts +13 -13
- package/lib/login/login.component.d.ts +30 -30
- package/lib/menu/kvmenu.module.d.ts +12 -12
- package/lib/menu/menu.component.d.ts +73 -73
- package/lib/orgchart/orgchart.component.d.ts +27 -27
- package/lib/orgchart/orgchart.module.d.ts +9 -9
- package/lib/page-form/kv-page-form.module.d.ts +11 -11
- package/lib/page-form/page-form.component.d.ts +70 -70
- package/lib/picklist/kvpicklist.module.d.ts +10 -10
- package/lib/picklist/picklist.component.d.ts +20 -20
- package/lib/pipes/codigofile.pipe.d.ts +7 -7
- package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
- package/lib/pipes/pipes.module.d.ts +10 -10
- package/lib/pipes/telefone.pipe.d.ts +7 -7
- package/lib/table/kvtable.module.d.ts +10 -10
- package/lib/table/table.component.d.ts +107 -107
- package/lib/tree-table/kv-treetable.component.d.ts +85 -85
- package/lib/tree-table/kv-treetable.module.d.ts +11 -11
- package/lib/tree-view/kvtree-view.module.d.ts +9 -9
- package/lib/tree-view/tree-view.component.d.ts +14 -14
- package/lib/workspace/kvworkspace.module.d.ts +14 -14
- package/lib/workspace/workspace.component.d.ts +46 -46
- package/package.json +1 -1
- package/public-api.d.ts +140 -140
|
@@ -1,513 +1,513 @@
|
|
|
1
|
-
import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
-
import { TemplateDirective } from '../directives/template.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "../pipes/codigofile.pipe";
|
|
6
|
-
import * as i3 from "../pipes/cpfcnpj.pipe";
|
|
7
|
-
import * as i4 from "../pipes/telefone.pipe";
|
|
8
|
-
import * as i5 from "primeng/api";
|
|
9
|
-
import * as i6 from "primeng/autofocus";
|
|
10
|
-
import * as i7 from "primeng/button";
|
|
11
|
-
import * as i8 from "primeng/card";
|
|
12
|
-
import * as i9 from "primeng/checkbox";
|
|
13
|
-
import * as i10 from "primeng/tooltip";
|
|
14
|
-
import * as i11 from "primeng/inputtext";
|
|
15
|
-
import * as i12 from "primeng/menu";
|
|
16
|
-
import * as i13 from "primeng/panel";
|
|
17
|
-
import * as i14 from "primeng/table";
|
|
18
|
-
import * as i15 from "@angular/forms";
|
|
19
|
-
const imgDefault = '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';
|
|
20
|
-
export class TableComponent {
|
|
21
|
-
set setConfig(value) {
|
|
22
|
-
this.config = {
|
|
23
|
-
enableCation: value.enableCation || true,
|
|
24
|
-
enableSelect: value.enableSelect || false,
|
|
25
|
-
enableFilter: value.enableFilter || true,
|
|
26
|
-
...value,
|
|
27
|
-
};
|
|
28
|
-
if (this.config.enableFilter) {
|
|
29
|
-
this.config.columns.forEach((col) => {
|
|
30
|
-
this.globalFilterFields.push(col.field);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
|
|
35
|
-
this.datePipe = datePipe;
|
|
36
|
-
this.decimalPipe = decimalPipe;
|
|
37
|
-
this.codigoFipePipe = codigoFipePipe;
|
|
38
|
-
this.cpfCnpjPipe = cpfCnpjPipe;
|
|
39
|
-
this.telefonePipe = telefonePipe;
|
|
40
|
-
this.globalFilterFields = [];
|
|
41
|
-
this.selectedSize = '';
|
|
42
|
-
this.menuItems = [];
|
|
43
|
-
this.menuColumns = [];
|
|
44
|
-
this.checked = true;
|
|
45
|
-
this.columns = [];
|
|
46
|
-
this.deletedColuns = [];
|
|
47
|
-
this.menuFiltro = false;
|
|
48
|
-
this.checkboxClicked = false;
|
|
49
|
-
this.showFiltrosAvancados = false;
|
|
50
|
-
this.collapsed = false;
|
|
51
|
-
this.selectedItems = [];
|
|
52
|
-
this.paginator = true;
|
|
53
|
-
this.rows = 5;
|
|
54
|
-
this.pageLinksOptions = 1;
|
|
55
|
-
this.showFirstLastIcon = false;
|
|
56
|
-
this.applyStyle = (rowData, col) => '';
|
|
57
|
-
this.acoesLinhaTabela = true;
|
|
58
|
-
this.filterColumnsBtn = false;
|
|
59
|
-
this.filtrosAvancados = false;
|
|
60
|
-
this.scrollHeight = '';
|
|
61
|
-
this.isTableScrollable = false;
|
|
62
|
-
this.onActiveItem = new EventEmitter();
|
|
63
|
-
this.onActiveItemLote = new EventEmitter();
|
|
64
|
-
this.onPaginate = new EventEmitter();
|
|
65
|
-
this.onSelectionChange = new EventEmitter();
|
|
66
|
-
this.doubleClickEvent = new EventEmitter();
|
|
67
|
-
this.filterField = new EventEmitter();
|
|
68
|
-
this.filtrosAvancadosEmit = new EventEmitter();
|
|
69
|
-
this.isRowSelectable = this.isRowSelectable.bind(this);
|
|
70
|
-
}
|
|
71
|
-
ngOnInit() {
|
|
72
|
-
this.adjustTableSize();
|
|
73
|
-
this.tamanhoTela = window.innerWidth;
|
|
74
|
-
// this.criarMenuColumns();
|
|
75
|
-
this.config.columns.forEach((col) => {
|
|
76
|
-
this.columns.push(col);
|
|
77
|
-
});
|
|
78
|
-
this.checkHideColumns();
|
|
79
|
-
}
|
|
80
|
-
onWindowResize() {
|
|
81
|
-
this.adjustTableSize();
|
|
82
|
-
this.tamanhoTela = window.innerWidth;
|
|
83
|
-
}
|
|
84
|
-
activeItem(rowData) {
|
|
85
|
-
this.onActiveItem.emit(rowData);
|
|
86
|
-
}
|
|
87
|
-
activeItemLote(rowData) {
|
|
88
|
-
this.onActiveItemLote.emit(rowData);
|
|
89
|
-
}
|
|
90
|
-
isBooleanField(rowData, col) {
|
|
91
|
-
return typeof rowData[col.field] == 'boolean';
|
|
92
|
-
}
|
|
93
|
-
isChipField(col) {
|
|
94
|
-
return col.fieldType == 'chip';
|
|
95
|
-
}
|
|
96
|
-
isImageField(col) {
|
|
97
|
-
let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
|
|
98
|
-
return retorno;
|
|
99
|
-
}
|
|
100
|
-
// isVisibleCheckbox(rowData: any): boolean {
|
|
101
|
-
// return this.config.visibleControlCheckboxFunction? this.config.visibleControlCheckboxFunction(rowData): true;
|
|
102
|
-
// }
|
|
103
|
-
isRowSelectable(event) {
|
|
104
|
-
return !this.isDisabledCheckbox(event.data);
|
|
105
|
-
}
|
|
106
|
-
isDisabledCheckbox(rowData) {
|
|
107
|
-
return this.config.disableControlCheckboxFunction
|
|
108
|
-
? this.config.disableControlCheckboxFunction(rowData)
|
|
109
|
-
: false;
|
|
110
|
-
}
|
|
111
|
-
loadImage(rowData, col) {
|
|
112
|
-
/*
|
|
113
|
-
Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
|
|
114
|
-
*/
|
|
115
|
-
let retorno = `data:image/jpg;base64, ${imgDefault}`;
|
|
116
|
-
if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
|
|
117
|
-
if (rowData[col.field].includes('http'))
|
|
118
|
-
retorno = rowData[col.field];
|
|
119
|
-
else
|
|
120
|
-
retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
|
|
121
|
-
}
|
|
122
|
-
return retorno;
|
|
123
|
-
}
|
|
124
|
-
onGlobalFilter(table, event) {
|
|
125
|
-
this.filterField.emit(event.target.value);
|
|
126
|
-
table.filterGlobal(event.target.value, 'contains');
|
|
127
|
-
}
|
|
128
|
-
paginate(event) {
|
|
129
|
-
if (event) {
|
|
130
|
-
let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
|
|
131
|
-
let termoPesquisa = '';
|
|
132
|
-
let ordenacao = '';
|
|
133
|
-
if (event.globalFilter)
|
|
134
|
-
termoPesquisa = event.globalFilter;
|
|
135
|
-
if (event.sortField)
|
|
136
|
-
ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
|
|
137
|
-
const objeto = {
|
|
138
|
-
paginaInicial: paginaInicial,
|
|
139
|
-
tamanhoPagina: event.rows,
|
|
140
|
-
termoPesquisa: termoPesquisa,
|
|
141
|
-
ordenacao: ordenacao,
|
|
142
|
-
};
|
|
143
|
-
this.onPaginate.emit(objeto);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
selectionChange(value = []) {
|
|
147
|
-
this.onSelectionChange.emit(value);
|
|
148
|
-
}
|
|
149
|
-
returnRowClass(rowData, col) {
|
|
150
|
-
let value = rowData[col.field];
|
|
151
|
-
let rowClass;
|
|
152
|
-
this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
|
|
153
|
-
if (col.expiredDate == true) {
|
|
154
|
-
new Date(value) < new Date()
|
|
155
|
-
? (rowClass = rowClass + ' text-red-400 font-semibold')
|
|
156
|
-
: '';
|
|
157
|
-
}
|
|
158
|
-
return rowClass;
|
|
159
|
-
}
|
|
160
|
-
expiredFile(rowData, col) {
|
|
161
|
-
let value = rowData['datavencimento'];
|
|
162
|
-
return new Date(value) < new Date() && col.field == 'area';
|
|
163
|
-
}
|
|
164
|
-
transformValue(rowData, col) {
|
|
165
|
-
let value = rowData[col.field];
|
|
166
|
-
if (value != null) {
|
|
167
|
-
if (!col.pipe) {
|
|
168
|
-
return value;
|
|
169
|
-
}
|
|
170
|
-
switch (col.pipe) {
|
|
171
|
-
case 'date':
|
|
172
|
-
return this.datePipe.transform(value, 'dd/MM/yyyy');
|
|
173
|
-
case 'decimal':
|
|
174
|
-
return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
|
|
175
|
-
case 'cpfcnpj':
|
|
176
|
-
return this.cpfCnpjPipe.transform(value);
|
|
177
|
-
case 'telefone':
|
|
178
|
-
return this.telefonePipe.transform(value);
|
|
179
|
-
case 'codigofipe':
|
|
180
|
-
return this.codigoFipePipe.transform(value);
|
|
181
|
-
case 'money':
|
|
182
|
-
return this.formatarValor(value);
|
|
183
|
-
case 'percentage':
|
|
184
|
-
return `${value} %`;
|
|
185
|
-
default:
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
formatarValor(valor) {
|
|
191
|
-
const formatter = new Intl.NumberFormat('pt-BR', {
|
|
192
|
-
style: 'currency',
|
|
193
|
-
currency: 'BRL',
|
|
194
|
-
});
|
|
195
|
-
return formatter.format(valor);
|
|
196
|
-
}
|
|
197
|
-
adjustTableSize() {
|
|
198
|
-
if (this.tableSize < 800) {
|
|
199
|
-
this.selectedSize = 'p-datatable-sm';
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
this.selectedSize = '';
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
doubleClick(e, rowData) {
|
|
206
|
-
let eventDoubleClick = { event: e, rowData: rowData };
|
|
207
|
-
let array = [];
|
|
208
|
-
e.target.classList.forEach((x) => array.push(x));
|
|
209
|
-
// if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
|
|
210
|
-
this.doubleClickEvent.emit(eventDoubleClick);
|
|
211
|
-
}
|
|
212
|
-
centralizarColunas(col) {
|
|
213
|
-
if (col.centralize) {
|
|
214
|
-
return 'text-align: center';
|
|
215
|
-
}
|
|
216
|
-
else
|
|
217
|
-
return '';
|
|
218
|
-
}
|
|
219
|
-
alignColunas(col) {
|
|
220
|
-
if (col.align) {
|
|
221
|
-
return `text-align: ${col.align}`;
|
|
222
|
-
}
|
|
223
|
-
else
|
|
224
|
-
return '';
|
|
225
|
-
}
|
|
226
|
-
alignColunasHeader(col) {
|
|
227
|
-
if (col.align) {
|
|
228
|
-
if (col.align == 'right')
|
|
229
|
-
return 'justify-content: end';
|
|
230
|
-
else
|
|
231
|
-
return '';
|
|
232
|
-
}
|
|
233
|
-
else
|
|
234
|
-
return '';
|
|
235
|
-
}
|
|
236
|
-
retornarCampo(action, rowData, field) {
|
|
237
|
-
const _function = action.dynamicfields
|
|
238
|
-
? action.dynamicfields[field]
|
|
239
|
-
: null;
|
|
240
|
-
const _field = _function
|
|
241
|
-
? _function.apply(action, [rowData])
|
|
242
|
-
: action[field];
|
|
243
|
-
return _field;
|
|
244
|
-
}
|
|
245
|
-
retornarRow(rowData, col, field) {
|
|
246
|
-
const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
|
|
247
|
-
const _field = _rowaction && _rowaction[field]
|
|
248
|
-
? _rowaction[field].constructor === Function
|
|
249
|
-
? _rowaction[field].apply(this, [rowData])
|
|
250
|
-
: _rowaction[field]
|
|
251
|
-
: null;
|
|
252
|
-
return _field;
|
|
253
|
-
}
|
|
254
|
-
exibirCampo(field, rowData) {
|
|
255
|
-
let visible = field.visible ? field.visible(rowData) : true;
|
|
256
|
-
// if (field != undefined && field != null && field != '') {
|
|
257
|
-
// const value = rowData[field];
|
|
258
|
-
// return value;
|
|
259
|
-
// }
|
|
260
|
-
return visible;
|
|
261
|
-
}
|
|
262
|
-
criarMenusModal(data) {
|
|
263
|
-
if (this.config.actions && data) {
|
|
264
|
-
const items = this.config.actions.map((action) => {
|
|
265
|
-
const icon = this.retornarCampo(action, data, 'icon');
|
|
266
|
-
const tooltip = this.retornarCampo(action, data, 'tooltip');
|
|
267
|
-
const tooltipPosition = this.retornarCampo(action, data, 'tooltipPosition');
|
|
268
|
-
const label = this.retornarCampo(action, data, 'label');
|
|
269
|
-
const command = this.retornarCampo(action, data, 'command');
|
|
270
|
-
const visible = action.visible ? action.visible(data) : true;
|
|
271
|
-
const disabled = action.disabled
|
|
272
|
-
? action.disabled(data)
|
|
273
|
-
: false;
|
|
274
|
-
const menuInsert = {
|
|
275
|
-
label,
|
|
276
|
-
icon,
|
|
277
|
-
tooltip,
|
|
278
|
-
tooltipPosition,
|
|
279
|
-
command,
|
|
280
|
-
disabled,
|
|
281
|
-
visible,
|
|
282
|
-
};
|
|
283
|
-
let item = this.menuItems.filter((x) => x.command == menuInsert.command);
|
|
284
|
-
if (item.length == 0)
|
|
285
|
-
this.menuItems.push(menuInsert);
|
|
286
|
-
else {
|
|
287
|
-
if (menuInsert.label != item[0].label) {
|
|
288
|
-
let index = this.menuItems.indexOf(item[0]);
|
|
289
|
-
this.menuItems.splice(index, 1);
|
|
290
|
-
}
|
|
291
|
-
if (menuInsert.visible != item[0].visible) {
|
|
292
|
-
let index = this.menuItems.indexOf(item[0]);
|
|
293
|
-
this.menuItems.splice(index, 1);
|
|
294
|
-
}
|
|
295
|
-
if (menuInsert.disabled != item[0].disabled) {
|
|
296
|
-
let index = this.menuItems.indexOf(item[0]);
|
|
297
|
-
this.menuItems.splice(index, 1);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
returnClassChip(rowData, col) {
|
|
304
|
-
return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
|
|
305
|
-
}
|
|
306
|
-
returnClassIcon(rowData, col) {
|
|
307
|
-
return this.retornarRow(rowData, col, 'iconrow');
|
|
308
|
-
}
|
|
309
|
-
returnTooltipIcon(rowData, col) {
|
|
310
|
-
return this.retornarRow(rowData, col, 'tooltipiconrow');
|
|
311
|
-
}
|
|
312
|
-
returnTooltipRow(rowData, col) {
|
|
313
|
-
return this.retornarRow(rowData, col, 'tooltiprow');
|
|
314
|
-
}
|
|
315
|
-
deleteColumn(field) {
|
|
316
|
-
let index;
|
|
317
|
-
let column = this.config.columns.find((x) => x.field == field);
|
|
318
|
-
if (column) {
|
|
319
|
-
index = this.config.columns.indexOf(column);
|
|
320
|
-
this.config.columns.splice(index, 1);
|
|
321
|
-
this.deletedColuns.push(column);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
addColumn(field) {
|
|
325
|
-
let index;
|
|
326
|
-
let column = this.config.columns.find((x) => x.field == field);
|
|
327
|
-
if (!column) {
|
|
328
|
-
let deletedColumn = this.deletedColuns.find((x) => x.field == field);
|
|
329
|
-
if (deletedColumn != undefined) {
|
|
330
|
-
index = this.deletedColuns.indexOf(deletedColumn);
|
|
331
|
-
this.deletedColuns.slice(index, 1);
|
|
332
|
-
this.config.columns.push(deletedColumn);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
dinamicColumnSet(e, col) {
|
|
337
|
-
col.checked = e.checked;
|
|
338
|
-
if (e.checked)
|
|
339
|
-
this.addColumn(col.field);
|
|
340
|
-
else
|
|
341
|
-
this.deleteColumn(col.field);
|
|
342
|
-
if (col.position)
|
|
343
|
-
this.config.columns.sort(this.sortByPosition());
|
|
344
|
-
}
|
|
345
|
-
// abrirMenuFiltro(e: any) {
|
|
346
|
-
// this.menuFiltro = !this.menuFiltro;
|
|
347
|
-
// this.checkboxClicked = false;
|
|
348
|
-
// if (this.tamanhoTela < 700)
|
|
349
|
-
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft - 288) + 'px')
|
|
350
|
-
// else
|
|
351
|
-
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft + 40) + 'px')
|
|
352
|
-
// this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px')
|
|
353
|
-
// this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden')
|
|
354
|
-
// }
|
|
355
|
-
// fecharMenuFiltro() {
|
|
356
|
-
// this.menuFiltro = false;
|
|
357
|
-
// this.checkboxClicked = false;
|
|
358
|
-
// this.styleSetter('visibility', 'hidden')
|
|
359
|
-
// }
|
|
360
|
-
// @HostListener('document:keydown.escape', ['$event'])
|
|
361
|
-
// onEscapeKey(event: KeyboardEvent) {
|
|
362
|
-
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
363
|
-
// this.fecharMenuFiltro();
|
|
364
|
-
// }
|
|
365
|
-
// }
|
|
366
|
-
// @HostListener('document:click', ['$event'])
|
|
367
|
-
// onClickEvent(event: any) {
|
|
368
|
-
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
369
|
-
// const clickedElement = event.target as HTMLElement;
|
|
370
|
-
// const menuFiltroDiv =
|
|
371
|
-
// this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
|
|
372
|
-
// const botaoFiltro =
|
|
373
|
-
// this.elementRef.nativeElement.querySelector('#botaoFiltro');
|
|
374
|
-
// const isCheckboxClicked =
|
|
375
|
-
// clickedElement.classList.toString().includes('p-checkbox') ||
|
|
376
|
-
// event.target.classList.toString() == '';
|
|
377
|
-
// const isInsideMenu =
|
|
378
|
-
// menuFiltroDiv?.contains(clickedElement) ||
|
|
379
|
-
// botaoFiltro?.contains(clickedElement) ||
|
|
380
|
-
// isCheckboxClicked;
|
|
381
|
-
// if (!isInsideMenu) this.fecharMenuFiltro();
|
|
382
|
-
// }
|
|
383
|
-
// }
|
|
384
|
-
checkMenuFiltro(col) {
|
|
385
|
-
let deletedColumn = this.deletedColuns.find((x) => x.field == col.field);
|
|
386
|
-
if (deletedColumn)
|
|
387
|
-
col.checked = false;
|
|
388
|
-
else
|
|
389
|
-
col.checked = true;
|
|
390
|
-
}
|
|
391
|
-
sortByPosition() {
|
|
392
|
-
return function (elem1, elem2) {
|
|
393
|
-
if (elem1.position < elem2.position) {
|
|
394
|
-
return -1;
|
|
395
|
-
}
|
|
396
|
-
else if (elem1.position > elem2.position) {
|
|
397
|
-
return 1;
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
return 0;
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
callDisabled(action, data) {
|
|
405
|
-
if (action?.disabled) {
|
|
406
|
-
return action.disabled(data);
|
|
407
|
-
}
|
|
408
|
-
return false;
|
|
409
|
-
}
|
|
410
|
-
dinamicDisableColumn(col) {
|
|
411
|
-
if (col.fixedColumn)
|
|
412
|
-
return col.fixedColumn;
|
|
413
|
-
else
|
|
414
|
-
return false;
|
|
415
|
-
}
|
|
416
|
-
checkHideColumns() {
|
|
417
|
-
let hideColumnsConfig = this.columns.filter((col) => col.hideColumn == true);
|
|
418
|
-
hideColumnsConfig.forEach((col) => this.deleteColumn(col.field));
|
|
419
|
-
}
|
|
420
|
-
getCustomTemplate(templatename) {
|
|
421
|
-
return this._templates[templatename];
|
|
422
|
-
}
|
|
423
|
-
// styleSetter(style: string, data: string) {
|
|
424
|
-
// this.renderer?.setStyle(
|
|
425
|
-
// this.menuFiltroDiv.nativeElement,
|
|
426
|
-
// style,
|
|
427
|
-
// data
|
|
428
|
-
// );
|
|
429
|
-
// }
|
|
430
|
-
filtrosAvancadosEvent(e) {
|
|
431
|
-
this.showFiltrosAvancados = !this.showFiltrosAvancados;
|
|
432
|
-
this.filtrosAvancadosEmit.emit(this.showFiltrosAvancados);
|
|
433
|
-
}
|
|
434
|
-
isButtonDisable(action, rowData, commandEvent) {
|
|
435
|
-
if (this.callDisabled(action, rowData)) {
|
|
436
|
-
return '';
|
|
437
|
-
}
|
|
438
|
-
else
|
|
439
|
-
return this.activeItem(rowData), action?.command(commandEvent);
|
|
440
|
-
}
|
|
441
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i3.CpfCnpjPipe }, { token: i4.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, selector: "kv-table", inputs: { _templates: ["templates", "_templates"], setConfig: ["config", "setConfig"], dataSource: "dataSource", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable" }, outputs: { onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", filtrosAvancadosEmit: "filtrosAvancadosEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }], ngImport: i0, template: "<div>\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\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 (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\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 tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\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\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\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>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\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 </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\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 >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\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\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\" class=\"mr-1\">\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\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 + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\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: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\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: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { 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", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]" }, { kind: "component", type: i12.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i13.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i14.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: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
443
|
-
}
|
|
444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
445
|
-
type: Component,
|
|
446
|
-
args: [{ selector: 'kv-table', template: "<div>\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\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 (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\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 tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\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\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\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>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\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 </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\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 >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\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\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span\r\n *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \"\r\n >\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\" class=\"mr-1\">\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\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 + 2\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\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: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\n"] }]
|
|
447
|
-
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i3.CpfCnpjPipe }, { type: i4.TelefonePipe }]; }, propDecorators: { templates: [{
|
|
448
|
-
type: ContentChildren,
|
|
449
|
-
args: [TemplateDirective]
|
|
450
|
-
}], _templates: [{
|
|
451
|
-
type: Input,
|
|
452
|
-
args: ['templates']
|
|
453
|
-
}], table: [{
|
|
454
|
-
type: ViewChild,
|
|
455
|
-
args: ['table', { static: false }]
|
|
456
|
-
}], setConfig: [{
|
|
457
|
-
type: Input,
|
|
458
|
-
args: ['config']
|
|
459
|
-
}], dataSource: [{
|
|
460
|
-
type: Input
|
|
461
|
-
}], selectedItems: [{
|
|
462
|
-
type: Input
|
|
463
|
-
}], totalRecords: [{
|
|
464
|
-
type: Input
|
|
465
|
-
}], paginator: [{
|
|
466
|
-
type: Input
|
|
467
|
-
}], rowsPerPageOptions: [{
|
|
468
|
-
type: Input
|
|
469
|
-
}], rows: [{
|
|
470
|
-
type: Input
|
|
471
|
-
}], pageLinksOptions: [{
|
|
472
|
-
type: Input
|
|
473
|
-
}], showFirstLastIcon: [{
|
|
474
|
-
type: Input
|
|
475
|
-
}], tableSize: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], applyStyle: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], acoesLinhaTabela: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], filterColumnsBtn: [{
|
|
482
|
-
type: Input
|
|
483
|
-
}], filtrosAvancados: [{
|
|
484
|
-
type: Input
|
|
485
|
-
}], scrollHeight: [{
|
|
486
|
-
type: Input
|
|
487
|
-
}], isTableScrollable: [{
|
|
488
|
-
type: Input
|
|
489
|
-
}], onActiveItem: [{
|
|
490
|
-
type: Output
|
|
491
|
-
}], onActiveItemLote: [{
|
|
492
|
-
type: Output
|
|
493
|
-
}], onPaginate: [{
|
|
494
|
-
type: Output
|
|
495
|
-
}], onSelectionChange: [{
|
|
496
|
-
type: Output
|
|
497
|
-
}], doubleClickEvent: [{
|
|
498
|
-
type: Output
|
|
499
|
-
}], filterField: [{
|
|
500
|
-
type: Output
|
|
501
|
-
}], filtrosAvancadosEmit: [{
|
|
502
|
-
type: Output
|
|
503
|
-
}], menuFiltroDiv: [{
|
|
504
|
-
type: ViewChild,
|
|
505
|
-
args: ['menuFiltroDiv']
|
|
506
|
-
}], botaoFiltro: [{
|
|
507
|
-
type: ViewChild,
|
|
508
|
-
args: ['botaoFiltro']
|
|
509
|
-
}], onWindowResize: [{
|
|
510
|
-
type: HostListener,
|
|
511
|
-
args: ['window:resize', ['$event']]
|
|
512
|
-
}] } });
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNyRSxNQUFNLFVBQVUsR0FDZCwwcVBBQTBxUCxDQUFDO0FBTzdxUCxNQUFNLE9BQU8sY0FBYztJQWlDekIsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUE2QkQsWUFDbUIsUUFBa0IsRUFDbEIsV0FB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QUFTO3VCQUFDLGFBQWE7Z0JBdUJ4QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVDb25maWdDb2x1bW4gfSBmcm9tICcuLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcuY29sdW1uJztcclxuaW1wb3J0IHsgVGFibGVQYWdpbmF0ZSB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnBhZ2luYXRlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvZGlnb0ZpcGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvY29kaWdvZmlsZS5waXBlJztcclxuaW1wb3J0IHsgQ3BmQ25walBpcGUgfSBmcm9tICcuLi9waXBlcy9jcGZjbnBqLnBpcGUnO1xyXG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi9waXBlcy90ZWxlZm9uZS5waXBlJztcclxuaW1wb3J0IHsgS3ZNZW51SXRlbSB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAncHJpbWVuZy9wYW5lbCc7XHJcbmltcG9ydCB7IE1lbnVJdGVtQ29tbWFuZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuY29uc3QgaW1nRGVmYXVsdCA9XHJcbiAgJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uZmlnITogVGFibGVDb25maWc7XHJcbiAgcGVzcXVpc2FWYWx1ZSE6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgYWN0aW9uc1RlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XHJcblxyXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XHJcbiAgbWVudUNvbHVtbnM6IEt2TWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgbWVudUZpbHRybzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrYm94Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzaG93RmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29tbWFuZEV2ZW50ITogTWVudUl0ZW1Db21tYW5kRXZlbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxhbnk+O1xyXG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcclxuICBkZWxldGVkQ29sdW1uc0luZGV4ITogYW55W107XHJcblxyXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICBlbmFibGVDYXRpb246IHZhbHVlLmVuYWJsZUNhdGlvbiB8fCB0cnVlLFxyXG4gICAgICBlbmFibGVTZWxlY3Q6IHZhbHVlLmVuYWJsZVNlbGVjdCB8fCBmYWxzZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcclxuICAgICAgLi4udmFsdWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XHJcbiAgQElucHV0KCkgcm93czogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XHJcbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW1Mb3RlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdHJvc0F2YW5jYWRvc0VtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JvdGFvRmlsdHJvJykgYm90YW9GaWx0cm8hOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZVxyXG4gICkge1xyXG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xyXG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgLy8gdGhpcy5jcmlhck1lbnVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2hlY2tIaWRlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xyXG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW1Mb3RlLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBpc0Jvb2xlYW5GaWVsZChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2Ygcm93RGF0YVtjb2wuZmllbGRdID09ICdib29sZWFuJztcclxuICB9XHJcblxyXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ2ltYWdlJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgLy8gaXNWaXNpYmxlQ2hlY2tib3gocm93RGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5jb25maWcudmlzaWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uPyB0aGlzLmNvbmZpZy52aXNpYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSk6IHRydWU7XHJcbiAgLy8gfVxyXG5cclxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcclxuICB9XHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7aW1nRGVmYXVsdH1gO1xyXG4gICAgaWYgKHJvd0RhdGEgJiYgY29sICYmIHJvd0RhdGFbY29sLmZpZWxkXSAmJiByb3dEYXRhW2NvbC5maWVsZF0gIT09ICcnKSB7XHJcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSkgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgZWxzZSByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJGaWVsZC5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKGV2ZW50Py5maXJzdCA+IDAgPyBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgOiBldmVudC5maXJzdCkgKyAxO1xyXG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xyXG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnNvcnRGaWVsZClcclxuICAgICAgICBvcmRlbmFjYW8gPSBgJHtldmVudC5zb3J0RmllbGR9ICR7XHJcbiAgICAgICAgICBldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgIH1gO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XHJcblxyXG4gICAgaWYgKGNvbC5leHBpcmVkRGF0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcclxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXHJcbiAgICAgICAgOiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiByb3dDbGFzcztcclxuICB9XHJcblxyXG4gIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjb2RpZ29maXBlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG5cclxuICAgIGxldCBldmVudERvdWJsZUNsaWNrID0geyBldmVudDogZSwgcm93RGF0YTogcm93RGF0YSB9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIC8vIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuZG91YmxlQ2xpY2tFdmVudC5lbWl0KGV2ZW50RG91YmxlQ2xpY2spO1xyXG4gIH1cclxuXHJcbiAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuY2VudHJhbGl6ZSkge1xyXG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcic7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYWxpZ25Db2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFsaWduQ29sdW5hc0hlYWRlcihjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29sLmFsaWduKSB7XHJcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XHJcbiAgICAgIGVsc2UgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHJldG9ybmFyQ2FtcG8oYWN0aW9uOiBLdk1lbnVJdGVtLCByb3dEYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcclxuICAgICAgPyAoYWN0aW9uLmR5bmFtaWNmaWVsZHNbZmllbGRdIGFzIEZ1bmN0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxyXG4gICAgICA/IF9mdW5jdGlvbi5hcHBseShhY3Rpb24sIFtyb3dEYXRhXSlcclxuICAgICAgOiBhY3Rpb25bZmllbGRdO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcblxyXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG5cclxuICBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcclxuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xyXG5cclxuICAgIC8vIGlmIChmaWVsZCAhPSB1bmRlZmluZWQgJiYgZmllbGQgIT0gbnVsbCAmJiBmaWVsZCAhPSAnJykge1xyXG4gICAgLy8gICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbZmllbGRdO1xyXG4gICAgLy8gICByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zICYmIGRhdGEpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICd0b29sdGlwJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcFBvc2l0aW9uID0gdGhpcy5yZXRvcm5hckNhbXBvKFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICd0b29sdGlwUG9zaXRpb24nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdsYWJlbCcpO1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQ6IGFueSA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdjb21tYW5kJyk7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZTogYm9vbGVhbiA9IGFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUoZGF0YSkgOiB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkOiBib29sZWFuID0gYWN0aW9uLmRpc2FibGVkXHJcbiAgICAgICAgICA/IGFjdGlvbi5kaXNhYmxlZChkYXRhKVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydDogS3ZNZW51SXRlbSA9IHtcclxuICAgICAgICAgIGxhYmVsLFxyXG4gICAgICAgICAgaWNvbixcclxuICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb24sXHJcbiAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQsXHJcbiAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBjaGlwLXN0eWxlIHctYXV0byBib3JkZXItcm91bmQtMnhsIHAtMiB0ZXh0LSR7dGhpcy5yZXRvcm5hclJvdyhcclxuICAgICAgcm93RGF0YSxcclxuICAgICAgY29sLFxyXG4gICAgICAnc3R5bGVjaGlwJ1xyXG4gICAgKX0gYm9yZGVyLSR7dGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdzdHlsZWNoaXAnKX1gO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcEljb24ocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXByb3cnKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUNvbHVtbihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcclxuICAgICAgKHg6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiB4LmZpZWxkID09IGZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGNvbHVtbikge1xyXG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5wdXNoKGNvbHVtbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb2x1bW4oZmllbGQ6IHN0cmluZykge1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgbGV0IGNvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICBsZXQgZGVsZXRlZENvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPVxyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5maW5kKCh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZCk7XHJcblxyXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBhbnkpIHtcclxuICAgIGNvbC5jaGVja2VkID0gZS5jaGVja2VkO1xyXG4gICAgaWYgKGUuY2hlY2tlZCkgdGhpcy5hZGRDb2x1bW4oY29sLmZpZWxkKTtcclxuICAgIGVsc2UgdGhpcy5kZWxldGVDb2x1bW4oY29sLmZpZWxkKTtcclxuXHJcbiAgICBpZiAoY29sLnBvc2l0aW9uKSB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvcnQodGhpcy5zb3J0QnlQb3NpdGlvbigpKTtcclxuICB9XHJcblxyXG4gIC8vIGFicmlyTWVudUZpbHRybyhlOiBhbnkpIHtcclxuICAvLyAgIHRoaXMubWVudUZpbHRybyA9ICF0aGlzLm1lbnVGaWx0cm87XHJcbiAgLy8gICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAvLyAgIGlmICh0aGlzLnRhbWFuaG9UZWxhIDwgNzAwKVxyXG4gIC8vICAgICB0aGlzLnN0eWxlU2V0dGVyKCdsZWZ0JywgKHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4KSArICdweCcpXHJcbiAgLy8gICBlbHNlXHJcbiAgLy8gICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ2xlZnQnLCAodGhpcy5ib3Rhb0ZpbHRyby5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyA0MCkgKyAncHgnKVxyXG5cclxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKVxyXG4gIC8vICAgdGhpcy5zdHlsZVNldHRlcigndmlzaWJpbGl0eScsIHRoaXMubWVudUZpbHRybyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZmVjaGFyTWVudUZpbHRybygpIHtcclxuICAvLyAgIHRoaXMubWVudUZpbHRybyA9IGZhbHNlO1xyXG4gIC8vICAgdGhpcy5jaGVja2JveENsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpXHJcbiAgLy8gfVxyXG5cclxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgLy8gb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAvLyAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gIC8vICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICAvLyBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgLy8gICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gIC8vICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAvLyAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gIC8vICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgLy8gICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgLy8gICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAvLyAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgLy8gICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gIC8vICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gIC8vICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gIC8vICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAvLyAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgLy8gICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5kZWxldGVkQ29sdW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBjb2wuZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoZGVsZXRlZENvbHVtbikgY29sLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIGVsc2UgY29sLmNoZWNrZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0xOiBhbnksIGVsZW0yOiBhbnkpIHtcclxuICAgICAgaWYgKGVsZW0xLnBvc2l0aW9uIDwgZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbTEucG9zaXRpb24gPiBlbGVtMi5wb3NpdGlvbikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY2FsbERpc2FibGVkKGFjdGlvbjogS3ZNZW51SXRlbSwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYWN0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGNvbC5maXhlZENvbHVtbikgcmV0dXJuIGNvbC5maXhlZENvbHVtbjtcclxuICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tIaWRlQ29sdW1ucygpIHtcclxuICAgIGxldCBoaWRlQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5oaWRlQ29sdW1uID09IHRydWVcclxuICAgICk7XHJcbiAgICBoaWRlQ29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2wpID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIC8vIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gIC8vICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoXHJcbiAgLy8gICAgIHRoaXMubWVudUZpbHRyb0Rpdi5uYXRpdmVFbGVtZW50LFxyXG4gIC8vICAgICBzdHlsZSxcclxuICAvLyAgICAgZGF0YVxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIGZpbHRyb3NBdmFuY2Fkb3NFdmVudChlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3MgPSAhdGhpcy5zaG93RmlsdHJvc0F2YW5jYWRvcztcclxuICAgIHRoaXMuZmlsdHJvc0F2YW5jYWRvc0VtaXQuZW1pdCh0aGlzLnNob3dGaWx0cm9zQXZhbmNhZG9zKTtcclxuICB9XHJcblxyXG4gIGlzQnV0dG9uRGlzYWJsZShhY3Rpb246IGFueSwgcm93RGF0YTogYW55LCBjb21tYW5kRXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5jYWxsRGlzYWJsZWQoYWN0aW9uLCByb3dEYXRhKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbShyb3dEYXRhKSwgYWN0aW9uPy5jb21tYW5kKGNvbW1hbmRFdmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPHAtcGFuZWxcclxuICAgICpuZ0lmPVwiZmlsdHJvc0F2YW5jYWRvc1wiXHJcbiAgICBoZWFkZXI9XCJGaWx0cm9zIGF2YW7Dp2Fkb3NcIlxyXG4gICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXHJcbiAgICBbY29sbGFwc2VkXT1cInRydWVcIlxyXG4gICAgKGNvbGxhcHNlZENoYW5nZSk9XCJjb2xsYXBzZWQgPSAhY29sbGFwc2VkXCJcclxuICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tYm90dG9tJzogJzJweCcgfVwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlcmljb25zXCI+XHJcbiAgICAgIDxpICpuZ0lmPVwiIWNvbGxhcHNlZFwiIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPlxyXG4gICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgYWJlcnRvIC0tPlxyXG4gICAgICA8aSAqbmdJZj1cImNvbGxhcHNlZFwiIGNsYXNzPVwicGkgcGktbWludXNcIj48L2k+XHJcbiAgICAgIDwhLS0gw41jb25lIHF1YW5kbyBvIHBhaW5lbCBlc3TDoSBmZWNoYWRvIC0tPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L3AtcGFuZWw+XHJcblxyXG4gIDxwLXRhYmxlXHJcbiAgICAqbmdJZj1cImNvbmZpZ1wiXHJcbiAgICAjZHRcclxuICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbVwiXHJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICBbcm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXHJcbiAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcclxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICByb3dHcm91cE1vZGU9XCJyb3dzcGFuXCJcclxuICAgIFtncm91cFJvd3NCeV09XCJjb25maWcuZmllbGRHcm91cFwiXHJcbiAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxyXG4gICAgW3BhZ2VMaW5rc109XCJwYWdlTGlua3NPcHRpb25zXCJcclxuICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxyXG4gICAgcmVzcG9uc2l2ZUxheW91dD1cInN0YWNrXCJcclxuICAgIFtzY3JvbGxhYmxlXT1cImlzVGFibGVTY3JvbGxhYmxlXCJcclxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcudGl0bGVcIiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcuc3VidGl0bGVcIiBjbGFzcz1cInRleHQtc20gbWItNCBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG1kOmNvbC02IGxnOmNvbC00IHt7XHJcbiAgICAgICAgICAgIHRhbWFuaG9UZWxhIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ1xyXG4gICAgICAgICAgfX0gbXQtMSBtYi0yIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKGR0LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgI21lbnVGaWx0cm9EaXZcclxuICAgICAgICAgIGlkID0gXCJtZW51RmlsdHJvRGl2XCJcclxuICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgPiAtLT5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDAgbWVudS1jb2x1bW5zLWZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLWNhcmQ+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtbWVkaXVtIHctMTVyZW1cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBjaGVja01lbnVGaWx0cm8oY29sKSB9fVxyXG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgI2ZpbHRlckNvbHVtbnNcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbC5oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJkaW5hbWljQ29sdW1uU2V0KCRldmVudCwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkaW5hbWljRGlzYWJsZUNvbHVtbihjb2wpXCJcclxuICAgICAgICAgICAgICAgID48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvcC1jYXJkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc0xvdGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnN3B4JyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnYnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnZGlzYWJsZWQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTIyXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiA0cmVtOyBib3JkZXItbGVmdDogc29saWQgNHB4IHRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveFxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdydcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImFsaWduQ29sdW5hc0hlYWRlcihjb2wpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHAtc29ydEljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5zb3J0YWJsZSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEwcHhcIlxyXG4gICAgICAgICAgICA+PC9wLXNvcnRJY29uPlxyXG5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgPmluZm88L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGggKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCI+PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxyXG4gICAgICBsZXQtcm93RGF0YVxyXG4gICAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxyXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXHJcbiAgICAgIGxldC1yb3dzcGFuPVwicm93c3BhblwiXHJcbiAgICA+XHJcbiAgICAgIDx0ciAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCIhcm93Z3JvdXAgJiYgIWNvbC5ncm91cGVkICYmICFjb2wudGVtcGxhdGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCJjb2wudGVtcGxhdGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbCBnYXAtMVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiIGNsYXNzPVwibXItMVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcclxuICAgICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhpYmlyQ2FtcG8oYWN0aW9uLCByb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7IGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIlxyXG4gICAgICAgICAgICAgICAgICBhY3Rpb24udG9vbHRpcFBvc2l0aW9uID8gYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA6ICdib3R0b20nXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMTlcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB7e1xyXG4gICAgICAgICAgICAgICAgICBjYWxsRGlzYWJsZWQoYWN0aW9uLCByb3dEYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ3RleHQtZ3JheS00MDAgY3Vyc29yLWF1dG8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNCdXR0b25EaXNhYmxlKGFjdGlvbiwgcm93RGF0YSwgY29tbWFuZEV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJcclxuICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJtb3JlVmVydEJ0blwiXHJcbiAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+IC0tPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8cC1tZW51XHJcbiAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgPjwvcC1tZW51PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiIGxldC1jb2x1bW5zPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgMlwiXHJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbWVkaXVtIG0tMFwiPk5lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvPC9wPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10YWJsZT5cclxuPC9kaXY+XHJcblxyXG48bGlua1xyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zXCJcclxuLz5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDQ4LDQwMCwwLDBcIlxyXG4vPlxyXG4iXX0=
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { TemplateDirective } from '../directives/template.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../pipes/codigofile.pipe";
|
|
6
|
+
import * as i3 from "../pipes/cpfcnpj.pipe";
|
|
7
|
+
import * as i4 from "../pipes/telefone.pipe";
|
|
8
|
+
import * as i5 from "primeng/api";
|
|
9
|
+
import * as i6 from "primeng/autofocus";
|
|
10
|
+
import * as i7 from "primeng/button";
|
|
11
|
+
import * as i8 from "primeng/card";
|
|
12
|
+
import * as i9 from "primeng/checkbox";
|
|
13
|
+
import * as i10 from "primeng/tooltip";
|
|
14
|
+
import * as i11 from "primeng/inputtext";
|
|
15
|
+
import * as i12 from "primeng/menu";
|
|
16
|
+
import * as i13 from "primeng/panel";
|
|
17
|
+
import * as i14 from "primeng/table";
|
|
18
|
+
import * as i15 from "@angular/forms";
|
|
19
|
+
const imgDefault = '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';
|
|
20
|
+
export class TableComponent {
|
|
21
|
+
set setConfig(value) {
|
|
22
|
+
this.config = {
|
|
23
|
+
enableCation: value.enableCation || true,
|
|
24
|
+
enableSelect: value.enableSelect || false,
|
|
25
|
+
enableFilter: value.enableFilter || true,
|
|
26
|
+
...value,
|
|
27
|
+
};
|
|
28
|
+
if (this.config.enableFilter) {
|
|
29
|
+
this.config.columns.forEach((col) => {
|
|
30
|
+
this.globalFilterFields.push(col.field);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
|
|
35
|
+
this.datePipe = datePipe;
|
|
36
|
+
this.decimalPipe = decimalPipe;
|
|
37
|
+
this.codigoFipePipe = codigoFipePipe;
|
|
38
|
+
this.cpfCnpjPipe = cpfCnpjPipe;
|
|
39
|
+
this.telefonePipe = telefonePipe;
|
|
40
|
+
this.globalFilterFields = [];
|
|
41
|
+
this.selectedSize = '';
|
|
42
|
+
this.menuItems = [];
|
|
43
|
+
this.menuColumns = [];
|
|
44
|
+
this.checked = true;
|
|
45
|
+
this.columns = [];
|
|
46
|
+
this.deletedColuns = [];
|
|
47
|
+
this.menuFiltro = false;
|
|
48
|
+
this.checkboxClicked = false;
|
|
49
|
+
this.showFiltrosAvancados = false;
|
|
50
|
+
this.collapsed = false;
|
|
51
|
+
this.selectedItems = [];
|
|
52
|
+
this.paginator = true;
|
|
53
|
+
this.rows = 5;
|
|
54
|
+
this.pageLinksOptions = 1;
|
|
55
|
+
this.showFirstLastIcon = false;
|
|
56
|
+
this.applyStyle = (rowData, col) => '';
|
|
57
|
+
this.acoesLinhaTabela = true;
|
|
58
|
+
this.filterColumnsBtn = false;
|
|
59
|
+
this.filtrosAvancados = false;
|
|
60
|
+
this.scrollHeight = '';
|
|
61
|
+
this.isTableScrollable = false;
|
|
62
|
+
this.onActiveItem = new EventEmitter();
|
|
63
|
+
this.onActiveItemLote = new EventEmitter();
|
|
64
|
+
this.onPaginate = new EventEmitter();
|
|
65
|
+
this.onSelectionChange = new EventEmitter();
|
|
66
|
+
this.doubleClickEvent = new EventEmitter();
|
|
67
|
+
this.filterField = new EventEmitter();
|
|
68
|
+
this.filtrosAvancadosEmit = new EventEmitter();
|
|
69
|
+
this.isRowSelectable = this.isRowSelectable.bind(this);
|
|
70
|
+
}
|
|
71
|
+
ngOnInit() {
|
|
72
|
+
this.adjustTableSize();
|
|
73
|
+
this.tamanhoTela = window.innerWidth;
|
|
74
|
+
// this.criarMenuColumns();
|
|
75
|
+
this.config.columns.forEach((col) => {
|
|
76
|
+
this.columns.push(col);
|
|
77
|
+
});
|
|
78
|
+
this.checkHideColumns();
|
|
79
|
+
}
|
|
80
|
+
onWindowResize() {
|
|
81
|
+
this.adjustTableSize();
|
|
82
|
+
this.tamanhoTela = window.innerWidth;
|
|
83
|
+
}
|
|
84
|
+
activeItem(rowData) {
|
|
85
|
+
this.onActiveItem.emit(rowData);
|
|
86
|
+
}
|
|
87
|
+
activeItemLote(rowData) {
|
|
88
|
+
this.onActiveItemLote.emit(rowData);
|
|
89
|
+
}
|
|
90
|
+
isBooleanField(rowData, col) {
|
|
91
|
+
return typeof rowData[col.field] == 'boolean';
|
|
92
|
+
}
|
|
93
|
+
isChipField(col) {
|
|
94
|
+
return col.fieldType == 'chip';
|
|
95
|
+
}
|
|
96
|
+
isImageField(col) {
|
|
97
|
+
let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
|
|
98
|
+
return retorno;
|
|
99
|
+
}
|
|
100
|
+
// isVisibleCheckbox(rowData: any): boolean {
|
|
101
|
+
// return this.config.visibleControlCheckboxFunction? this.config.visibleControlCheckboxFunction(rowData): true;
|
|
102
|
+
// }
|
|
103
|
+
isRowSelectable(event) {
|
|
104
|
+
return !this.isDisabledCheckbox(event.data);
|
|
105
|
+
}
|
|
106
|
+
isDisabledCheckbox(rowData) {
|
|
107
|
+
return this.config.disableControlCheckboxFunction
|
|
108
|
+
? this.config.disableControlCheckboxFunction(rowData)
|
|
109
|
+
: false;
|
|
110
|
+
}
|
|
111
|
+
loadImage(rowData, col) {
|
|
112
|
+
/*
|
|
113
|
+
Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
|
|
114
|
+
*/
|
|
115
|
+
let retorno = `data:image/jpg;base64, ${imgDefault}`;
|
|
116
|
+
if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
|
|
117
|
+
if (rowData[col.field].includes('http'))
|
|
118
|
+
retorno = rowData[col.field];
|
|
119
|
+
else
|
|
120
|
+
retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
|
|
121
|
+
}
|
|
122
|
+
return retorno;
|
|
123
|
+
}
|
|
124
|
+
onGlobalFilter(table, event) {
|
|
125
|
+
this.filterField.emit(event.target.value);
|
|
126
|
+
table.filterGlobal(event.target.value, 'contains');
|
|
127
|
+
}
|
|
128
|
+
paginate(event) {
|
|
129
|
+
if (event) {
|
|
130
|
+
let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
|
|
131
|
+
let termoPesquisa = '';
|
|
132
|
+
let ordenacao = '';
|
|
133
|
+
if (event.globalFilter)
|
|
134
|
+
termoPesquisa = event.globalFilter;
|
|
135
|
+
if (event.sortField)
|
|
136
|
+
ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
|
|
137
|
+
const objeto = {
|
|
138
|
+
paginaInicial: paginaInicial,
|
|
139
|
+
tamanhoPagina: event.rows,
|
|
140
|
+
termoPesquisa: termoPesquisa,
|
|
141
|
+
ordenacao: ordenacao,
|
|
142
|
+
};
|
|
143
|
+
this.onPaginate.emit(objeto);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
selectionChange(value = []) {
|
|
147
|
+
this.onSelectionChange.emit(value);
|
|
148
|
+
}
|
|
149
|
+
returnRowClass(rowData, col) {
|
|
150
|
+
let value = rowData[col.field];
|
|
151
|
+
let rowClass;
|
|
152
|
+
this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
|
|
153
|
+
if (col.expiredDate == true) {
|
|
154
|
+
new Date(value) < new Date()
|
|
155
|
+
? (rowClass = rowClass + ' text-red-400 font-semibold')
|
|
156
|
+
: '';
|
|
157
|
+
}
|
|
158
|
+
return rowClass;
|
|
159
|
+
}
|
|
160
|
+
expiredFile(rowData, col) {
|
|
161
|
+
let value = rowData['datavencimento'];
|
|
162
|
+
return new Date(value) < new Date() && col.field == 'area';
|
|
163
|
+
}
|
|
164
|
+
transformValue(rowData, col) {
|
|
165
|
+
let value = rowData[col.field];
|
|
166
|
+
if (value != null) {
|
|
167
|
+
if (!col.pipe) {
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
switch (col.pipe) {
|
|
171
|
+
case 'date':
|
|
172
|
+
return this.datePipe.transform(value, 'dd/MM/yyyy');
|
|
173
|
+
case 'decimal':
|
|
174
|
+
return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
|
|
175
|
+
case 'cpfcnpj':
|
|
176
|
+
return this.cpfCnpjPipe.transform(value);
|
|
177
|
+
case 'telefone':
|
|
178
|
+
return this.telefonePipe.transform(value);
|
|
179
|
+
case 'codigofipe':
|
|
180
|
+
return this.codigoFipePipe.transform(value);
|
|
181
|
+
case 'money':
|
|
182
|
+
return this.formatarValor(value);
|
|
183
|
+
case 'percentage':
|
|
184
|
+
return `${value} %`;
|
|
185
|
+
default:
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
formatarValor(valor) {
|
|
191
|
+
const formatter = new Intl.NumberFormat('pt-BR', {
|
|
192
|
+
style: 'currency',
|
|
193
|
+
currency: 'BRL',
|
|
194
|
+
});
|
|
195
|
+
return formatter.format(valor);
|
|
196
|
+
}
|
|
197
|
+
adjustTableSize() {
|
|
198
|
+
if (this.tableSize < 800) {
|
|
199
|
+
this.selectedSize = 'p-datatable-sm';
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.selectedSize = '';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
doubleClick(e, rowData) {
|
|
206
|
+
let eventDoubleClick = { event: e, rowData: rowData };
|
|
207
|
+
let array = [];
|
|
208
|
+
e.target.classList.forEach((x) => array.push(x));
|
|
209
|
+
// if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
|
|
210
|
+
this.doubleClickEvent.emit(eventDoubleClick);
|
|
211
|
+
}
|
|
212
|
+
centralizarColunas(col) {
|
|
213
|
+
if (col.centralize) {
|
|
214
|
+
return 'text-align: center';
|
|
215
|
+
}
|
|
216
|
+
else
|
|
217
|
+
return '';
|
|
218
|
+
}
|
|
219
|
+
alignColunas(col) {
|
|
220
|
+
if (col.align) {
|
|
221
|
+
return `text-align: ${col.align}`;
|
|
222
|
+
}
|
|
223
|
+
else
|
|
224
|
+
return '';
|
|
225
|
+
}
|
|
226
|
+
alignColunasHeader(col) {
|
|
227
|
+
if (col.align) {
|
|
228
|
+
if (col.align == 'right')
|
|
229
|
+
return 'justify-content: end';
|
|
230
|
+
else
|
|
231
|
+
return '';
|
|
232
|
+
}
|
|
233
|
+
else
|
|
234
|
+
return '';
|
|
235
|
+
}
|
|
236
|
+
retornarCampo(action, rowData, field) {
|
|
237
|
+
const _function = action.dynamicfields
|
|
238
|
+
? action.dynamicfields[field]
|
|
239
|
+
: null;
|
|
240
|
+
const _field = _function
|
|
241
|
+
? _function.apply(action, [rowData])
|
|
242
|
+
: action[field];
|
|
243
|
+
return _field;
|
|
244
|
+
}
|
|
245
|
+
retornarRow(rowData, col, field) {
|
|
246
|
+
const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
|
|
247
|
+
const _field = _rowaction && _rowaction[field]
|
|
248
|
+
? _rowaction[field].constructor === Function
|
|
249
|
+
? _rowaction[field].apply(this, [rowData])
|
|
250
|
+
: _rowaction[field]
|
|
251
|
+
: null;
|
|
252
|
+
return _field;
|
|
253
|
+
}
|
|
254
|
+
exibirCampo(field, rowData) {
|
|
255
|
+
let visible = field.visible ? field.visible(rowData) : true;
|
|
256
|
+
// if (field != undefined && field != null && field != '') {
|
|
257
|
+
// const value = rowData[field];
|
|
258
|
+
// return value;
|
|
259
|
+
// }
|
|
260
|
+
return visible;
|
|
261
|
+
}
|
|
262
|
+
criarMenusModal(data) {
|
|
263
|
+
if (this.config.actions && data) {
|
|
264
|
+
const items = this.config.actions.map((action) => {
|
|
265
|
+
const icon = this.retornarCampo(action, data, 'icon');
|
|
266
|
+
const tooltip = this.retornarCampo(action, data, 'tooltip');
|
|
267
|
+
const tooltipPosition = this.retornarCampo(action, data, 'tooltipPosition');
|
|
268
|
+
const label = this.retornarCampo(action, data, 'label');
|
|
269
|
+
const command = this.retornarCampo(action, data, 'command');
|
|
270
|
+
const visible = action.visible ? action.visible(data) : true;
|
|
271
|
+
const disabled = action.disabled
|
|
272
|
+
? action.disabled(data)
|
|
273
|
+
: false;
|
|
274
|
+
const menuInsert = {
|
|
275
|
+
label,
|
|
276
|
+
icon,
|
|
277
|
+
tooltip,
|
|
278
|
+
tooltipPosition,
|
|
279
|
+
command,
|
|
280
|
+
disabled,
|
|
281
|
+
visible,
|
|
282
|
+
};
|
|
283
|
+
let item = this.menuItems.filter((x) => x.command == menuInsert.command);
|
|
284
|
+
if (item.length == 0)
|
|
285
|
+
this.menuItems.push(menuInsert);
|
|
286
|
+
else {
|
|
287
|
+
if (menuInsert.label != item[0].label) {
|
|
288
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
289
|
+
this.menuItems.splice(index, 1);
|
|
290
|
+
}
|
|
291
|
+
if (menuInsert.visible != item[0].visible) {
|
|
292
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
293
|
+
this.menuItems.splice(index, 1);
|
|
294
|
+
}
|
|
295
|
+
if (menuInsert.disabled != item[0].disabled) {
|
|
296
|
+
let index = this.menuItems.indexOf(item[0]);
|
|
297
|
+
this.menuItems.splice(index, 1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
returnClassChip(rowData, col) {
|
|
304
|
+
return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
|
|
305
|
+
}
|
|
306
|
+
returnClassIcon(rowData, col) {
|
|
307
|
+
return this.retornarRow(rowData, col, 'iconrow');
|
|
308
|
+
}
|
|
309
|
+
returnTooltipIcon(rowData, col) {
|
|
310
|
+
return this.retornarRow(rowData, col, 'tooltipiconrow');
|
|
311
|
+
}
|
|
312
|
+
returnTooltipRow(rowData, col) {
|
|
313
|
+
return this.retornarRow(rowData, col, 'tooltiprow');
|
|
314
|
+
}
|
|
315
|
+
deleteColumn(field) {
|
|
316
|
+
let index;
|
|
317
|
+
let column = this.config.columns.find((x) => x.field == field);
|
|
318
|
+
if (column) {
|
|
319
|
+
index = this.config.columns.indexOf(column);
|
|
320
|
+
this.config.columns.splice(index, 1);
|
|
321
|
+
this.deletedColuns.push(column);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
addColumn(field) {
|
|
325
|
+
let index;
|
|
326
|
+
let column = this.config.columns.find((x) => x.field == field);
|
|
327
|
+
if (!column) {
|
|
328
|
+
let deletedColumn = this.deletedColuns.find((x) => x.field == field);
|
|
329
|
+
if (deletedColumn != undefined) {
|
|
330
|
+
index = this.deletedColuns.indexOf(deletedColumn);
|
|
331
|
+
this.deletedColuns.slice(index, 1);
|
|
332
|
+
this.config.columns.push(deletedColumn);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
dinamicColumnSet(e, col) {
|
|
337
|
+
col.checked = e.checked;
|
|
338
|
+
if (e.checked)
|
|
339
|
+
this.addColumn(col.field);
|
|
340
|
+
else
|
|
341
|
+
this.deleteColumn(col.field);
|
|
342
|
+
if (col.position)
|
|
343
|
+
this.config.columns.sort(this.sortByPosition());
|
|
344
|
+
}
|
|
345
|
+
// abrirMenuFiltro(e: any) {
|
|
346
|
+
// this.menuFiltro = !this.menuFiltro;
|
|
347
|
+
// this.checkboxClicked = false;
|
|
348
|
+
// if (this.tamanhoTela < 700)
|
|
349
|
+
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft - 288) + 'px')
|
|
350
|
+
// else
|
|
351
|
+
// this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft + 40) + 'px')
|
|
352
|
+
// this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px')
|
|
353
|
+
// this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden')
|
|
354
|
+
// }
|
|
355
|
+
// fecharMenuFiltro() {
|
|
356
|
+
// this.menuFiltro = false;
|
|
357
|
+
// this.checkboxClicked = false;
|
|
358
|
+
// this.styleSetter('visibility', 'hidden')
|
|
359
|
+
// }
|
|
360
|
+
// @HostListener('document:keydown.escape', ['$event'])
|
|
361
|
+
// onEscapeKey(event: KeyboardEvent) {
|
|
362
|
+
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
363
|
+
// this.fecharMenuFiltro();
|
|
364
|
+
// }
|
|
365
|
+
// }
|
|
366
|
+
// @HostListener('document:click', ['$event'])
|
|
367
|
+
// onClickEvent(event: any) {
|
|
368
|
+
// if (this.filterColumnsBtn == true && this.menuFiltro == true) {
|
|
369
|
+
// const clickedElement = event.target as HTMLElement;
|
|
370
|
+
// const menuFiltroDiv =
|
|
371
|
+
// this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
|
|
372
|
+
// const botaoFiltro =
|
|
373
|
+
// this.elementRef.nativeElement.querySelector('#botaoFiltro');
|
|
374
|
+
// const isCheckboxClicked =
|
|
375
|
+
// clickedElement.classList.toString().includes('p-checkbox') ||
|
|
376
|
+
// event.target.classList.toString() == '';
|
|
377
|
+
// const isInsideMenu =
|
|
378
|
+
// menuFiltroDiv?.contains(clickedElement) ||
|
|
379
|
+
// botaoFiltro?.contains(clickedElement) ||
|
|
380
|
+
// isCheckboxClicked;
|
|
381
|
+
// if (!isInsideMenu) this.fecharMenuFiltro();
|
|
382
|
+
// }
|
|
383
|
+
// }
|
|
384
|
+
checkMenuFiltro(col) {
|
|
385
|
+
let deletedColumn = this.deletedColuns.find((x) => x.field == col.field);
|
|
386
|
+
if (deletedColumn)
|
|
387
|
+
col.checked = false;
|
|
388
|
+
else
|
|
389
|
+
col.checked = true;
|
|
390
|
+
}
|
|
391
|
+
sortByPosition() {
|
|
392
|
+
return function (elem1, elem2) {
|
|
393
|
+
if (elem1.position < elem2.position) {
|
|
394
|
+
return -1;
|
|
395
|
+
}
|
|
396
|
+
else if (elem1.position > elem2.position) {
|
|
397
|
+
return 1;
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
return 0;
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
callDisabled(action, data) {
|
|
405
|
+
if (action?.disabled) {
|
|
406
|
+
return action.disabled(data);
|
|
407
|
+
}
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
dinamicDisableColumn(col) {
|
|
411
|
+
if (col.fixedColumn)
|
|
412
|
+
return col.fixedColumn;
|
|
413
|
+
else
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
checkHideColumns() {
|
|
417
|
+
let hideColumnsConfig = this.columns.filter((col) => col.hideColumn == true);
|
|
418
|
+
hideColumnsConfig.forEach((col) => this.deleteColumn(col.field));
|
|
419
|
+
}
|
|
420
|
+
getCustomTemplate(templatename) {
|
|
421
|
+
return this._templates[templatename];
|
|
422
|
+
}
|
|
423
|
+
// styleSetter(style: string, data: string) {
|
|
424
|
+
// this.renderer?.setStyle(
|
|
425
|
+
// this.menuFiltroDiv.nativeElement,
|
|
426
|
+
// style,
|
|
427
|
+
// data
|
|
428
|
+
// );
|
|
429
|
+
// }
|
|
430
|
+
filtrosAvancadosEvent(e) {
|
|
431
|
+
this.showFiltrosAvancados = !this.showFiltrosAvancados;
|
|
432
|
+
this.filtrosAvancadosEmit.emit(this.showFiltrosAvancados);
|
|
433
|
+
}
|
|
434
|
+
isButtonDisable(action, rowData, commandEvent) {
|
|
435
|
+
if (this.callDisabled(action, rowData)) {
|
|
436
|
+
return '';
|
|
437
|
+
}
|
|
438
|
+
else
|
|
439
|
+
return this.activeItem(rowData), action?.command(commandEvent);
|
|
440
|
+
}
|
|
441
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i3.CpfCnpjPipe }, { token: i4.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, selector: "kv-table", inputs: { _templates: ["templates", "_templates"], setConfig: ["config", "setConfig"], dataSource: "dataSource", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable" }, outputs: { onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", filtrosAvancadosEmit: "filtrosAvancadosEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }], ngImport: i0, template: "<div>\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-table\n *ngIf=\"config\"\n #dt\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 (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [responsive]=\"true\"\n responsiveLayout=\"stack\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n <!-- <div\n #menuFiltroDiv\n id = \"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200\"\n (click)=\"onClickEvent($event)\"\n > -->\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>\n <div\n class=\"flex flex-column text-medium w-15rem\"\n *ngFor=\"let col of columns\"\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 </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"\n action?.command(commandEvent); activeItemLote(selectedItems)\n \"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\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 >\n <tr (dblclick)=\"doubleClick($event, rowData)\">\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <td\n *ngIf=\"config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\" class=\"mr-1\">\n <!-- <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button> -->\n\n <span\n class=\"material-symbols-outlined {{\n callDisabled(action, rowData)\n ? 'text-gray-400 cursor-auto'\n : 'cursor-pointer'\n }}\"\n style=\"font-size: 20px\"\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n >\n {{ retornarCampo(action, rowData, \"icon\") }}\n </span>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\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: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\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: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { 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", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i11.InputText, selector: "[pInputText]" }, { kind: "component", type: i12.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i13.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i14.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: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i14.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i14.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
443
|
+
}
|
|
444
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
|
|
445
|
+
type: Component,
|
|
446
|
+
args: [{ selector: 'kv-table', template: "<div>\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i *ngIf=\"!collapsed\" class=\"pi pi-filter\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i *ngIf=\"collapsed\" class=\"pi pi-minus\"></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-table\n *ngIf=\"config\"\n #dt\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 (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [responsive]=\"true\"\n responsiveLayout=\"stack\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n <!-- <div\n #menuFiltroDiv\n id = \"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200\"\n (click)=\"onClickEvent($event)\"\n > -->\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>\n <div\n class=\"flex flex-column text-medium w-15rem\"\n *ngFor=\"let col of columns\"\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 </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"\n action?.command(commandEvent); activeItemLote(selectedItems)\n \"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\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 >\n <tr (dblclick)=\"doubleClick($event, rowData)\">\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span\n *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \"\n >\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\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 <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <td\n *ngIf=\"config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\" class=\"mr-1\">\n <!-- <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button> -->\n\n <span\n class=\"material-symbols-outlined {{\n callDisabled(action, rowData)\n ? 'text-gray-400 cursor-auto'\n : 'cursor-pointer'\n }}\"\n style=\"font-size: 20px\"\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n >\n {{ retornarCampo(action, rowData, \"icon\") }}\n </span>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\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: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}\n"] }]
|
|
447
|
+
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i3.CpfCnpjPipe }, { type: i4.TelefonePipe }]; }, propDecorators: { templates: [{
|
|
448
|
+
type: ContentChildren,
|
|
449
|
+
args: [TemplateDirective]
|
|
450
|
+
}], _templates: [{
|
|
451
|
+
type: Input,
|
|
452
|
+
args: ['templates']
|
|
453
|
+
}], table: [{
|
|
454
|
+
type: ViewChild,
|
|
455
|
+
args: ['table', { static: false }]
|
|
456
|
+
}], setConfig: [{
|
|
457
|
+
type: Input,
|
|
458
|
+
args: ['config']
|
|
459
|
+
}], dataSource: [{
|
|
460
|
+
type: Input
|
|
461
|
+
}], selectedItems: [{
|
|
462
|
+
type: Input
|
|
463
|
+
}], totalRecords: [{
|
|
464
|
+
type: Input
|
|
465
|
+
}], paginator: [{
|
|
466
|
+
type: Input
|
|
467
|
+
}], rowsPerPageOptions: [{
|
|
468
|
+
type: Input
|
|
469
|
+
}], rows: [{
|
|
470
|
+
type: Input
|
|
471
|
+
}], pageLinksOptions: [{
|
|
472
|
+
type: Input
|
|
473
|
+
}], showFirstLastIcon: [{
|
|
474
|
+
type: Input
|
|
475
|
+
}], tableSize: [{
|
|
476
|
+
type: Input
|
|
477
|
+
}], applyStyle: [{
|
|
478
|
+
type: Input
|
|
479
|
+
}], acoesLinhaTabela: [{
|
|
480
|
+
type: Input
|
|
481
|
+
}], filterColumnsBtn: [{
|
|
482
|
+
type: Input
|
|
483
|
+
}], filtrosAvancados: [{
|
|
484
|
+
type: Input
|
|
485
|
+
}], scrollHeight: [{
|
|
486
|
+
type: Input
|
|
487
|
+
}], isTableScrollable: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], onActiveItem: [{
|
|
490
|
+
type: Output
|
|
491
|
+
}], onActiveItemLote: [{
|
|
492
|
+
type: Output
|
|
493
|
+
}], onPaginate: [{
|
|
494
|
+
type: Output
|
|
495
|
+
}], onSelectionChange: [{
|
|
496
|
+
type: Output
|
|
497
|
+
}], doubleClickEvent: [{
|
|
498
|
+
type: Output
|
|
499
|
+
}], filterField: [{
|
|
500
|
+
type: Output
|
|
501
|
+
}], filtrosAvancadosEmit: [{
|
|
502
|
+
type: Output
|
|
503
|
+
}], menuFiltroDiv: [{
|
|
504
|
+
type: ViewChild,
|
|
505
|
+
args: ['menuFiltroDiv']
|
|
506
|
+
}], botaoFiltro: [{
|
|
507
|
+
type: ViewChild,
|
|
508
|
+
args: ['botaoFiltro']
|
|
509
|
+
}], onWindowResize: [{
|
|
510
|
+
type: HostListener,
|
|
511
|
+
args: ['window:resize', ['$event']]
|
|
512
|
+
}] } });
|
|
513
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNyRSxNQUFNLFVBQVUsR0FDZCwwcVBBQTBxUCxDQUFDO0FBTzdxUCxNQUFNLE9BQU8sY0FBYztJQWlDekIsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUE2QkQsWUFDbUIsUUFBa0IsRUFDbEIsV0FB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QVM7dUJBQUMsYUFBYTtnQkF1QnhCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVQYWdpbmF0ZSB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnBhZ2luYXRlJztcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29kaWdvRmlwZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jb2RpZ29maWxlLnBpcGUnO1xuaW1wb3J0IHsgQ3BmQ25walBpcGUgfSBmcm9tICcuLi9waXBlcy9jcGZjbnBqLnBpcGUnO1xuaW1wb3J0IHsgVGVsZWZvbmVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvdGVsZWZvbmUucGlwZSc7XG5pbXBvcnQgeyBLdk1lbnVJdGVtIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUva3YtbWVudWl0ZW0nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gJ3ByaW1lbmcvcGFuZWwnO1xuaW1wb3J0IHsgTWVudUl0ZW1Db21tYW5kRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmNvbnN0IGltZ0RlZmF1bHQgPVxuICAnLzlqLzRBQVFTa1pKUmdBQkFRSUFkZ0IyQUFELzRRQmlSWGhwWmdBQVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBTUFBQUlUQUFNQUFBQUJBQUVBQUFBQUFBQUFBQUIyQUFBQUFRQUFBSFlBQUFBQi85c0FRd0FEQWdJQ0FnSURBZ0lDQXdNREF3UUdCQVFFQkFRSUJnWUZCZ2tJQ2dvSkNBa0pDZ3dQREFvTERnc0pDUTBSRFE0UEVCQVJFQW9NRWhNU0VCTVBFQkFRLzlzQVF3RURBd01FQXdRSUJBUUlFQXNKQ3hBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVEvOEFBRVFnQWtBQ1FBd0VSQUFJUkFRTVJBZi9FQUIwQUFRQUJCQU1CQUFBQUFBQUFBQUFBQUFBR0FRSUhDQU1FQ1FYL3hBQkJFQUFDQVFRQUJRSUNDQVFEQkFzQUFBQUJBZ01BQkFVUkJnY1NJVEVUUVFoUkNSUVZHU0pWbGRFeVlZR1JRbEppRmlNM09GTmpjWE4xZHBLVHNiTzAvOFFBR2dFQkFBSURBUUFBQUFBQUFBQUFBQUFBQUFFRkF3UUdBdi9FQURJUkFBSUFCQU1GQ0FFRkFRRUJBQUFBQUFBQkFnTUVFU0V4VVFVU1FaSHdFeFV5WVhHQm9iSFJJak5Dd2VFMDhTUC8yZ0FNQXdFQUFoRURFUUEvQVBLcWdGQUtBVUJkRERMY1NwQkJFOGtzakJFUkZKWm1KMEFBUEpKcVVuRTdJaHRRcTd5SjV3OXlkejJWaStzNWU0WEZSTXUwVjA5U1U3MFJ0QVIwalJQazlRSTBWOTZzNUd5cGt4WG1QZCtYL24zNUZiTzJwS2w0UWZxZnh6SjlqT1UvQm1PNldrc1piNlJKQklyM1VwT3RhMHBWZWxTTzNnZzcyZDdIYXJPWHMybmd6Vi9YcElxNDlwVk1mRzNvdnpka21zTVRpc1gxL1ptTXRMUDFkZGZvUUxIMWEzcmZTQnZXei9ldHVDWEJMdnVKSyttQnB4ekk1bHQ5dDIxeE8zV1E4Q2dPcGY0bkZaVG8rMDhaYVhucGI2UHJFQ3lkTzliMTFBNjNvZjJySEhMZ21lTkorcVBjRXlPWGZjYlY5TUNNNVBsUHdaa2VwbzdHV3hrZVF5TTlyS1J2ZTlxRmJxVUwzOEFEV2hyUTdWcVRObTA4ZVN0NlAvMUc1QnRLb2c0MzlWK0xNZ1BFUEozUFlxTDZ6aUxoY3JHcTdkRVQwNVJyWk9rSlBVTkFlRDFFblFYM3FzbjdLbVMxdlMzdmZELzM3OGkwazdVbFRIdXhyZGZ4ei93Z2MwTTF2TTl2Y1JQRkxFeFIwZFNyS3dPaUNENElQdFZZMDRYWmxrbW9sZFpGdFFTS0FVQW9CUUNnRkFTamcvbDltZUxaUktGZXlzT2tzYnVTSWxXN2thUWR1czdCQjBkRFIyZDZCM2FXaG1WT09VT3Y0MU5Lc3JZYVZZWXhhZFgvQU4rVm16aDdoSEFjTVJCTVRZSWtwWHBlNGY4QUZLL1liMng5ajBnOUkwdS9ZVjBNaW1sVTZ0QXNkZUp6czJwbXovM0lyL1hTeTExWjltczVnS2hUVWtYSzZGQmNhRkNMalFvTGpRb1Rjb1ZOQmNwVUVueHVJZUVjQnhSQ1V5MWdqU2hlbExoUHd5cDJPdE1PNUE2aWVrN1hmdFdDZlN5cWhmcldPdkV6eWFpYklmOEE4NHJlWERwNVh6MFpoUGpIbC9sK0VaZlVJYThzQ29JdTQ0eUZVN0EwNDc5QjJSclowZGpSM3NEbmFxaW1VcnU4VnIrZERvS1N2bDFLdEZhR0srVjg4OHNyNEs3MCtTTDFwbStLQVVBb0JRRTU1ZGN1NWVKcGx5dVdSNDhURzNZYkt0Y3NEM1ZUN0tEMkxmMEhmWld5b2FGMUQzNC9EOTljZXJWdGRYS25YWnkvRjlmN3AxZk9NTU1WdkVsdmJ4SkhGR29SRVJRRlZRTkFBRHdBUGF1aVNVS3Nzam5XM0U3dDRuSUI4NjlIaHNyUWdyVUFVQW9CUUNnRkFVcVFVSW9UYzQ1b1lwNG5nbmlTU09SU2pvNmhsWlNORUVIc1FSN1ZEU2lWbmtlazNDN3A0bURlWW5MdVhoaVZzcmlrZVRGU04zSGN0Yk1UMlZqN3FUNGIraDc2TGM1WFVMcDMya3Z3L1grZWZUNk9ocmxVTHM1bmkrLzkxNnRCNnJTeUZBS0FsSEwvQUlPbDR1eStwQ3EyRm15U1haSk8yVW50R05FSGJhSTM3QUUrZEE3bEZTdXFtV2VTei9IdWFGZlZxbWw3cXZ2Ulh0NWVlVFdGOG5ucGE1c0ZERkZCRWtFRVNSeHhxRVJFVUJWVURRQUE4QUQycnFVa2xaSE10dDRzNVFLazh0bGFnZ1VBb0NmY3B1UlBOTG5ia254L0x2aGE0eUVjREJibTljaUsxdHQvOUpLMmxCMTM2UnRpUEFOWVoxUkxwMWVZelBJcHB0UTdTMGJQNFQ2TGJqdTR0Rms0aDVxWUt3dVNObUt6c1pycEFmbDFzWS8vQUlxdWkydkFuK21GbGxEc2VOcjlVU0lyekIramI1MjhLMmN1UjRTeWVHNHRpaUJZMjlzN1cxMlFQY1J5ZmdQL0FHQ1RaOWdheVN0cXlZM2FLNk1VM1pNNkJYZ2FacXZsc1RsY0Rrcm5EWnZHM1dQdjdPUXhYRnJkUk5GTEU0OHF5TUFWUDhqVmttb2xkWkZaRkM0WGFMTTZsU1FLQVVCYVJVNWtwbkhOREZjUlBiM0VTU1JTS1VkSFVNcktSb2dnK1FhaHBOTk05d3hPRjd5ek5mZVlIQjB2Q09ZSWo2VFlYalBKYUVIdXFnamFIWkoydXdOKzQwZk93T1dyYVYwc3pEd3ZMOGV4MHRCVnFwbDdyOFVLVi9QenlTeHRrc3VSRjYwemZMb1laYmlWSUlJbmtsa1lJaUlwTE14T2dBQjVKTlNrNG5aRU5xRlhlUnNwd25nSXVHZUg3VERvSXpKRW5WTzZBZjd5VnU3SFlBTERmWUVqZlNGSHRYVzAwaFU4cFMxNyt2WHdjaFVUZTJteFRNY1hxL1RWMnl4U3d2ZDV0bjJBSzJEQXk2b0lGQUtBeXA4TlhJekpmRUJ6UXN1QzRKWkxYRndJYjNMM2lBYmd0RUlEZE8rM1d4S292bnUyeUNBYTE2cW9WTkxjZkhnYk5KVE9wbXFEaHhQWW5nemd2aGZsN3cxWThJY0hZYTN4bUp4OFlqZ3Q0VjBCODJZK1dZbnVXT3lTU1NTYTVXWk1pbXhPS04zWjFrdVhES2hVRUNzajdkZUQyS0ExeStNVDRXOE56ejROdXVJK0g4ZEZEeHpocmRwYkM0alVLMS9HZzJiV1EvNHRqZlFUL0MydTRCYmUvUTFqcDQ5Mkx3djQ4elFycU5WTUc5Q3YxTDU4anlWZEhqZG81RktzcElaU05FSDVHdW1PV0tVQW9CUUZwSHZVa28rTnhkdzlEeFJnTHJFeUJSSzY5ZHU3YUhSS1A0VHZSME45am9iNlNSNzFyMVVoVkVweTM3ZXBzVTAzc0pzTXpUNi92MzQyWnJaTkROYnpQYjNFVHhTeE1VZEhVcXlzRG9nZytDRDdWeVRUaGRtZGNtb2xkWkU4NU84UFJaWFB5NWE1Q3RGaWxWMVE2TzVYMkVPaUQyQVZqdllJWUthc3RseVZNbTc3L2o5OWZKV2JVcUhMbHFXdjVjZkpXKy9xNW0rdWpPZExxSGtyVUFVQW9EMGkraTc0VnM3VGxyeGR4cjZTL1c4bG0xeHBjanVJcmVCSkFCOGdXdVcvc1BsVkR0ZU51WkRCb3I5Y2pvTmp3SlM0bzlYOWYrbTYxVkJjQ2dGQUtBOFkvaTI0VnRPRFBpUDQ4d1ZoRXNWdjlwL1hrUlJvSUxtTkxqcEE5Z1BXMEI4cTZ5aWpjeVJERTlQckE1R3VnVXVvamhXdjNpWWpyWk5VVUFvQ2xTQzJvUFJoRG5GdzlGaXMvRmw3Ym9XUEtxenNnN2FsVFFjNkFBMFF5bmV5U3hZbjJybnRxU0ZMbUtZdjVmYS9QM2M2UFpjNXpKVzQ4NGZyaC9aUHVVK00renVETGFSa2xTUytra3VuV1FhMXM5S2xScitFb2lrZWQ3MzRJcXoyYkwzS2RQVzc2OWtWZTBvOStvZmxaZjM5c21RRmI1b011cUR5S0FVQW9EMGIraTY0eHM3bmdQakRnRnBWRjNqOHNtV1ZDZTdSVHdwRVNQbUExdU4vTHJIenFoMnZMYWpoajhySFFiSG1Kd1JRYU81dTdWUVhBb0JRQ2dQRno0cU9NYlBqejRodU91SmNmS3N0ckpsR3RJSkZPMWtqdDBXM1Z3ZmtSRUNQNUd1c281Ymx5SVlYcDk0bkkxc3hUS2lLSmEvV0JpcXRrMVJRQ2dGQVdrVkpLSWR6WXhuMmp3WGN5S2t6eVdVa2QwaXg5L0I2V0xEUjdCSGMrMnRiM29HcS9hVXR6S2QyNFk5Y3l3MmRNVXVvVitPSFh1a1NYRVdIMlZpckxHZXI2djFPM2pnNitucDZ1aFF1OWJPdDY4YnJjbHdkbkFvTkZZMDVrZmFSdVBWMzVuZEhpc2hqWldvSUZBS0FVQmtia0J6b3pmSVhtWmp1UGNSR2JpQ01HMnlWbjFkSXU3TnlQVWozN0hzcktmWmtVblkyRGdxWkNxWmJnWnNVMVJGVFRGR2oySjViY3pPQytiWENscnhsd0xtb2NqanJwUnZwSUVrRW10bUtWUEtPTjkxUDhpTmdnbmxac3FPVEZ1UnJFNnlWT2dudzc4RHVpVTFqTWdvRFZqNDB2aXp3M0tQaGUrNWU4RjVTTzQ0NHkwQmdQb1B2N0poY2FNemtmd3lsVCtCZklKRG5zQUdzcUNpYzZKVEkxK2xmSlcxOWFwRUxnZ2Y2bjhIbGQ1cm96bVJRQ2dGQUtBbzNpcEpSMHN0WURLNHE4eFptOUlYbHZKQjZuVDFkSFdwWGV0amV0K04xam1RZHBBNE5VMXpNa3VQczQxR2xlenVkdXNoNFJjUEZEeXl0UUJRQ2dGQUtBbFBMem1qekI1VVpyL2FEbDV4VmZZUzlJQ3lHQndZNWxCMkZrallGSkYzN01DS3h6Wk1FNWJzeFhNc3FkTWtQZWx1eHNuaFBwTnVlZVB0RnRzdncxd2psWkVHdnJEMnM4TWpINXNFbENmMlVWWHhiSmt0NE5vc0lkcnprc1VtUlRtRDlJRDhSUEhWbkxqYkxNNDdoYTFtQlZ4Zzdab3BtWC92cEdlUlQvTkNwckxMMmJJbHU3Vi9VeFRkcDFFeFdUdDZHdVZ6YzNGNWNTM2QzUEpQUE01a2tsa1lzN3NUc3N4UGNrbjNOYjZWc0VWN2JlTE9PZ0ZBS0FVQW9DaDhWSVJiUTlDZ1JjUEZEeXl0UUJRQ2dGQVNmZy9sZnpINWd5ZW53UHdMbmM0T3JwWjdHd2tsalEvNm5VZEsvMUlySEhPbHl2SEVrWkpjbVpOOEVMWm1EQS9BSjhUK2JSWlp1QnJYRlJ2M0RYK1V0MU92NXFqc3cvcUJXckZ0S25oL2xmMk51SFpsVEYvRzN1U3VINk0vNGhKVURTWmZndUUvNVh5VTVJLzhBVEFSV1B2V1JvK3ZjeXJaTS9WZGV4MWIvQU9qYitJMnpRdGJ0d3JmRUQrRzN5amduL3dCeU5SVXJhc2g2OGlIc21vV25NeDl4UjhHM3hMOEpJODJSNVQ1VzZpUWI2OFk4Vi9zZk1MQXp0L2NWbmdycWVQS0wrdnN3UjBGUkJuRHl4K2pFT1R4ZVR3dDdKanN4anJxeHU0VHFTQzVoYUtSRC9OV0FJclpUVVN1alVjTGhkbWRhcElGQUtBVUJRK0trSXRvZWpxWW0vd0R0VEZXV1Q5TDB2cmx2SFAwZFhWMDlhaHRiME42MzUxV09YSDJrQ2oxU1o3bVFkbkc0TDNzN2NqdWp4V1F4c3JVRUNnTWo4a09RUE1Qbjd4SWNEd1JqbEZ2YmRMWCtTdWRyYTJTSHdYWUE3WTZPa1VGam85dEFrWUtpcGwwME85R2JGUFRUS21MZGc1bm85eWIrQXZranl3Z2d2dUlzV3ZHbWNRQXZkNWFJTmJLMy9WMnV5Z0hqK1ByYjVFZUtvWiswWjA3Q0Y3cTh2eWRCSTJiSms0eExlZm4rRFk2MnRiYXl0NDdTenQ0b0lJbENSeFJJRlJGSGdBRHNCV2cyM2l5d1N0Z2pscUFLQVVBb0NPY2E4dU9BdVkrT09LNDc0UXhXY3R0RUt0N2JMSTBlL2RISTZrUDgxSU5aSmMyT1U3d094am1Tb0pxdEdybWsvUDc2TnUzanRMbmlia0hmVGVyR0drZmg2L202dXNmSzNuYnZ2NUxJVHY4QXpqc0RiMDIxY2QyZnovSlQxT3lWYmVrY3Z3YUZaSEhaREQ1QzV4V1dzcDdPOXM1V2d1TGVlTXBKRklwMHlNcDdnZ2dnZzFkSnFKWFJTTk9GMmVaMTZFQ2dLSHhVa282V1d2eGlzVmVaUXcrcUxPM2tuOVBxNmV2b1V0cmVqcmV2T3F4ekkremdjZWliNUdTWEE1a2FnVHRkMjVrYTVUNU1aSGd1MWpaNW5rc1pKTFYya08vQjZsQ25aL0NFZEFQR3RhOEFWcDdObU9aVHBQaGgxek56YU12czZoMjQ0OWU2Wk1RYXNDdlpkVUVIWnhtT3U4dmtyVEUyRWZxWE43UEhid3B2WFZJN0JWSDl5S2h0UXE3SlNjVHNqMjI1TDhwZUhPU25MdkZjQmNPVzhZV3ppRFhseUYwOTVkRUQxWjNQa2xqNDM0VUtvN0FWeU5ST2lxSmpqaU94cDVFTlBMVUVKT2F3bVlVQW9CUUNnRkFLQVVCb1Y5SmZ5Vnc4V014WFBIQzJrY0YrMTBtSnpQcHJyNndySXhnbWIvVXZRVUo4a01nOExWMXNxb2QzSmZxaWsydlRxeW5MUEpubjVWMlVRb0MwbXBKUkR1YkdUK3p1QzdxTlhtU1M5a2p0VWFNNjFzOVRCanNmaEtJNDk5NzFyUk5WKzBwamwwN3R4dzY1Ry9zNldwbFFyOE1ldmRvZ0hKM2lDTEZaK1hFM0pWWXNxcW9yblExTW15ZzJTT3hETVBCSllxS3JObHoxTG03anlpKytCWjdWa09aTFV5SCtQRHlmdHc1V3Y1R2I2Nkk1NHVxVHlTemxML3hWNE0vOHdZNy9BUFRIV0tkKzFGNk15eVAzWWZWSHViWEhIWmlnRkFLQVVBb0JRQ2dGQWF5L1NKLzhzK1MvOFZzUC9zcXcyWi8wTDBaWGJVLzVuNm84b2E2VTVnb2UxU0Myb1BSaERuRnhERGxjOUZpYmJvYVBGS3lNNDdreXZvdU5na2FIU284QWh1b0gycm50cXoxTW1LWEQvSDdmNCs3blI3TGt1WEtjY1djWDF3L3NnY00wdHZLazhFcnh5eHNIUjBZaGxZSFlJSThFR3F4Tnd1NkxKcFJLenlObE9Fcy9IeE53L1o1ZFRHSkpVNlowVWo4RXE5bUdnU1Y3OXdEMzZTcDk2NjJtbnFvbEtOZS9yMThISVZFdnNaMFVyVDF5elhESDFXRjdyTk0rd0Q3VnNHQm5md2VZdmVIczFqOC9qV1JidkdYVVY1YmwxNmxFa2JoMUpIdU5nZHE4eFFxSk9GOFJERTRXb2x3Tmp2dkZQaVgvQURuQmZwTWY3MW9kMlUrajVsaDNyVWFya1B2RlBpWC9BRG5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4QU9jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVFUDVxZkdCenA1eWNJVGNEOGI1SEZ6WXVlYUs0ZGJmSHBFL1hHZHIrSWQvTlpaTkRKa1JiOEdaaW5WMDZvZzNJOGpDbGJacGxwUHRVa3BIeGVMdUlZdUY4QmRaWnlobFJlaTNSdjhjcDdLTmJHeDduUjMwZzFyMU05VThwekg3ZXZYd2JGUEs3ZWJETDErdjY5OEwyTmJacHBiaVY1NTVYa2xrWXU3dXhMTXhPeVNUNUpOY2syNG5kNW5YSktGV1JiVUVrbzVmOFl5OEk1Y0dUcE5oZU1rZDJDRHRWQk9wQm9FN1haT3ZjRWp6b2pjb3FwMHN6SHd2UDhBUHNhRmZTS3BsN3l2dlEzdDUrV09HTnMrR3RybXdVTTBWeEVseGJ5cEpGSW9kSFJneXNwR3dRUjVCcnFVN3E2T1phYXdaeUExT1o1YUxxZ2dVQW9CUUNnRkFLQVVBb0JRRnBOVGtTa2NjMDBWdkU5eGNTcEhGR3BkM2RncXFvR3lTVDRBcUcwazJ6M0RDNG51ck0xOTVnY1l5OFhaZ21QcEZoWnM4ZG9BTzdLU055SFlCMjNTRHIyR2g1MlR5MWJWT3FtWFdTeS9KMHRCU0ttbDd6OFVTVi9MeXphd3ZtcytSRjYwemZGQUtBbkhMdm1KTHd4S3VLeXJ2SmlwRzdIdXpXekU5MlVlNmsrVi9xTyt3MWxRMXpwMzJjencvWCtlWFRyYTZoVlF0K1g0dnZyaDFiT1VNMFZ4RWs4RXFTUlNLSFIwWUZXVWpZSUk4Z2l1alRUVjB6bkdtblpvNUFmblVubG9yVUVGYUFVQW9CUUNnRkFVM3FwQlFuNVVKU09PYWFLM2llNHVKVWppalV1N3V3Q3FvR3lTVDRBRlEybGl6MGxkMlJnM21KekVsNG1sYkZZcDNqeFViZHozRFhMQTltWWV5ajJYK3A3NkM4NVhWenFIdVFlSDc2Njh1am9hRlU2N1NQeGZYWFhuQjZyU3lGQUtBVUFvQ1U4SDh3ODF3bklzSmQ3N0hoQ2dzNVpTRlR1VzNHZS9RZXBpVG9hT3pzYjBSdVV0Yk1wbmJPSFQ4YUZmVmJPbDFGNG9MUXhOM2J0bmtzY3I0S3lmQ3k0WUdiY0J4WmdPSm9nMkl5TWNzZ1FPOERmaGxqN0tUdFQzSUJZQXNOcnZ3VFhSU2FtVlVLOHQrM0hyNE9mbTA4NlQrNURiRi9mbGZQTlh4dG1rOEQ2OVp6Q1ZER3BJc1Y2aFFXR3g4NkVXR3g4NkN3NmhRbXhRc2FDeFNvSlBrWi9pM2gvaG1NdGw4akhGSVVMcEF2NHBaT3pFYVVkeHNxUUdPbDM1SXJCUHFaVk9yekg3Y2V2Z3pTcWViUDhBMjRiNHBjTU9kc3MzeHRrbThEQ1BHUE1ETDhYUyttUzFuWUJRQmFSeWtxeDJEdHoyNnpzRFd4b2FHaHZaUE8xVmJNcW5aNExUODZuUlV0Qkxwa25GYUtMVzNybG5iQjJldndSZXRNM2hRQ2dGQUtBVUFvQzZHYVczbFNlQ1Y0NVkyRG82TVF5c0RzRUVlQ0RVcHVGM1JEU2lWbmtUemg3bkZuOFZFTGJMUUpsWWxYU003K25LT3dBMjRCNmgyUGtGaVRzbXJLVHRTYkxWbzF2TDU2K2ZNcTUreXBjeDNsdmQxNHJqeStySzFpZjR6bXh3WGtlbFpMNld5a2VUMDFTNmhLNzhhWXN2VXFqdjVMRFdqdlE3MVp5OXBVOHgydmIxNlpXek5uVkV0WHRmMDZUK0NTMkdXeFdWRWh4ZVN0YndSYTlUMEpsazZONzF2cEoxdlIvc2EzSUprRXp3TlAwZHpUamx4eTdLTk5YMU8zV1E4Q2dPcGY1ZkU0cm8rMDhuYVdmcTdLZXZNc2ZWcnpycUkzNUg5Nnh4eklKZmphWHF6SkJMam1lQk4raUkxaythL0JlTjZsUy9sdlpFbE1iSmF4RnZHOXNHYnBSbDdlUXgzc2EyTzlhY3phVlBMZHIzOU9sOEcxTDJkVVRGZTF2WHB0Y2lBY1FjNHMvbFlqYlltQk1WRXk2ZGtmMUpUc0VIVGtBS080OERxQkd3MVZrL2FrMlpoQitsZlBNdEpHeXBjdDcweDcybkJjT2ZIeXh5NGtEbW1tdUpudUxpVjVaWldMdTdzV1ptSjJTU2U1SlB2VmEyNG5kbG1rb1ZaWkZ0UVNLQVVBb0QvOWs9JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbmZpZyE6IFRhYmxlQ29uZmlnO1xuICBwZXNxdWlzYVZhbHVlITogc3RyaW5nO1xuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIGFjdGlvbnNUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcblxuICB0YW1hbmhvVGVsYSE6IG51bWJlcjtcblxuICBtZW51SXRlbXM6IEt2TWVudUl0ZW1bXSA9IFtdO1xuICBtZW51Q29sdW1uczogS3ZNZW51SXRlbVtdID0gW107XG5cbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xuICBkZWxldGVkQ29sdW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XG5cbiAgbWVudUZpbHRybzogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGVja2JveENsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzaG93RmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbW1hbmRFdmVudCE6IE1lbnVJdGVtQ29tbWFuZEV2ZW50O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxhbnk+O1xuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcbiAgZGVsZXRlZENvbHVtbnNJbmRleCE6IGFueVtdO1xuXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGVuYWJsZUNhdGlvbjogdmFsdWUuZW5hYmxlQ2F0aW9uIHx8IHRydWUsXG4gICAgICBlbmFibGVTZWxlY3Q6IHZhbHVlLmVuYWJsZVNlbGVjdCB8fCBmYWxzZSxcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXG4gICAgICAuLi52YWx1ZSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUZpbHRlcikge1xuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2wuZmllbGQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55O1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9ucyE6IG51bWJlcltdO1xuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zOiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSBzaG93Rmlyc3RMYXN0SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XG4gIEBJbnB1dCgpIGFjb2VzTGluaGFUYWJlbGE6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbHRyb3NBdmFuY2Fkb3NFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlXG4gICkge1xuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIC8vIHRoaXMuY3JpYXJNZW51Q29sdW1ucygpO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGVja0hpZGVDb2x1bW5zKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiByb3dEYXRhW2NvbC5maWVsZF0gPT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcbiAgfVxuXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICAvLyBpc1Zpc2libGVDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gICByZXR1cm4gdGhpcy5jb25maWcudmlzaWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uPyB0aGlzLmNvbmZpZy52aXNpYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSk6IHRydWU7XG4gIC8vIH1cblxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAhdGhpcy5pc0Rpc2FibGVkQ2hlY2tib3goZXZlbnQuZGF0YSk7XG4gIH1cbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb25cbiAgICAgID8gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxuICAgICovXG4gICAgbGV0IHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke2ltZ0RlZmF1bHR9YDtcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSkgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICAgIGVsc2UgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmZpbHRlckZpZWxkLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xuICB9XG5cbiAgcHVibGljIHBhZ2luYXRlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cbiAgICAgICAgKGV2ZW50Py5maXJzdCA+IDAgPyBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgOiBldmVudC5maXJzdCkgKyAxO1xuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcbiAgICAgIGxldCBvcmRlbmFjYW8gPSAnJztcblxuICAgICAgaWYgKGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9IGV2ZW50Lmdsb2JhbEZpbHRlcjtcblxuICAgICAgaWYgKGV2ZW50LnNvcnRGaWVsZClcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ZXZlbnQuc29ydEZpZWxkfSAke1xuICAgICAgICAgIGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXG4gICAgICAgIH1gO1xuXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXG4gICAgICAgIHRhbWFuaG9QYWdpbmE6IGV2ZW50LnJvd3MsXG4gICAgICAgIHRlcm1vUGVzcXVpc2E6IHRlcm1vUGVzcXVpc2EsXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWUgPSBbXSkge1xuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XG5cbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XG5cbiAgICBpZiAoY29sLmV4cGlyZWREYXRlID09IHRydWUpIHtcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxuICAgICAgICA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gcm93Q2xhc3M7XG4gIH1cblxuICBleHBpcmVkRmlsZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhWydkYXRhdmVuY2ltZW50byddO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XG4gIH1cblxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCFjb2wucGlwZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xuICAgICAgICBjYXNlICdjcGZjbnBqJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2NvZGlnb2ZpcGUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ21vbmV5JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRhclZhbG9yKHZhbHVlKTtcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xuICB9XG5cbiAgYWRqdXN0VGFibGVTaXplKCkge1xuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAncC1kYXRhdGFibGUtc20nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XG5cbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGEgfTtcblxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcblxuICAgIC8vIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcbiAgfVxuXG4gIGNlbnRyYWxpemFyQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcic7XG4gICAgfSBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5hbGlnbikge1xuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xuICAgIH0gZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBhbGlnbkNvbHVuYXNIZWFkZXIoY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChjb2wuYWxpZ24pIHtcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XG4gICAgICBlbHNlIHJldHVybiAnJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcbiAgICAgID8gKGFjdGlvbi5keW5hbWljZmllbGRzW2ZpZWxkXSBhcyBGdW5jdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxuICAgICAgPyBfZnVuY3Rpb24uYXBwbHkoYWN0aW9uLCBbcm93RGF0YV0pXG4gICAgICA6IGFjdGlvbltmaWVsZF07XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9yb3dhY3Rpb24gPSB0aGlzLmNvbmZpZy5yb3dzID8gdGhpcy5jb25maWcucm93c1tjb2wuZmllbGRdIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xuXG4gICAgLy8gaWYgKGZpZWxkICE9IHVuZGVmaW5lZCAmJiBmaWVsZCAhPSBudWxsICYmIGZpZWxkICE9ICcnKSB7XG4gICAgLy8gICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbZmllbGRdO1xuICAgIC8vICAgcmV0dXJuIHZhbHVlO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdmlzaWJsZTtcbiAgfVxuXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xuICAgICAgICBjb25zdCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLnJldG9ybmFyQ2FtcG8oXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgJ3Rvb2x0aXBQb3NpdGlvbidcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnbGFiZWwnKTtcbiAgICAgICAgY29uc3QgY29tbWFuZDogYW55ID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2NvbW1hbmQnKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZTogYm9vbGVhbiA9IGFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUoZGF0YSkgOiB0cnVlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gYWN0aW9uLmRpc2FibGVkKGRhdGEpXG4gICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZW51SW5zZXJ0OiBLdk1lbnVJdGVtID0ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICB2aXNpYmxlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKFxuICAgICAgICAgICh4KSA9PiB4LmNvbW1hbmQgPT0gbWVudUluc2VydC5jb21tYW5kXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IDApIHRoaXMubWVudUl0ZW1zLnB1c2gobWVudUluc2VydCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LnZpc2libGUgIT0gaXRlbVswXS52aXNpYmxlKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVudUluc2VydC5kaXNhYmxlZCAhPSBpdGVtWzBdLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybkNsYXNzQ2hpcChyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGNoaXAtc3R5bGUgdy1hdXRvIGJvcmRlci1yb3VuZC0yeGwgcC0yIHRleHQtJHt0aGlzLnJldG9ybmFyUm93KFxuICAgICAgcm93RGF0YSxcbiAgICAgIGNvbCxcbiAgICAgICdzdHlsZWNoaXAnXG4gICAgKX0gYm9yZGVyLSR7dGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdzdHlsZWNoaXAnKX1gO1xuICB9XG5cbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcbiAgfVxuXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXBpY29ucm93Jyk7XG4gIH1cblxuICByZXR1cm5Ub29sdGlwUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXByb3cnKTtcbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihmaWVsZDogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4OiBudW1iZXI7XG5cbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZFxuICAgICk7XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmluZGV4T2YoY29sdW1uKTtcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5wdXNoKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcblxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxuICAgICAgKHg6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiB4LmZpZWxkID09IGZpZWxkXG4gICAgKTtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICBsZXQgZGVsZXRlZENvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gZmllbGQpO1xuXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0aGlzLmRlbGV0ZWRDb2x1bnMuaW5kZXhPZihkZWxldGVkQ29sdW1uKTtcbiAgICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnNsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpbmFtaWNDb2x1bW5TZXQoZTogYW55LCBjb2w6IGFueSkge1xuICAgIGNvbC5jaGVja2VkID0gZS5jaGVja2VkO1xuICAgIGlmIChlLmNoZWNrZWQpIHRoaXMuYWRkQ29sdW1uKGNvbC5maWVsZCk7XG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xuXG4gICAgaWYgKGNvbC5wb3NpdGlvbikgdGhpcy5jb25maWcuY29sdW1ucy5zb3J0KHRoaXMuc29ydEJ5UG9zaXRpb24oKSk7XG4gIH1cblxuICAvLyBhYnJpck1lbnVGaWx0cm8oZTogYW55KSB7XG4gIC8vICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcbiAgLy8gICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xuXG4gIC8vICAgaWYgKHRoaXMudGFtYW5ob1RlbGEgPCA3MDApXG4gIC8vICAgICB0aGlzLnN0eWxlU2V0dGVyKCdsZWZ0JywgKHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4KSArICdweCcpXG4gIC8vICAgZWxzZVxuICAvLyAgICAgdGhpcy5zdHlsZVNldHRlcignbGVmdCcsICh0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwKSArICdweCcpXG5cbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd0b3AnLCB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wICsgJ3B4JylcbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgdGhpcy5tZW51RmlsdHJvID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpXG4gIC8vIH1cblxuICAvLyBmZWNoYXJNZW51RmlsdHJvKCkge1xuICAvLyAgIHRoaXMubWVudUZpbHRybyA9IGZhbHNlO1xuICAvLyAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XG5cbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpXG4gIC8vIH1cblxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIC8vIG9uRXNjYXBlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XG4gIC8vICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIC8vIG9uQ2xpY2tFdmVudChldmVudDogYW55KSB7XG4gIC8vICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XG4gIC8vICAgICBjb25zdCBjbGlja2VkRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICAgIGNvbnN0IG1lbnVGaWx0cm9EaXYgPVxuICAvLyAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xuICAvLyAgICAgY29uc3QgYm90YW9GaWx0cm8gPVxuICAvLyAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjYm90YW9GaWx0cm8nKTtcbiAgLy8gICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cbiAgLy8gICAgICAgY2xpY2tlZEVsZW1lbnQuY2xhc3NMaXN0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3AtY2hlY2tib3gnKSB8fFxuICAvLyAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LnRvU3RyaW5nKCkgPT0gJyc7XG4gIC8vICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxuICAvLyAgICAgICBtZW51RmlsdHJvRGl2Py5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcbiAgLy8gICAgICAgYm90YW9GaWx0cm8/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxuICAvLyAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcblxuICAvLyAgICAgaWYgKCFpc0luc2lkZU1lbnUpIHRoaXMuZmVjaGFyTWVudUZpbHRybygpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IGFueSkge1xuICAgIGxldCBkZWxldGVkQ29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxuICAgICAgKHg6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiB4LmZpZWxkID09IGNvbC5maWVsZFxuICAgICk7XG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XG4gICAgZWxzZSBjb2wuY2hlY2tlZCA9IHRydWU7XG4gIH1cblxuICBzb3J0QnlQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0xOiBhbnksIGVsZW0yOiBhbnkpIHtcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbTEucG9zaXRpb24gPiBlbGVtMi5wb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjYWxsRGlzYWJsZWQoYWN0aW9uOiBLdk1lbnVJdGVtLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZChkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGVja0hpZGVDb2x1bW5zKCkge1xuICAgIGxldCBoaWRlQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sKSA9PiBjb2wuaGlkZUNvbHVtbiA9PSB0cnVlXG4gICAgKTtcbiAgICBoaWRlQ29sdW1uc0NvbmZpZy5mb3JFYWNoKChjb2wpID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XG4gIH1cblxuICAvLyBzdHlsZVNldHRlcihzdHlsZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcbiAgLy8gICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgLy8gICAgIHRoaXMubWVudUZpbHRyb0Rpdi5uYXRpdmVFbGVtZW50LFxuICAvLyAgICAgc3R5bGUsXG4gIC8vICAgICBkYXRhXG4gIC8vICAgKTtcbiAgLy8gfVxuXG4gIGZpbHRyb3NBdmFuY2Fkb3NFdmVudChlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dGaWx0cm9zQXZhbmNhZG9zID0gIXRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3M7XG4gICAgdGhpcy5maWx0cm9zQXZhbmNhZG9zRW1pdC5lbWl0KHRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3MpO1xuICB9XG5cbiAgaXNCdXR0b25EaXNhYmxlKGFjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNvbW1hbmRFdmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5jYWxsRGlzYWJsZWQoYWN0aW9uLCByb3dEYXRhKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSByZXR1cm4gdGhpcy5hY3RpdmVJdGVtKHJvd0RhdGEpLCBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPHAtcGFuZWxcbiAgICAqbmdJZj1cImZpbHRyb3NBdmFuY2Fkb3NcIlxuICAgIGhlYWRlcj1cIkZpbHRyb3MgYXZhbsOnYWRvc1wiXG4gICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXG4gICAgW2NvbGxhcHNlZF09XCJ0cnVlXCJcbiAgICAoY29sbGFwc2VkQ2hhbmdlKT1cImNvbGxhcHNlZCA9ICFjb2xsYXBzZWRcIlxuICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tYm90dG9tJzogJzJweCcgfVwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyaWNvbnNcIj5cbiAgICAgIDxpICpuZ0lmPVwiIWNvbGxhcHNlZFwiIGNsYXNzPVwicGkgcGktZmlsdGVyXCI+PC9pPlxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cbiAgICAgIDxpICpuZ0lmPVwiY29sbGFwc2VkXCIgY2xhc3M9XCJwaSBwaS1taW51c1wiPjwvaT5cbiAgICAgIDwhLS0gw41jb25lIHF1YW5kbyBvIHBhaW5lbCBlc3TDoSBmZWNoYWRvIC0tPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3AtcGFuZWw+XG5cbiAgPHAtdGFibGVcbiAgICAqbmdJZj1cImNvbmZpZ1wiXG4gICAgI2R0XG4gICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgIFtyb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXG4gICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcbiAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcbiAgICAob25MYXp5TG9hZCk9XCJwYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICByb3dHcm91cE1vZGU9XCJyb3dzcGFuXCJcbiAgICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXG4gICAgW3BhZ2VMaW5rc109XCJwYWdlTGlua3NPcHRpb25zXCJcbiAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcbiAgICByZXNwb25zaXZlTGF5b3V0PVwic3RhY2tcIlxuICAgIFtzY3JvbGxhYmxlXT1cImlzVGFibGVTY3JvbGxhYmxlXCJcbiAgICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBncmlkIGZvcm1ncmlkIHAtZmx1aWQgY29sLTEyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy50aXRsZVwiIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcbiAgICAgICAgICAgIHRhbWFuaG9UZWxhIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ1xuICAgICAgICAgIH19IG10LTEgbWItMiBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIoZHQsICRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgI21lbnVGaWx0cm9EaXZcbiAgICAgICAgICBpZCA9IFwibWVudUZpbHRyb0RpdlwiXG4gICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KCRldmVudClcIlxuICAgICAgICA+IC0tPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI21lbnVGaWx0cm9EaXZcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotNCBiZy1ncmF5LTIwMCBtZW51LWNvbHVtbnMtZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cC1jYXJkPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtbWVkaXVtIHctMTVyZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjaGVja01lbnVGaWx0cm8oY29sKSB9fVxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJkaW5hbWljQ29sdW1uU2V0KCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9wLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXG4gICAgICAgICAgICBbc3R5bGVdPVwieyAnbWFyZ2luLXJpZ2h0JzogJzdweCcgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImFjdGlvbkxvdGVCdG5zXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmXG4gICAgICAgICAgICAgICAgZXhpYmlyQ2FtcG8oYWN0aW9uLCB0aGlzLmFjdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25Mb3RlQnRucyBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdidG5Db2xvcicpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0yMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aFxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW07IGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94XG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgID48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgJiYgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbCkgPT0gJydcbiAgICAgICAgICAgICAgICA/ICdmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiYWxpZ25Db2x1bmFzSGVhZGVyKGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8cC1zb3J0SWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5zb3J0YWJsZSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiXG4gICAgICAgICAgICA+PC9wLXNvcnRJY29uPlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgPmluZm88L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd0RhdGFcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXG4gICAgICBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIlxuICAgID5cbiAgICAgIDx0ciAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3RcIlxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS08cC10YWJsZUNoZWNrYm94ICpuZ0lmPVwiaXNWaXNpYmxlQ2hlY2tib3gocm93RGF0YSlcIi0tPlxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICA+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgID57eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pY29uRmllbGRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cIiFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbCBnYXAtMVwiXG4gICAgICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiIGNsYXNzPVwibXItMVwiPlxuICAgICAgICAgICAgICA8IS0tIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4aWJpckNhbXBvKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7IGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXG4gICAgICAgICAgICAgICAgICBhY3Rpb24udG9vbHRpcFBvc2l0aW9uID8gYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA6ICdib3R0b20nXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XG4gICAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQge3tcbiAgICAgICAgICAgICAgICAgIGNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXG4gICAgICAgICAgICAgICAgICAgID8gJ3RleHQtZ3JheS00MDAgY3Vyc29yLWF1dG8nXG4gICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzQnV0dG9uRGlzYWJsZShhY3Rpb24sIHJvd0RhdGEsIGNvbW1hbmRFdmVudClcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJcbiAgICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUG9zaXRpb24gPyBhY3Rpb24udG9vbHRpcFBvc2l0aW9uIDogJ2JvdHRvbSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxuICAgICAgICAgICAgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcbiAgICAgICAgICAgID4gLS0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIG1vcmVfaG9yaXpcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gPC9idXR0b24+IC0tPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxwLW1lbnVcbiAgICAgICAgICAgICAgI21lbnVcbiAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgID48L3AtbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIiBsZXQtY29sdW1ucz5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDJcIlxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LW1lZGl1bSBtLTBcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuPC9kaXY+XG5cbjxsaW5rXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9pY29uP2ZhbWlseT1NYXRlcmlhbCtJY29uc1wiXG4vPlxuXG48bGlua1xuICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDQ4LDQwMCwwLDBcIlxuLz5cbiJdfQ==
|