ng-firebase-table-kxp 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/table/table.component.mjs +1571 -0
- package/esm2020/lib/components/table-tabs/table-tabs.component.mjs +129 -0
- package/esm2020/lib/components/table-tooltip/table-tooltip.component.mjs +49 -0
- package/esm2020/lib/ng-firebase-table-kxp.component.mjs +15 -0
- package/esm2020/lib/ng-firebase-table-kxp.module.mjs +103 -0
- package/esm2020/lib/ng-firebase-table-kxp.service.mjs +14 -0
- package/esm2020/lib/services/filter.service.mjs +416 -0
- package/esm2020/lib/services/pagination.service.mjs +115 -0
- package/esm2020/lib/services/table.service.mjs +1140 -0
- package/esm2020/lib/services/tooltip.service.mjs +141 -0
- package/esm2020/lib/types/Table.mjs +9 -0
- package/esm2020/lib/utils/table.utils.mjs +75 -0
- package/esm2020/ng-firebase-table-kxp.mjs +5 -0
- package/esm2020/public-api.mjs +22 -0
- package/fesm2015/ng-firebase-table-kxp.mjs +4043 -0
- package/fesm2015/ng-firebase-table-kxp.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/ng-firebase-table-kxp.mjs +3686 -3660
- package/{fesm2022 → fesm2020}/ng-firebase-table-kxp.mjs.map +1 -1
- package/index.d.ts +5 -665
- package/lib/components/table/table.component.d.ts +135 -0
- package/lib/components/table-tabs/table-tabs.component.d.ts +34 -0
- package/lib/components/table-tooltip/table-tooltip.component.d.ts +18 -0
- package/lib/ng-firebase-table-kxp.component.d.ts +5 -0
- package/lib/ng-firebase-table-kxp.module.d.ts +24 -0
- package/lib/ng-firebase-table-kxp.service.d.ts +6 -0
- package/lib/services/filter.service.d.ts +88 -0
- package/lib/services/pagination.service.d.ts +34 -0
- package/lib/services/table.service.d.ts +80 -0
- package/lib/services/tooltip.service.d.ts +73 -0
- package/lib/types/Table.d.ts +162 -0
- package/lib/utils/table.utils.d.ts +25 -0
- package/package.json +11 -3
- package/public-api.d.ts +12 -0
|
@@ -0,0 +1,1571 @@
|
|
|
1
|
+
import { TABLE_DEFAULTS, } from '../../types/Table';
|
|
2
|
+
import { Component, Input, ViewChild, ChangeDetectionStrategy, } from '@angular/core';
|
|
3
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { MatSort } from '@angular/material/sort';
|
|
5
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
+
import { getDisplayValue, getNestedValue, isString, trackByProperty, getImageKey, } from '../../utils/table.utils';
|
|
7
|
+
import { debounceTime, firstValueFrom, Subject, takeUntil, BehaviorSubject, } from 'rxjs';
|
|
8
|
+
import { FormControl, FormArray } from '@angular/forms';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/router";
|
|
11
|
+
import * as i2 from "../../services/table.service";
|
|
12
|
+
import * as i3 from "../../services/filter.service";
|
|
13
|
+
import * as i4 from "../../services/tooltip.service";
|
|
14
|
+
import * as i5 from "../../services/pagination.service";
|
|
15
|
+
import * as i6 from "@angular/fire/compat/firestore";
|
|
16
|
+
import * as i7 from "@angular/common";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "@angular/material/table";
|
|
19
|
+
import * as i10 from "@angular/material/paginator";
|
|
20
|
+
import * as i11 from "@angular/material/sort";
|
|
21
|
+
import * as i12 from "@angular/material/form-field";
|
|
22
|
+
import * as i13 from "@angular/material/input";
|
|
23
|
+
import * as i14 from "@angular/material/core";
|
|
24
|
+
import * as i15 from "@angular/material/select";
|
|
25
|
+
import * as i16 from "@angular/material/tooltip";
|
|
26
|
+
import * as i17 from "@angular/material/progress-spinner";
|
|
27
|
+
import * as i18 from "@angular/material/icon";
|
|
28
|
+
import * as i19 from "../table-tabs/table-tabs.component";
|
|
29
|
+
import * as i20 from "../table-tooltip/table-tooltip.component";
|
|
30
|
+
function TableComponent_div_0_div_2_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "i");
|
|
32
|
+
} if (rf & 2) {
|
|
33
|
+
const ctx_r17 = i0.ɵɵnextContext(4);
|
|
34
|
+
i0.ɵɵclassMap(ctx_r17.data.actionButton.icon);
|
|
35
|
+
} }
|
|
36
|
+
function TableComponent_div_0_div_2_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 31);
|
|
39
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r18.data.actionButton.method ? ctx_r18.data.actionButton.method($event) : null); });
|
|
40
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_button_7_i_1_Template, 1, 2, "i", 32);
|
|
41
|
+
i0.ɵɵtext(2);
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const ctx_r12 = i0.ɵɵnextContext(3);
|
|
45
|
+
i0.ɵɵproperty("ngClass", ctx_r12.getActionButtonClass())("routerLink", ctx_r12.data.actionButton.routerLink);
|
|
46
|
+
i0.ɵɵadvance(1);
|
|
47
|
+
i0.ɵɵproperty("ngIf", ctx_r12.data.actionButton.icon);
|
|
48
|
+
i0.ɵɵadvance(1);
|
|
49
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r12.data.actionButton.label, " ");
|
|
50
|
+
} }
|
|
51
|
+
function TableComponent_div_0_div_2_div_8_mat_option_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "mat-option", 40)(1, "div", 22);
|
|
53
|
+
i0.ɵɵelement(2, "i", 37);
|
|
54
|
+
i0.ɵɵelementStart(3, "span");
|
|
55
|
+
i0.ɵɵtext(4);
|
|
56
|
+
i0.ɵɵelementEnd()()();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const item_r21 = ctx.$implicit;
|
|
59
|
+
i0.ɵɵproperty("value", item_r21);
|
|
60
|
+
i0.ɵɵadvance(4);
|
|
61
|
+
i0.ɵɵtextInterpolate(item_r21.title);
|
|
62
|
+
} }
|
|
63
|
+
function TableComponent_div_0_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "div", 34)(2, "div", 35)(3, "mat-form-field", 36)(4, "mat-label", 22);
|
|
65
|
+
i0.ɵɵelement(5, "i", 37);
|
|
66
|
+
i0.ɵɵelementStart(6, "span");
|
|
67
|
+
i0.ɵɵtext(7, "Ordenar por");
|
|
68
|
+
i0.ɵɵelementEnd()();
|
|
69
|
+
i0.ɵɵelementStart(8, "mat-select", 38);
|
|
70
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_8_mat_option_9_Template, 5, 2, "mat-option", 39);
|
|
71
|
+
i0.ɵɵelementEnd()()()()();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const ctx_r13 = i0.ɵɵnextContext(3);
|
|
74
|
+
i0.ɵɵadvance(8);
|
|
75
|
+
i0.ɵɵproperty("formControl", ctx_r13.selectSort);
|
|
76
|
+
i0.ɵɵadvance(1);
|
|
77
|
+
i0.ɵɵproperty("ngForOf", ctx_r13.sortableDropdownItems);
|
|
78
|
+
} }
|
|
79
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "mat-option", 40)(1, "div", 22);
|
|
81
|
+
i0.ɵɵelement(2, "i", 48);
|
|
82
|
+
i0.ɵɵelementStart(3, "span");
|
|
83
|
+
i0.ɵɵtext(4);
|
|
84
|
+
i0.ɵɵelementEnd()()();
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
const item_r31 = ctx.$implicit;
|
|
87
|
+
i0.ɵɵproperty("value", item_r31);
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵclassMap(item_r31.icon || "fa fa-filter");
|
|
90
|
+
i0.ɵɵadvance(2);
|
|
91
|
+
i0.ɵɵtextInterpolate(item_r31.title);
|
|
92
|
+
} }
|
|
93
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label");
|
|
96
|
+
i0.ɵɵtext(3, "Tipo de filtro");
|
|
97
|
+
i0.ɵɵelementEnd();
|
|
98
|
+
i0.ɵɵelementStart(4, "mat-select", 47);
|
|
99
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_2_div_9_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r33); const ctx_r32 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r32.onSelectFilterChange()); });
|
|
100
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 39);
|
|
101
|
+
i0.ɵɵelementEnd()()();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const ctx_r25 = i0.ɵɵnextContext(5);
|
|
104
|
+
i0.ɵɵadvance(5);
|
|
105
|
+
i0.ɵɵproperty("ngForOf", ctx_r25.getAvailableFilterOptions());
|
|
106
|
+
} }
|
|
107
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label", 22);
|
|
110
|
+
i0.ɵɵelement(3, "i", 49);
|
|
111
|
+
i0.ɵɵelementStart(4, "span");
|
|
112
|
+
i0.ɵɵtext(5);
|
|
113
|
+
i0.ɵɵelementEnd()();
|
|
114
|
+
i0.ɵɵelementStart(6, "input", 50, 51);
|
|
115
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r35.search($event)); });
|
|
116
|
+
i0.ɵɵelementEnd()()();
|
|
117
|
+
} if (rf & 2) {
|
|
118
|
+
const filterGroup_r23 = i0.ɵɵnextContext().$implicit;
|
|
119
|
+
let tmp_0_0;
|
|
120
|
+
i0.ɵɵadvance(5);
|
|
121
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
122
|
+
} }
|
|
123
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "mat-option", 40);
|
|
125
|
+
i0.ɵɵtext(1);
|
|
126
|
+
i0.ɵɵelementEnd();
|
|
127
|
+
} if (rf & 2) {
|
|
128
|
+
const item_r39 = ctx.$implicit;
|
|
129
|
+
i0.ɵɵproperty("value", item_r39);
|
|
130
|
+
i0.ɵɵadvance(1);
|
|
131
|
+
i0.ɵɵtextInterpolate1(" ", item_r39.label, " ");
|
|
132
|
+
} }
|
|
133
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label");
|
|
135
|
+
i0.ɵɵtext(3);
|
|
136
|
+
i0.ɵɵelementEnd();
|
|
137
|
+
i0.ɵɵelementStart(4, "mat-select", 52);
|
|
138
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 39);
|
|
139
|
+
i0.ɵɵelementEnd()()();
|
|
140
|
+
} if (rf & 2) {
|
|
141
|
+
const filterGroup_r23 = i0.ɵɵnextContext().$implicit;
|
|
142
|
+
let tmp_0_0;
|
|
143
|
+
let tmp_1_0;
|
|
144
|
+
i0.ɵɵadvance(3);
|
|
145
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
146
|
+
i0.ɵɵadvance(2);
|
|
147
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
148
|
+
} }
|
|
149
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
150
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
151
|
+
i0.ɵɵelementStart(0, "div", 53)(1, "div", 54)(2, "mat-form-field", 55)(3, "mat-label", 22);
|
|
152
|
+
i0.ɵɵelement(4, "i", 56);
|
|
153
|
+
i0.ɵɵelementStart(5, "span");
|
|
154
|
+
i0.ɵɵtext(6, "Data Inicial");
|
|
155
|
+
i0.ɵɵelementEnd()();
|
|
156
|
+
i0.ɵɵelementStart(7, "input", 57);
|
|
157
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r41.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r42); const i_r24 = i0.ɵɵnextContext().index; const ctx_r43 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r43.onDateInput($event, "initialDate", i_r24)); });
|
|
158
|
+
i0.ɵɵelementEnd()();
|
|
159
|
+
i0.ɵɵelementStart(8, "mat-form-field", 55)(9, "mat-label", 22);
|
|
160
|
+
i0.ɵɵelement(10, "i", 56);
|
|
161
|
+
i0.ɵɵelementStart(11, "span");
|
|
162
|
+
i0.ɵɵtext(12, "Data Final");
|
|
163
|
+
i0.ɵɵelementEnd()();
|
|
164
|
+
i0.ɵɵelementStart(13, "input", 58);
|
|
165
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r45 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r45.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r42); const i_r24 = i0.ɵɵnextContext().index; const ctx_r46 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r46.onDateInput($event, "finalDate", i_r24)); });
|
|
166
|
+
i0.ɵɵelementEnd()()()();
|
|
167
|
+
} }
|
|
168
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
+
const _r50 = i0.ɵɵgetCurrentView();
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "button", 60);
|
|
171
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r50); const i_r24 = i0.ɵɵnextContext().index; const ctx_r48 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r48.removeFilter(i_r24)); });
|
|
172
|
+
i0.ɵɵelement(2, "i", 61);
|
|
173
|
+
i0.ɵɵelementEnd()();
|
|
174
|
+
} }
|
|
175
|
+
function TableComponent_div_0_div_2_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
176
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
177
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_div_1_Template, 6, 1, "div", 44);
|
|
178
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_div_9_div_1_div_2_Template, 8, 1, "div", 44);
|
|
179
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_2_div_9_div_1_div_3_Template, 6, 2, "div", 44);
|
|
180
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_2_div_9_div_1_div_4_Template, 14, 0, "div", 45);
|
|
181
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_5_Template, 3, 0, "div", 46);
|
|
182
|
+
i0.ɵɵelementEnd();
|
|
183
|
+
} if (rf & 2) {
|
|
184
|
+
const filterGroup_r23 = ctx.$implicit;
|
|
185
|
+
const ctx_r22 = i0.ɵɵnextContext(4);
|
|
186
|
+
let tmp_2_0;
|
|
187
|
+
let tmp_3_0;
|
|
188
|
+
let tmp_4_0;
|
|
189
|
+
i0.ɵɵproperty("formGroup", filterGroup_r23);
|
|
190
|
+
i0.ɵɵadvance(1);
|
|
191
|
+
i0.ɵɵproperty("ngIf", ctx_r22.dropdownItems.length > 0);
|
|
192
|
+
i0.ɵɵadvance(1);
|
|
193
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
194
|
+
i0.ɵɵadvance(1);
|
|
195
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
196
|
+
i0.ɵɵadvance(1);
|
|
197
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r23.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
198
|
+
i0.ɵɵadvance(1);
|
|
199
|
+
i0.ɵɵproperty("ngIf", ctx_r22.filtersForm.length > 1);
|
|
200
|
+
} }
|
|
201
|
+
function TableComponent_div_0_div_2_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
203
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_Template, 6, 6, "div", 42);
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
} if (rf & 2) {
|
|
206
|
+
const ctx_r14 = i0.ɵɵnextContext(3);
|
|
207
|
+
i0.ɵɵadvance(1);
|
|
208
|
+
i0.ɵɵproperty("ngForOf", ctx_r14.filtersForm.controls);
|
|
209
|
+
} }
|
|
210
|
+
function TableComponent_div_0_div_2_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
+
const _r52 = i0.ɵɵgetCurrentView();
|
|
212
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 62);
|
|
213
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r52); const ctx_r51 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r51.addFilter()); });
|
|
214
|
+
i0.ɵɵelement(2, "i", 63);
|
|
215
|
+
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
216
|
+
i0.ɵɵelementEnd()();
|
|
217
|
+
} }
|
|
218
|
+
function TableComponent_div_0_div_2_div_12_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
+
const _r55 = i0.ɵɵgetCurrentView();
|
|
220
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
221
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r55); const ctx_r54 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r54.arrange && ctx_r54.downloadTable !== undefined ? ctx_r54.downloadTable(ctx_r54.arrange, ctx_r54.data.conditions || []) : null); });
|
|
222
|
+
i0.ɵɵelement(1, "i", 71);
|
|
223
|
+
i0.ɵɵtext(2, " Exportar ");
|
|
224
|
+
i0.ɵɵelementEnd();
|
|
225
|
+
} if (rf & 2) {
|
|
226
|
+
const ctx_r53 = i0.ɵɵnextContext(4);
|
|
227
|
+
i0.ɵɵproperty("disabled", ctx_r53.dataSource && ctx_r53.dataSource.filteredData.length <= 0);
|
|
228
|
+
} }
|
|
229
|
+
function TableComponent_div_0_div_2_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
+
const _r57 = i0.ɵɵgetCurrentView();
|
|
231
|
+
i0.ɵɵelementStart(0, "div", 64)(1, "button", 65);
|
|
232
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r57); const ctx_r56 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r56.search()); });
|
|
233
|
+
i0.ɵɵelement(2, "i", 66);
|
|
234
|
+
i0.ɵɵtext(3, " Pesquisar ");
|
|
235
|
+
i0.ɵɵelementEnd();
|
|
236
|
+
i0.ɵɵelementStart(4, "button", 67);
|
|
237
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r57); const ctx_r58 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r58.resetFilter()); });
|
|
238
|
+
i0.ɵɵelement(5, "i", 68);
|
|
239
|
+
i0.ɵɵtext(6, " Resetar ");
|
|
240
|
+
i0.ɵɵelementEnd();
|
|
241
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_div_12_button_7_Template, 3, 1, "button", 69);
|
|
242
|
+
i0.ɵɵelementEnd();
|
|
243
|
+
} if (rf & 2) {
|
|
244
|
+
const ctx_r16 = i0.ɵɵnextContext(3);
|
|
245
|
+
i0.ɵɵadvance(7);
|
|
246
|
+
i0.ɵɵproperty("ngIf", ctx_r16.data.download !== false && ctx_r16.downloadTable);
|
|
247
|
+
} }
|
|
248
|
+
function TableComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "div", 20)(2, "div", 21)(3, "div", 22);
|
|
250
|
+
i0.ɵɵelement(4, "i", 23);
|
|
251
|
+
i0.ɵɵelementStart(5, "span", 24);
|
|
252
|
+
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
253
|
+
i0.ɵɵelementEnd()();
|
|
254
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_button_7_Template, 3, 4, "button", 25);
|
|
255
|
+
i0.ɵɵelementEnd()();
|
|
256
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_2_div_8_Template, 10, 2, "div", 26);
|
|
257
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_9_Template, 2, 1, "div", 27);
|
|
258
|
+
i0.ɵɵelementStart(10, "div", 28);
|
|
259
|
+
i0.ɵɵtemplate(11, TableComponent_div_0_div_2_div_11_Template, 4, 0, "div", 29);
|
|
260
|
+
i0.ɵɵtemplate(12, TableComponent_div_0_div_2_div_12_Template, 8, 1, "div", 30);
|
|
261
|
+
i0.ɵɵelementEnd()();
|
|
262
|
+
} if (rf & 2) {
|
|
263
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
264
|
+
i0.ɵɵadvance(7);
|
|
265
|
+
i0.ɵɵproperty("ngIf", ctx_r1.data.actionButton && ctx_r1.data.actionButton.condition);
|
|
266
|
+
i0.ɵɵadvance(1);
|
|
267
|
+
i0.ɵɵproperty("ngIf", ctx_r1.sortableDropdownItems.length > 0);
|
|
268
|
+
i0.ɵɵadvance(1);
|
|
269
|
+
i0.ɵɵproperty("ngIf", ctx_r1.filtersForm.controls.length > 0);
|
|
270
|
+
i0.ɵɵadvance(2);
|
|
271
|
+
i0.ɵɵproperty("ngIf", ctx_r1.dropdownItems.length > 0);
|
|
272
|
+
i0.ɵɵadvance(1);
|
|
273
|
+
i0.ɵɵproperty("ngIf", ctx_r1.hasFilterableColumn === true || ctx_r1.hasSortableColumn === true);
|
|
274
|
+
} }
|
|
275
|
+
function TableComponent_div_0_div_3_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
i0.ɵɵelement(0, "i");
|
|
277
|
+
} if (rf & 2) {
|
|
278
|
+
const ctx_r62 = i0.ɵɵnextContext(4);
|
|
279
|
+
i0.ɵɵclassMap(ctx_r62.data.actionButton.icon);
|
|
280
|
+
} }
|
|
281
|
+
function TableComponent_div_0_div_3_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
+
const _r64 = i0.ɵɵgetCurrentView();
|
|
283
|
+
i0.ɵɵelementStart(0, "button", 31);
|
|
284
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r64); const ctx_r63 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r63.data.actionButton.method ? ctx_r63.data.actionButton.method($event) : null); });
|
|
285
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_button_7_i_1_Template, 1, 2, "i", 32);
|
|
286
|
+
i0.ɵɵtext(2);
|
|
287
|
+
i0.ɵɵelementEnd();
|
|
288
|
+
} if (rf & 2) {
|
|
289
|
+
const ctx_r59 = i0.ɵɵnextContext(3);
|
|
290
|
+
i0.ɵɵproperty("ngClass", ctx_r59.getActionButtonClass())("routerLink", ctx_r59.data.actionButton.routerLink);
|
|
291
|
+
i0.ɵɵadvance(1);
|
|
292
|
+
i0.ɵɵproperty("ngIf", ctx_r59.data.actionButton.icon);
|
|
293
|
+
i0.ɵɵadvance(1);
|
|
294
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r59.data.actionButton.label, " ");
|
|
295
|
+
} }
|
|
296
|
+
function TableComponent_div_0_div_3_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
const _r67 = i0.ɵɵgetCurrentView();
|
|
298
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "mat-form-field", 36)(2, "mat-label", 22);
|
|
299
|
+
i0.ɵɵelement(3, "i", 72);
|
|
300
|
+
i0.ɵɵtext(4, " Buscar ");
|
|
301
|
+
i0.ɵɵelementEnd();
|
|
302
|
+
i0.ɵɵelementStart(5, "input", 73, 74);
|
|
303
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(_r67); const ctx_r66 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r66.search($event)); })("keyup", function TableComponent_div_0_div_3_div_8_Template_input_keyup_5_listener() { i0.ɵɵrestoreView(_r67); const _r65 = i0.ɵɵreference(6); const ctx_r68 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r68.applyFilter(_r65.value)); });
|
|
304
|
+
i0.ɵɵelementEnd();
|
|
305
|
+
i0.ɵɵelementStart(7, "mat-icon", 75);
|
|
306
|
+
i0.ɵɵtext(8, "search");
|
|
307
|
+
i0.ɵɵelementEnd()()();
|
|
308
|
+
} }
|
|
309
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
+
i0.ɵɵelementStart(0, "mat-option", 40)(1, "div", 22);
|
|
311
|
+
i0.ɵɵelement(2, "i", 48);
|
|
312
|
+
i0.ɵɵelementStart(3, "span");
|
|
313
|
+
i0.ɵɵtext(4);
|
|
314
|
+
i0.ɵɵelementEnd()()();
|
|
315
|
+
} if (rf & 2) {
|
|
316
|
+
const item_r81 = ctx.$implicit;
|
|
317
|
+
i0.ɵɵproperty("value", item_r81);
|
|
318
|
+
i0.ɵɵadvance(2);
|
|
319
|
+
i0.ɵɵclassMap(item_r81.icon || "fa fa-filter");
|
|
320
|
+
i0.ɵɵadvance(2);
|
|
321
|
+
i0.ɵɵtextInterpolate(item_r81.title);
|
|
322
|
+
} }
|
|
323
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
324
|
+
const _r83 = i0.ɵɵgetCurrentView();
|
|
325
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label");
|
|
326
|
+
i0.ɵɵtext(3, "Tipo de filtro");
|
|
327
|
+
i0.ɵɵelementEnd();
|
|
328
|
+
i0.ɵɵelementStart(4, "mat-select", 47);
|
|
329
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r83); const ctx_r82 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r82.onSelectFilterChange()); });
|
|
330
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 39);
|
|
331
|
+
i0.ɵɵelementEnd()()();
|
|
332
|
+
} if (rf & 2) {
|
|
333
|
+
const ctx_r75 = i0.ɵɵnextContext(6);
|
|
334
|
+
i0.ɵɵadvance(5);
|
|
335
|
+
i0.ɵɵproperty("ngForOf", ctx_r75.getAvailableFilterOptions());
|
|
336
|
+
} }
|
|
337
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
+
const _r86 = i0.ɵɵgetCurrentView();
|
|
339
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label", 22);
|
|
340
|
+
i0.ɵɵelement(3, "i", 49);
|
|
341
|
+
i0.ɵɵelementStart(4, "span");
|
|
342
|
+
i0.ɵɵtext(5);
|
|
343
|
+
i0.ɵɵelementEnd()();
|
|
344
|
+
i0.ɵɵelementStart(6, "input", 50, 51);
|
|
345
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r86); const ctx_r85 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r85.search($event)); });
|
|
346
|
+
i0.ɵɵelementEnd()()();
|
|
347
|
+
} if (rf & 2) {
|
|
348
|
+
const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
|
|
349
|
+
let tmp_0_0;
|
|
350
|
+
i0.ɵɵadvance(5);
|
|
351
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
352
|
+
} }
|
|
353
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
354
|
+
i0.ɵɵelementStart(0, "mat-option", 40);
|
|
355
|
+
i0.ɵɵtext(1);
|
|
356
|
+
i0.ɵɵelementEnd();
|
|
357
|
+
} if (rf & 2) {
|
|
358
|
+
const item_r89 = ctx.$implicit;
|
|
359
|
+
i0.ɵɵproperty("value", item_r89);
|
|
360
|
+
i0.ɵɵadvance(1);
|
|
361
|
+
i0.ɵɵtextInterpolate1(" ", item_r89.label, " ");
|
|
362
|
+
} }
|
|
363
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
364
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mat-form-field", 36)(2, "mat-label");
|
|
365
|
+
i0.ɵɵtext(3);
|
|
366
|
+
i0.ɵɵelementEnd();
|
|
367
|
+
i0.ɵɵelementStart(4, "mat-select", 52);
|
|
368
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 39);
|
|
369
|
+
i0.ɵɵelementEnd()()();
|
|
370
|
+
} if (rf & 2) {
|
|
371
|
+
const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
|
|
372
|
+
let tmp_0_0;
|
|
373
|
+
let tmp_1_0;
|
|
374
|
+
i0.ɵɵadvance(3);
|
|
375
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
376
|
+
i0.ɵɵadvance(2);
|
|
377
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
378
|
+
} }
|
|
379
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
380
|
+
const _r92 = i0.ɵɵgetCurrentView();
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 53)(1, "div", 54)(2, "mat-form-field", 55)(3, "mat-label", 22);
|
|
382
|
+
i0.ɵɵelement(4, "i", 56);
|
|
383
|
+
i0.ɵɵelementStart(5, "span");
|
|
384
|
+
i0.ɵɵtext(6, "Data Inicial");
|
|
385
|
+
i0.ɵɵelementEnd()();
|
|
386
|
+
i0.ɵɵelementStart(7, "input", 78);
|
|
387
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r92); const ctx_r91 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r91.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r92); const i_r74 = i0.ɵɵnextContext().index; const ctx_r93 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r93.onDateInput($event, "initialDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_7_listener() { i0.ɵɵrestoreView(_r92); const ctx_r95 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r95.onDateFilterChange()); });
|
|
388
|
+
i0.ɵɵelementEnd()();
|
|
389
|
+
i0.ɵɵelementStart(8, "mat-form-field", 55)(9, "mat-label", 22);
|
|
390
|
+
i0.ɵɵelement(10, "i", 56);
|
|
391
|
+
i0.ɵɵelementStart(11, "span");
|
|
392
|
+
i0.ɵɵtext(12, "Data Final");
|
|
393
|
+
i0.ɵɵelementEnd()();
|
|
394
|
+
i0.ɵɵelementStart(13, "input", 79);
|
|
395
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r92); const ctx_r96 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r96.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r92); const i_r74 = i0.ɵɵnextContext().index; const ctx_r97 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r97.onDateInput($event, "finalDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r92); const ctx_r99 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r99.onDateFilterChange()); });
|
|
396
|
+
i0.ɵɵelementEnd()()()();
|
|
397
|
+
} }
|
|
398
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
+
const _r102 = i0.ɵɵgetCurrentView();
|
|
400
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "button", 60);
|
|
401
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r102); const i_r74 = i0.ɵɵnextContext().index; const ctx_r100 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r100.removeFilter(i_r74)); });
|
|
402
|
+
i0.ɵɵelement(2, "i", 61);
|
|
403
|
+
i0.ɵɵelementEnd()();
|
|
404
|
+
} }
|
|
405
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
406
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
407
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template, 6, 1, "div", 44);
|
|
408
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template, 8, 1, "div", 44);
|
|
409
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template, 6, 2, "div", 44);
|
|
410
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template, 14, 0, "div", 45);
|
|
411
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template, 3, 0, "div", 46);
|
|
412
|
+
i0.ɵɵelementEnd();
|
|
413
|
+
} if (rf & 2) {
|
|
414
|
+
const filterGroup_r73 = ctx.$implicit;
|
|
415
|
+
const ctx_r72 = i0.ɵɵnextContext(5);
|
|
416
|
+
let tmp_2_0;
|
|
417
|
+
let tmp_3_0;
|
|
418
|
+
let tmp_4_0;
|
|
419
|
+
i0.ɵɵproperty("formGroup", filterGroup_r73);
|
|
420
|
+
i0.ɵɵadvance(1);
|
|
421
|
+
i0.ɵɵproperty("ngIf", ctx_r72.dropdownItems.length > 0);
|
|
422
|
+
i0.ɵɵadvance(1);
|
|
423
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
424
|
+
i0.ɵɵadvance(1);
|
|
425
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
426
|
+
i0.ɵɵadvance(1);
|
|
427
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
428
|
+
i0.ɵɵadvance(1);
|
|
429
|
+
i0.ɵɵproperty("ngIf", ctx_r72.filtersForm.length > 1);
|
|
430
|
+
} }
|
|
431
|
+
function TableComponent_div_0_div_3_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
433
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_Template, 6, 6, "div", 76);
|
|
434
|
+
i0.ɵɵelementEnd();
|
|
435
|
+
} if (rf & 2) {
|
|
436
|
+
const ctx_r69 = i0.ɵɵnextContext(4);
|
|
437
|
+
i0.ɵɵadvance(1);
|
|
438
|
+
i0.ɵɵproperty("ngForOf", ctx_r69.filtersForm.controls);
|
|
439
|
+
} }
|
|
440
|
+
function TableComponent_div_0_div_3_div_9_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
441
|
+
const _r104 = i0.ɵɵgetCurrentView();
|
|
442
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 62);
|
|
443
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r104); const ctx_r103 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r103.addFilter()); });
|
|
444
|
+
i0.ɵɵelement(2, "i", 63);
|
|
445
|
+
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
446
|
+
i0.ɵɵelementEnd()();
|
|
447
|
+
} }
|
|
448
|
+
function TableComponent_div_0_div_3_div_9_div_4_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
const _r107 = i0.ɵɵgetCurrentView();
|
|
450
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
451
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r107); const ctx_r106 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r106.handleDownload()); });
|
|
452
|
+
i0.ɵɵelement(1, "i", 71);
|
|
453
|
+
i0.ɵɵtext(2, " Exportar ");
|
|
454
|
+
i0.ɵɵelementEnd();
|
|
455
|
+
} if (rf & 2) {
|
|
456
|
+
const ctx_r105 = i0.ɵɵnextContext(5);
|
|
457
|
+
i0.ɵɵproperty("disabled", ctx_r105.dataSource && ctx_r105.dataSource.filteredData.length <= 0);
|
|
458
|
+
} }
|
|
459
|
+
function TableComponent_div_0_div_3_div_9_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
+
const _r109 = i0.ɵɵgetCurrentView();
|
|
461
|
+
i0.ɵɵelementStart(0, "div", 64)(1, "button", 65);
|
|
462
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r109); const ctx_r108 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r108.search()); });
|
|
463
|
+
i0.ɵɵelement(2, "i", 66);
|
|
464
|
+
i0.ɵɵtext(3, " Pesquisar ");
|
|
465
|
+
i0.ɵɵelementEnd();
|
|
466
|
+
i0.ɵɵelementStart(4, "button", 67);
|
|
467
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r109); const ctx_r110 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r110.resetFilter()); });
|
|
468
|
+
i0.ɵɵelement(5, "i", 68);
|
|
469
|
+
i0.ɵɵtext(6, " Resetar ");
|
|
470
|
+
i0.ɵɵelementEnd();
|
|
471
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_div_9_div_4_button_7_Template, 3, 1, "button", 69);
|
|
472
|
+
i0.ɵɵelementEnd();
|
|
473
|
+
} if (rf & 2) {
|
|
474
|
+
const ctx_r71 = i0.ɵɵnextContext(4);
|
|
475
|
+
i0.ɵɵadvance(7);
|
|
476
|
+
i0.ɵɵproperty("ngIf", ctx_r71.data.download !== false && ctx_r71.downloadTable);
|
|
477
|
+
} }
|
|
478
|
+
function TableComponent_div_0_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
+
i0.ɵɵelementStart(0, "div");
|
|
480
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_Template, 2, 1, "div", 27);
|
|
481
|
+
i0.ɵɵelementStart(2, "div", 28);
|
|
482
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_3_Template, 4, 0, "div", 29);
|
|
483
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_4_Template, 8, 1, "div", 30);
|
|
484
|
+
i0.ɵɵelementEnd()();
|
|
485
|
+
} if (rf & 2) {
|
|
486
|
+
const ctx_r61 = i0.ɵɵnextContext(3);
|
|
487
|
+
i0.ɵɵadvance(1);
|
|
488
|
+
i0.ɵɵproperty("ngIf", ctx_r61.filtersForm.controls.length > 0);
|
|
489
|
+
i0.ɵɵadvance(2);
|
|
490
|
+
i0.ɵɵproperty("ngIf", ctx_r61.dropdownItems.length > 0);
|
|
491
|
+
i0.ɵɵadvance(1);
|
|
492
|
+
i0.ɵɵproperty("ngIf", ctx_r61.hasFilterableColumn === true || ctx_r61.hasSortableColumn === true);
|
|
493
|
+
} }
|
|
494
|
+
function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
495
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "div", 20)(2, "div", 21)(3, "div", 22);
|
|
496
|
+
i0.ɵɵelement(4, "i", 23);
|
|
497
|
+
i0.ɵɵelementStart(5, "span", 24);
|
|
498
|
+
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
499
|
+
i0.ɵɵelementEnd()();
|
|
500
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_button_7_Template, 3, 4, "button", 25);
|
|
501
|
+
i0.ɵɵelementEnd()();
|
|
502
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_3_div_8_Template, 9, 0, "div", 26);
|
|
503
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_3_div_9_Template, 5, 3, "div", 29);
|
|
504
|
+
i0.ɵɵelementEnd();
|
|
505
|
+
} if (rf & 2) {
|
|
506
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
507
|
+
i0.ɵɵadvance(7);
|
|
508
|
+
i0.ɵɵproperty("ngIf", ctx_r2.data.actionButton && ctx_r2.data.actionButton.condition);
|
|
509
|
+
i0.ɵɵadvance(1);
|
|
510
|
+
i0.ɵɵproperty("ngIf", ctx_r2.hasFilterableColumn === true && ctx_r2.data.showSimpleSearch !== false);
|
|
511
|
+
i0.ɵɵadvance(1);
|
|
512
|
+
i0.ɵɵproperty("ngIf", ctx_r2.dropdownItems.length > 0);
|
|
513
|
+
} }
|
|
514
|
+
function TableComponent_div_0_lib_table_tabs_5_Template(rf, ctx) { if (rf & 1) {
|
|
515
|
+
const _r112 = i0.ɵɵgetCurrentView();
|
|
516
|
+
i0.ɵɵelementStart(0, "lib-table-tabs", 80);
|
|
517
|
+
i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(_r112); const ctx_r111 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r111.onTabSelected($event)); });
|
|
518
|
+
i0.ɵɵelementEnd();
|
|
519
|
+
} if (rf & 2) {
|
|
520
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
521
|
+
i0.ɵɵproperty("tabsData", ctx_r3.data.tabs.tabsData)("selectedTab", ctx_r3.selectedTab);
|
|
522
|
+
} }
|
|
523
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
+
i0.ɵɵelementStart(0, "th", 86);
|
|
525
|
+
i0.ɵɵtext(1);
|
|
526
|
+
i0.ɵɵelementEnd();
|
|
527
|
+
} if (rf & 2) {
|
|
528
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
529
|
+
i0.ɵɵadvance(1);
|
|
530
|
+
i0.ɵɵtextInterpolate1(" ", col_r113.title, " ");
|
|
531
|
+
} }
|
|
532
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
|
|
533
|
+
i0.ɵɵelementStart(0, "th", 87);
|
|
534
|
+
i0.ɵɵtext(1);
|
|
535
|
+
i0.ɵɵelementEnd();
|
|
536
|
+
} if (rf & 2) {
|
|
537
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
538
|
+
i0.ɵɵadvance(1);
|
|
539
|
+
i0.ɵɵtextInterpolate1(" ", col_r113.title, " ");
|
|
540
|
+
} }
|
|
541
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
542
|
+
i0.ɵɵelementStart(0, "a", 93);
|
|
543
|
+
i0.ɵɵtext(1);
|
|
544
|
+
i0.ɵɵelementEnd();
|
|
545
|
+
} if (rf & 2) {
|
|
546
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
547
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
548
|
+
const ctx_r128 = i0.ɵɵnextContext(2);
|
|
549
|
+
i0.ɵɵproperty("href", row_r120[col_r113.property], i0.ɵɵsanitizeUrl);
|
|
550
|
+
i0.ɵɵadvance(1);
|
|
551
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r128.getDisplayValue(col_r113, row_r120), " ");
|
|
552
|
+
} }
|
|
553
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template(rf, ctx) { if (rf & 1) {
|
|
554
|
+
i0.ɵɵelementStart(0, "a", 93);
|
|
555
|
+
i0.ɵɵtext(1);
|
|
556
|
+
i0.ɵɵelementEnd();
|
|
557
|
+
} if (rf & 2) {
|
|
558
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
559
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
560
|
+
const ctx_r129 = i0.ɵɵnextContext(2);
|
|
561
|
+
i0.ɵɵproperty("href", col_r113.hasLink, i0.ɵɵsanitizeUrl);
|
|
562
|
+
i0.ɵɵadvance(1);
|
|
563
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r129.getDisplayValue(col_r113, row_r120), " ");
|
|
564
|
+
} }
|
|
565
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template(rf, ctx) { if (rf & 1) {
|
|
566
|
+
i0.ɵɵelementStart(0, "span");
|
|
567
|
+
i0.ɵɵtext(1);
|
|
568
|
+
i0.ɵɵelementEnd();
|
|
569
|
+
} if (rf & 2) {
|
|
570
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
571
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
572
|
+
const ctx_r130 = i0.ɵɵnextContext(2);
|
|
573
|
+
i0.ɵɵadvance(1);
|
|
574
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r130.getDisplayValue(col_r113, row_r120), " ");
|
|
575
|
+
} }
|
|
576
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
577
|
+
i0.ɵɵelementStart(0, "span");
|
|
578
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template, 2, 2, "a", 92);
|
|
579
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template, 2, 2, "a", 92);
|
|
580
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template, 2, 1, "span", 29);
|
|
581
|
+
i0.ɵɵelementEnd();
|
|
582
|
+
} if (rf & 2) {
|
|
583
|
+
const col_r113 = i0.ɵɵnextContext(4).$implicit;
|
|
584
|
+
const ctx_r125 = i0.ɵɵnextContext(2);
|
|
585
|
+
i0.ɵɵadvance(1);
|
|
586
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink === true);
|
|
587
|
+
i0.ɵɵadvance(1);
|
|
588
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink && ctx_r125.isString(col_r113.hasLink));
|
|
589
|
+
i0.ɵɵadvance(1);
|
|
590
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink !== true && !ctx_r125.isString(col_r113.hasLink));
|
|
591
|
+
} }
|
|
592
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
+
i0.ɵɵelementStart(0, "a", 93);
|
|
594
|
+
i0.ɵɵtext(1);
|
|
595
|
+
i0.ɵɵelementEnd();
|
|
596
|
+
} if (rf & 2) {
|
|
597
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
598
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
599
|
+
const ctx_r138 = i0.ɵɵnextContext(2);
|
|
600
|
+
i0.ɵɵproperty("href", row_r120[col_r113.property], i0.ɵɵsanitizeUrl);
|
|
601
|
+
i0.ɵɵadvance(1);
|
|
602
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r138.getDisplayValue(col_r113, row_r120, true), " ");
|
|
603
|
+
} }
|
|
604
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
605
|
+
i0.ɵɵelementStart(0, "a", 93);
|
|
606
|
+
i0.ɵɵtext(1);
|
|
607
|
+
i0.ɵɵelementEnd();
|
|
608
|
+
} if (rf & 2) {
|
|
609
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
610
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
611
|
+
const ctx_r139 = i0.ɵɵnextContext(2);
|
|
612
|
+
i0.ɵɵproperty("href", col_r113.hasLink, i0.ɵɵsanitizeUrl);
|
|
613
|
+
i0.ɵɵadvance(1);
|
|
614
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r139.getDisplayValue(col_r113, row_r120, true), " ");
|
|
615
|
+
} }
|
|
616
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
617
|
+
i0.ɵɵelementStart(0, "span");
|
|
618
|
+
i0.ɵɵtext(1);
|
|
619
|
+
i0.ɵɵelementEnd();
|
|
620
|
+
} if (rf & 2) {
|
|
621
|
+
const row_r120 = i0.ɵɵnextContext(3).$implicit;
|
|
622
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
623
|
+
const ctx_r140 = i0.ɵɵnextContext(2);
|
|
624
|
+
i0.ɵɵadvance(1);
|
|
625
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r140.getDisplayValue(col_r113, row_r120, true), " ");
|
|
626
|
+
} }
|
|
627
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
628
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template, 2, 2, "a", 92);
|
|
629
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template, 2, 2, "a", 92);
|
|
630
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template, 2, 1, "span", 29);
|
|
631
|
+
} if (rf & 2) {
|
|
632
|
+
const col_r113 = i0.ɵɵnextContext(4).$implicit;
|
|
633
|
+
const ctx_r127 = i0.ɵɵnextContext(2);
|
|
634
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink === true);
|
|
635
|
+
i0.ɵɵadvance(1);
|
|
636
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink && ctx_r127.isString(col_r113.hasLink));
|
|
637
|
+
i0.ɵɵadvance(1);
|
|
638
|
+
i0.ɵɵproperty("ngIf", col_r113.hasLink !== true && !ctx_r127.isString(col_r113.hasLink));
|
|
639
|
+
} }
|
|
640
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
641
|
+
i0.ɵɵelementStart(0, "span");
|
|
642
|
+
i0.ɵɵelementContainerStart(1);
|
|
643
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template, 4, 3, "span", 90);
|
|
644
|
+
i0.ɵɵelementContainerEnd();
|
|
645
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template, 3, 3, "ng-template", null, 91, i0.ɵɵtemplateRefExtractor);
|
|
646
|
+
i0.ɵɵelementEnd();
|
|
647
|
+
} if (rf & 2) {
|
|
648
|
+
const _r126 = i0.ɵɵreference(4);
|
|
649
|
+
const row_r120 = i0.ɵɵnextContext().$implicit;
|
|
650
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
651
|
+
i0.ɵɵadvance(2);
|
|
652
|
+
i0.ɵɵproperty("ngIf", col_r113.charLimit && row_r120[col_r113.property] && row_r120[col_r113.property].length > col_r113.charLimit)("ngIfElse", _r126);
|
|
653
|
+
} }
|
|
654
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
+
i0.ɵɵelement(0, "mat-spinner", 97);
|
|
656
|
+
} if (rf & 2) {
|
|
657
|
+
i0.ɵɵproperty("diameter", 32);
|
|
658
|
+
} }
|
|
659
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
660
|
+
const _r153 = i0.ɵɵgetCurrentView();
|
|
661
|
+
i0.ɵɵelementStart(0, "div", 94);
|
|
662
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template, 1, 1, "mat-spinner", 95);
|
|
663
|
+
i0.ɵɵelementStart(2, "img", 96);
|
|
664
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r153); const row_r120 = i0.ɵɵnextContext().$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; const ctx_r151 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r151.onImageLoad(row_r120, col_r113)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r153); const row_r120 = i0.ɵɵnextContext().$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; const ctx_r155 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r155.onImageError($event, row_r120, col_r113, col_r113.image.default)); });
|
|
665
|
+
i0.ɵɵelementEnd()();
|
|
666
|
+
} if (rf & 2) {
|
|
667
|
+
const row_r120 = i0.ɵɵnextContext().$implicit;
|
|
668
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
669
|
+
const ctx_r122 = i0.ɵɵnextContext(2);
|
|
670
|
+
i0.ɵɵadvance(1);
|
|
671
|
+
i0.ɵɵproperty("ngIf", ctx_r122.isImageLoading(row_r120, col_r113));
|
|
672
|
+
i0.ɵɵadvance(1);
|
|
673
|
+
i0.ɵɵclassProp("opacity-0", ctx_r122.isImageLoading(row_r120, col_r113));
|
|
674
|
+
i0.ɵɵproperty("src", col_r113.image.path + "/" + row_r120[col_r113.property], i0.ɵɵsanitizeUrl)("ngClass", col_r113.image.class);
|
|
675
|
+
} }
|
|
676
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
677
|
+
i0.ɵɵelement(0, "mat-spinner", 97);
|
|
678
|
+
} if (rf & 2) {
|
|
679
|
+
i0.ɵɵproperty("diameter", 32);
|
|
680
|
+
} }
|
|
681
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
+
const _r163 = i0.ɵɵgetCurrentView();
|
|
683
|
+
i0.ɵɵelementStart(0, "div", 94);
|
|
684
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template, 1, 1, "mat-spinner", 95);
|
|
685
|
+
i0.ɵɵelementStart(2, "img", 96);
|
|
686
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r163); const row_r120 = i0.ɵɵnextContext().$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; const ctx_r161 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r161.onImageLoad(row_r120, col_r113)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r163); const row_r120 = i0.ɵɵnextContext().$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; const ctx_r165 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r165.onImageError($event, row_r120, col_r113, col_r113.image.default)); });
|
|
687
|
+
i0.ɵɵelementEnd()();
|
|
688
|
+
} if (rf & 2) {
|
|
689
|
+
const row_r120 = i0.ɵɵnextContext().$implicit;
|
|
690
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
691
|
+
const ctx_r123 = i0.ɵɵnextContext(2);
|
|
692
|
+
i0.ɵɵadvance(1);
|
|
693
|
+
i0.ɵɵproperty("ngIf", ctx_r123.isImageLoading(row_r120, col_r113));
|
|
694
|
+
i0.ɵɵadvance(1);
|
|
695
|
+
i0.ɵɵclassProp("opacity-0", ctx_r123.isImageLoading(row_r120, col_r113));
|
|
696
|
+
i0.ɵɵproperty("src", row_r120[col_r113.property], i0.ɵɵsanitizeUrl)("ngClass", col_r113.image.class);
|
|
697
|
+
} }
|
|
698
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
699
|
+
i0.ɵɵelementStart(0, "span", 101);
|
|
700
|
+
i0.ɵɵtext(1);
|
|
701
|
+
i0.ɵɵelementEnd();
|
|
702
|
+
} if (rf & 2) {
|
|
703
|
+
const iconClass_r171 = i0.ɵɵnextContext().$implicit;
|
|
704
|
+
i0.ɵɵproperty("ngClass", iconClass_r171.class);
|
|
705
|
+
i0.ɵɵadvance(1);
|
|
706
|
+
i0.ɵɵtextInterpolate(iconClass_r171.text);
|
|
707
|
+
} }
|
|
708
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
709
|
+
const _r175 = i0.ɵɵgetCurrentView();
|
|
710
|
+
i0.ɵɵelementStart(0, "button", 99);
|
|
711
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r175); const iconClass_r171 = restoredCtx.$implicit; const row_r120 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(iconClass_r171.buttonMethod ? iconClass_r171.buttonMethod(row_r120, $event) : $event.stopPropagation()); });
|
|
712
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template, 2, 2, "span", 100);
|
|
713
|
+
i0.ɵɵelementEnd();
|
|
714
|
+
} if (rf & 2) {
|
|
715
|
+
const iconClass_r171 = ctx.$implicit;
|
|
716
|
+
const row_r120 = i0.ɵɵnextContext(2).$implicit;
|
|
717
|
+
i0.ɵɵadvance(1);
|
|
718
|
+
i0.ɵɵproperty("ngIf", iconClass_r171.condition === undefined || iconClass_r171.condition !== undefined && iconClass_r171.condition(row_r120));
|
|
719
|
+
} }
|
|
720
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
721
|
+
i0.ɵɵelementContainerStart(0);
|
|
722
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template, 2, 1, "button", 98);
|
|
723
|
+
i0.ɵɵelementContainerEnd();
|
|
724
|
+
} if (rf & 2) {
|
|
725
|
+
const col_r113 = i0.ɵɵnextContext(3).$implicit;
|
|
726
|
+
i0.ɵɵadvance(1);
|
|
727
|
+
i0.ɵɵproperty("ngForOf", col_r113.iconClass);
|
|
728
|
+
} }
|
|
729
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template(rf, ctx) { if (rf & 1) {
|
|
730
|
+
const _r181 = i0.ɵɵgetCurrentView();
|
|
731
|
+
i0.ɵɵelementStart(0, "td", 88);
|
|
732
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r181); const row_r120 = restoredCtx.$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(col_r113.method ? col_r113.method(row_r120) : null); })("mouseenter", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseenter_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r181); const row_r120 = restoredCtx.$implicit; const col_r113 = i0.ɵɵnextContext(2).$implicit; const ctx_r182 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r182.onCellMouseEnter($event, row_r120, col_r113)); })("mouseleave", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseleave_0_listener() { i0.ɵɵrestoreView(_r181); const ctx_r184 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r184.onCellMouseLeave()); })("mousemove", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mousemove_0_listener($event) { i0.ɵɵrestoreView(_r181); const ctx_r185 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r185.onCellMouseMove($event)); });
|
|
733
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template, 5, 2, "span", 29);
|
|
734
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template, 3, 5, "div", 89);
|
|
735
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template, 3, 5, "div", 89);
|
|
736
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template, 2, 1, "ng-container", 29);
|
|
737
|
+
i0.ɵɵelementEnd();
|
|
738
|
+
} if (rf & 2) {
|
|
739
|
+
const col_r113 = i0.ɵɵnextContext(2).$implicit;
|
|
740
|
+
i0.ɵɵadvance(1);
|
|
741
|
+
i0.ɵɵproperty("ngIf", !col_r113.image && !col_r113.iconClass && !col_r113.method);
|
|
742
|
+
i0.ɵɵadvance(1);
|
|
743
|
+
i0.ɵɵproperty("ngIf", col_r113.image && col_r113.image.path && !col_r113.iconClass && !col_r113.method);
|
|
744
|
+
i0.ɵɵadvance(1);
|
|
745
|
+
i0.ɵɵproperty("ngIf", col_r113.image && col_r113.image.url && !col_r113.iconClass && !col_r113.method);
|
|
746
|
+
i0.ɵɵadvance(1);
|
|
747
|
+
i0.ɵɵproperty("ngIf", col_r113.iconClass);
|
|
748
|
+
} }
|
|
749
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
750
|
+
i0.ɵɵelementContainerStart(0);
|
|
751
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template, 2, 1, "th", 83);
|
|
752
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template, 2, 1, "th", 84);
|
|
753
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template, 5, 4, "td", 85);
|
|
754
|
+
i0.ɵɵelementContainerEnd();
|
|
755
|
+
} if (rf & 2) {
|
|
756
|
+
const col_r113 = i0.ɵɵnextContext().$implicit;
|
|
757
|
+
const ctx_r114 = i0.ɵɵnextContext(2);
|
|
758
|
+
i0.ɵɵadvance(1);
|
|
759
|
+
i0.ɵɵproperty("ngIf", !col_r113.isSortable || ctx_r114.data.pagination === true);
|
|
760
|
+
i0.ɵɵadvance(1);
|
|
761
|
+
i0.ɵɵproperty("ngIf", col_r113.isSortable && ctx_r114.data.pagination === false);
|
|
762
|
+
} }
|
|
763
|
+
function TableComponent_div_0_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
764
|
+
i0.ɵɵelementContainerStart(0, 81);
|
|
765
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_Template, 4, 2, "ng-container", 82);
|
|
766
|
+
i0.ɵɵelementContainerEnd();
|
|
767
|
+
} if (rf & 2) {
|
|
768
|
+
const col_r113 = ctx.$implicit;
|
|
769
|
+
i0.ɵɵpropertyInterpolate("matColumnDef", col_r113.property);
|
|
770
|
+
} }
|
|
771
|
+
function TableComponent_div_0_tr_10_Template(rf, ctx) { if (rf & 1) {
|
|
772
|
+
i0.ɵɵelement(0, "tr", 102);
|
|
773
|
+
} }
|
|
774
|
+
function TableComponent_div_0_tr_11_Template(rf, ctx) { if (rf & 1) {
|
|
775
|
+
const _r190 = i0.ɵɵgetCurrentView();
|
|
776
|
+
i0.ɵɵelementStart(0, "tr", 103);
|
|
777
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r190); const row_r188 = restoredCtx.$implicit; const ctx_r189 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r189.goToDetails(row_r188)); });
|
|
778
|
+
i0.ɵɵelementEnd();
|
|
779
|
+
} if (rf & 2) {
|
|
780
|
+
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
781
|
+
i0.ɵɵproperty("ngClass", ctx_r7.getTableRowNgClass());
|
|
782
|
+
} }
|
|
783
|
+
function TableComponent_div_0_tr_12_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
784
|
+
i0.ɵɵelementStart(0, "td", 106);
|
|
785
|
+
i0.ɵɵtext(1, " Nenhum resultado encontrado para a busca ");
|
|
786
|
+
i0.ɵɵelementEnd();
|
|
787
|
+
} }
|
|
788
|
+
function TableComponent_div_0_tr_12_Template(rf, ctx) { if (rf & 1) {
|
|
789
|
+
i0.ɵɵelementStart(0, "tr", 104);
|
|
790
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_tr_12_td_1_Template, 2, 0, "td", 105);
|
|
791
|
+
i0.ɵɵpipe(2, "async");
|
|
792
|
+
i0.ɵɵelementEnd();
|
|
793
|
+
} if (rf & 2) {
|
|
794
|
+
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
795
|
+
i0.ɵɵadvance(1);
|
|
796
|
+
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(2, 1, ctx_r8.isLoading$));
|
|
797
|
+
} }
|
|
798
|
+
function TableComponent_div_0_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
799
|
+
i0.ɵɵelementStart(0, "div", 107);
|
|
800
|
+
i0.ɵɵelement(1, "mat-spinner");
|
|
801
|
+
i0.ɵɵelementEnd();
|
|
802
|
+
} }
|
|
803
|
+
function TableComponent_div_0_div_18_Template(rf, ctx) { if (rf & 1) {
|
|
804
|
+
i0.ɵɵelementStart(0, "div", 108);
|
|
805
|
+
i0.ɵɵtext(1);
|
|
806
|
+
i0.ɵɵelementEnd();
|
|
807
|
+
} if (rf & 2) {
|
|
808
|
+
const ctx_r11 = i0.ɵɵnextContext(2);
|
|
809
|
+
i0.ɵɵadvance(1);
|
|
810
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r11.currentPageNumber, " ");
|
|
811
|
+
} }
|
|
812
|
+
const _c0 = function () { return [25, 50, 100]; };
|
|
813
|
+
function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
814
|
+
const _r193 = i0.ɵɵgetCurrentView();
|
|
815
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
|
|
816
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_Template, 13, 5, "div", 3);
|
|
817
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_Template, 10, 3, "div", 3);
|
|
818
|
+
i0.ɵɵelementStart(4, "div", 4);
|
|
819
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_lib_table_tabs_5_Template, 1, 2, "lib-table-tabs", 5);
|
|
820
|
+
i0.ɵɵelementStart(6, "div", 6)(7, "table", 7, 8);
|
|
821
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_ng_container_9_Template, 2, 1, "ng-container", 9);
|
|
822
|
+
i0.ɵɵtemplate(10, TableComponent_div_0_tr_10_Template, 1, 0, "tr", 10);
|
|
823
|
+
i0.ɵɵtemplate(11, TableComponent_div_0_tr_11_Template, 1, 1, "tr", 11);
|
|
824
|
+
i0.ɵɵtemplate(12, TableComponent_div_0_tr_12_Template, 3, 3, "tr", 12);
|
|
825
|
+
i0.ɵɵelementEnd();
|
|
826
|
+
i0.ɵɵtemplate(13, TableComponent_div_0_div_13_Template, 2, 0, "div", 13);
|
|
827
|
+
i0.ɵɵpipe(14, "async");
|
|
828
|
+
i0.ɵɵelementStart(15, "div", 14)(16, "mat-paginator", 15, 16);
|
|
829
|
+
i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(_r193); const ctx_r192 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r192.onPageChange($event)); });
|
|
830
|
+
i0.ɵɵelementEnd();
|
|
831
|
+
i0.ɵɵtemplate(18, TableComponent_div_0_div_18_Template, 2, 1, "div", 17);
|
|
832
|
+
i0.ɵɵpipe(19, "async");
|
|
833
|
+
i0.ɵɵelementEnd()()()();
|
|
834
|
+
i0.ɵɵelement(20, "lib-table-tooltip", 18);
|
|
835
|
+
i0.ɵɵelementEnd();
|
|
836
|
+
} if (rf & 2) {
|
|
837
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
838
|
+
i0.ɵɵadvance(2);
|
|
839
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.pagination === true && (ctx_r0.dropdownItems.length > 0 || ctx_r0.sortableDropdownItems.length > 0 || ctx_r0.data.actionButton));
|
|
840
|
+
i0.ɵɵadvance(1);
|
|
841
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.pagination === false && (ctx_r0.hasFilterableColumn === true || ctx_r0.dropdownItems.length > 0 || ctx_r0.data.actionButton));
|
|
842
|
+
i0.ɵɵadvance(2);
|
|
843
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.tabs && ctx_r0.data.tabs.tabsData && ctx_r0.data.tabs.tabsData.length > 0);
|
|
844
|
+
i0.ɵɵadvance(2);
|
|
845
|
+
i0.ɵɵproperty("dataSource", ctx_r0.dataSource);
|
|
846
|
+
i0.ɵɵadvance(2);
|
|
847
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.data.displayedColumns)("ngForTrackBy", ctx_r0.trackByProperty);
|
|
848
|
+
i0.ɵɵadvance(1);
|
|
849
|
+
i0.ɵɵproperty("matHeaderRowDef", ctx_r0.columnProperties);
|
|
850
|
+
i0.ɵɵadvance(1);
|
|
851
|
+
i0.ɵɵproperty("matRowDefColumns", ctx_r0.columnProperties);
|
|
852
|
+
i0.ɵɵadvance(2);
|
|
853
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(14, 16, ctx_r0.isLoading$));
|
|
854
|
+
i0.ɵɵadvance(3);
|
|
855
|
+
i0.ɵɵproperty("pageSizeOptions", i0.ɵɵpureFunction0(20, _c0))("pageSize", ctx_r0.pageSize)("length", ctx_r0.totalItems)("ngClass", ctx_r0.getPaginatorNgClass());
|
|
856
|
+
i0.ɵɵadvance(2);
|
|
857
|
+
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(19, 18, ctx_r0.isLoading$) && (ctx_r0.dataSource == null ? null : ctx_r0.dataSource.data) && ctx_r0.dataSource.data.length > 0 && (ctx_r0.data == null ? null : ctx_r0.data.filterFn));
|
|
858
|
+
i0.ɵɵadvance(2);
|
|
859
|
+
i0.ɵɵproperty("state", ctx_r0.tooltipState)("styles", ctx_r0.getTooltipStyles());
|
|
860
|
+
} }
|
|
861
|
+
export class TableComponent {
|
|
862
|
+
// CONSTRUCTOR
|
|
863
|
+
constructor(router, tableService, filterService, tooltipService, paginationService, firestore, el, cdr) {
|
|
864
|
+
this.router = router;
|
|
865
|
+
this.tableService = tableService;
|
|
866
|
+
this.filterService = filterService;
|
|
867
|
+
this.tooltipService = tooltipService;
|
|
868
|
+
this.paginationService = paginationService;
|
|
869
|
+
this.firestore = firestore;
|
|
870
|
+
this.el = el;
|
|
871
|
+
this.cdr = cdr;
|
|
872
|
+
this.arrange = null;
|
|
873
|
+
this.currentPageNumber = 1;
|
|
874
|
+
this.currentClientPageIndex = 0;
|
|
875
|
+
this.isLoading$ = new BehaviorSubject(false);
|
|
876
|
+
this.items = [];
|
|
877
|
+
this.filteredItems = [];
|
|
878
|
+
this.lastDoc = null;
|
|
879
|
+
this.firstDoc = null;
|
|
880
|
+
this.sortBy = {
|
|
881
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
882
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
883
|
+
};
|
|
884
|
+
this.columnProperties = [];
|
|
885
|
+
this.selectSort = new FormControl('');
|
|
886
|
+
this.currentArrange = '';
|
|
887
|
+
this.hasNextPage = false;
|
|
888
|
+
this.dropdownItems = [];
|
|
889
|
+
this.sortableDropdownItems = [];
|
|
890
|
+
this.pageSize = TABLE_DEFAULTS.PAGE_SIZE;
|
|
891
|
+
this.totalItems = 0;
|
|
892
|
+
this.filterValue = null;
|
|
893
|
+
this.hasFilterableColumn = false;
|
|
894
|
+
this.hasSortableColumn = false;
|
|
895
|
+
this.filterSubject = new Subject();
|
|
896
|
+
this.debounceTimeMs = TABLE_DEFAULTS.DEBOUNCE_TIME_MS;
|
|
897
|
+
this.selectedTab = 0;
|
|
898
|
+
// Controle de loading de imagens
|
|
899
|
+
this.imageLoadingState = new Map();
|
|
900
|
+
this.destroy$ = new Subject();
|
|
901
|
+
this.filtersForm = new FormArray([this.filterService.createFilterGroup()]);
|
|
902
|
+
this.tooltipState = this.tooltipService.createInitialState();
|
|
903
|
+
}
|
|
904
|
+
getActionButtonClass() {
|
|
905
|
+
return ((this.data?.actionButton?.colorClass || 'bg-blue-500') +
|
|
906
|
+
' flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70');
|
|
907
|
+
}
|
|
908
|
+
getTableRowNgClass() {
|
|
909
|
+
return {
|
|
910
|
+
'example-element-row': this.data?.isNotClickable === true,
|
|
911
|
+
'example-element-row cursor-pointer': !this.data?.isNotClickable,
|
|
912
|
+
};
|
|
913
|
+
}
|
|
914
|
+
getPaginatorNgClass() {
|
|
915
|
+
return {
|
|
916
|
+
'hide-length': ['filter', 'filterByDate', 'equals'].includes(this.currentArrange) ||
|
|
917
|
+
!!this.data?.filterFn,
|
|
918
|
+
'hide-next-button': !this.hasNextPage && this.data?.pagination === true,
|
|
919
|
+
'hide-last-button': (!this.hasNextPage && this.data?.pagination === true) ||
|
|
920
|
+
!!this.data?.filterFn,
|
|
921
|
+
};
|
|
922
|
+
}
|
|
923
|
+
// FILTER METHODS (delegados ao FilterService)
|
|
924
|
+
createFilterGroup() {
|
|
925
|
+
return this.filterService.createFilterGroup();
|
|
926
|
+
}
|
|
927
|
+
addFilter(filterData) {
|
|
928
|
+
this.filterService.addFilter(this.filtersForm, this.data.pagination === true, filterData);
|
|
929
|
+
}
|
|
930
|
+
hasActiveDateFilter() {
|
|
931
|
+
return this.filterService.hasActiveDateFilter(this.filtersForm);
|
|
932
|
+
}
|
|
933
|
+
getAvailableFilterOptions() {
|
|
934
|
+
return this.filterService.getAvailableFilterOptions(this.dropdownItems, this.data.pagination === true, this.filtersForm);
|
|
935
|
+
}
|
|
936
|
+
onSelectFilterChange() {
|
|
937
|
+
const lastIndex = this.filtersForm.length - 1;
|
|
938
|
+
const lastFilter = this.filtersForm.at(lastIndex);
|
|
939
|
+
const selectedFilter = lastFilter.get('selectFilter')?.value;
|
|
940
|
+
if (selectedFilter) {
|
|
941
|
+
if (selectedFilter.arrange === 'filterByDate' &&
|
|
942
|
+
this.data.pagination === true) {
|
|
943
|
+
return;
|
|
944
|
+
}
|
|
945
|
+
this.addFilter();
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
removeFilter(index) {
|
|
949
|
+
this.filterService.removeFilter(this.filtersForm, index);
|
|
950
|
+
}
|
|
951
|
+
removeAllFilters() {
|
|
952
|
+
this.filterService.removeAllFilters(this.filtersForm);
|
|
953
|
+
this.resetFilter();
|
|
954
|
+
}
|
|
955
|
+
onDateInput(event, controlName, filterIndex) {
|
|
956
|
+
const filterGroup = this.filtersForm.at(filterIndex);
|
|
957
|
+
this.filterService.applyDateMask(event, controlName, filterGroup);
|
|
958
|
+
}
|
|
959
|
+
onDateFilterChange() {
|
|
960
|
+
if (this.data.pagination === false) {
|
|
961
|
+
this.arrange = this.filterService.buildArrangeFromFilters(this.filtersForm, this.sortBy);
|
|
962
|
+
this.applyFiltersToDataSource();
|
|
963
|
+
this.cdr.markForCheck();
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
applyFiltersToDataSource() {
|
|
967
|
+
if (!this.dataSource)
|
|
968
|
+
return;
|
|
969
|
+
let filteredItems = this.filterService.applyClientSideFilters([...this.items], this.filtersForm, this.sortBy);
|
|
970
|
+
this.dataSource.data = filteredItems;
|
|
971
|
+
this.filteredItems = filteredItems;
|
|
972
|
+
this.totalItems = filteredItems.length;
|
|
973
|
+
this.cdr.markForCheck();
|
|
974
|
+
}
|
|
975
|
+
applyClientSideFilters(items) {
|
|
976
|
+
return this.filterService.applyClientSideFilters(items, this.filtersForm, this.sortBy);
|
|
977
|
+
}
|
|
978
|
+
buildArrangeFromFilters() {
|
|
979
|
+
return this.filterService.buildArrangeFromFilters(this.filtersForm, this.sortBy);
|
|
980
|
+
}
|
|
981
|
+
// TOOLTIP METHODS (delegados ao TooltipService)
|
|
982
|
+
getTooltipStyles() {
|
|
983
|
+
return this.tooltipService.getTooltipStyles(this.tooltipState);
|
|
984
|
+
}
|
|
985
|
+
onCellMouseEnter(event, row, col) {
|
|
986
|
+
this.tooltipService.handleMouseEnter(event, row, col, (c, r, w) => this.getDisplayValue(c, r, w), (state) => {
|
|
987
|
+
this.tooltipState = { ...this.tooltipState, ...state };
|
|
988
|
+
this.cdr.markForCheck();
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
onCellMouseLeave() {
|
|
992
|
+
this.tooltipService.handleMouseLeave((state) => {
|
|
993
|
+
this.tooltipState = state;
|
|
994
|
+
this.cdr.markForCheck();
|
|
995
|
+
});
|
|
996
|
+
}
|
|
997
|
+
onCellMouseMove(event) {
|
|
998
|
+
this.tooltipService.handleMouseMove(event, this.tooltipState.showTooltip, (position) => {
|
|
999
|
+
this.tooltipState = { ...this.tooltipState, tooltipPosition: position };
|
|
1000
|
+
this.cdr.markForCheck();
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
// TAB METHODS
|
|
1004
|
+
onTabSelected(event) {
|
|
1005
|
+
if (!this.data.tabs?.method)
|
|
1006
|
+
return;
|
|
1007
|
+
this.selectedTab = event.index;
|
|
1008
|
+
this.data.tabs.method(event.tab, event.index);
|
|
1009
|
+
this.cdr.markForCheck();
|
|
1010
|
+
}
|
|
1011
|
+
// UTILITY METHODS (delegados aos utils)
|
|
1012
|
+
getDisplayValue(col, row, withinLimit = false) {
|
|
1013
|
+
return getDisplayValue(col, row, withinLimit);
|
|
1014
|
+
}
|
|
1015
|
+
getNestedValue(obj, path) {
|
|
1016
|
+
return getNestedValue(obj, path);
|
|
1017
|
+
}
|
|
1018
|
+
isString(value) {
|
|
1019
|
+
return isString(value);
|
|
1020
|
+
}
|
|
1021
|
+
trackByProperty(_index, col) {
|
|
1022
|
+
return trackByProperty(_index, col);
|
|
1023
|
+
}
|
|
1024
|
+
// IMAGE LOADING METHODS
|
|
1025
|
+
getImageKey(row, col) {
|
|
1026
|
+
return getImageKey(row, col);
|
|
1027
|
+
}
|
|
1028
|
+
isImageLoading(row, col) {
|
|
1029
|
+
const key = this.getImageKey(row, col);
|
|
1030
|
+
return !this.imageLoadingState.has(key);
|
|
1031
|
+
}
|
|
1032
|
+
onImageLoad(row, col) {
|
|
1033
|
+
const key = this.getImageKey(row, col);
|
|
1034
|
+
this.imageLoadingState.set(key, true);
|
|
1035
|
+
this.cdr.markForCheck();
|
|
1036
|
+
}
|
|
1037
|
+
onImageError(event, row, col, defaultImage) {
|
|
1038
|
+
const key = this.getImageKey(row, col);
|
|
1039
|
+
this.imageLoadingState.set(key, true);
|
|
1040
|
+
const target = event.target;
|
|
1041
|
+
if (target) {
|
|
1042
|
+
if (defaultImage) {
|
|
1043
|
+
target.src = defaultImage;
|
|
1044
|
+
target.onerror = null;
|
|
1045
|
+
}
|
|
1046
|
+
else {
|
|
1047
|
+
target.style.display = 'none';
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
this.cdr.markForCheck();
|
|
1051
|
+
}
|
|
1052
|
+
// LIFECYCLE METHODS
|
|
1053
|
+
ngOnChanges(changes) {
|
|
1054
|
+
if (changes['data']) {
|
|
1055
|
+
setTimeout(() => this.applyCustomColors(), 0);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
ngAfterViewInit() {
|
|
1059
|
+
this.applyCustomColors();
|
|
1060
|
+
}
|
|
1061
|
+
ngOnDestroy() {
|
|
1062
|
+
this.tooltipService.destroy();
|
|
1063
|
+
this.destroy$.next();
|
|
1064
|
+
this.destroy$.complete();
|
|
1065
|
+
}
|
|
1066
|
+
applyCustomColors() {
|
|
1067
|
+
const hostElement = this.el?.nativeElement;
|
|
1068
|
+
if (!hostElement || !this.data)
|
|
1069
|
+
return;
|
|
1070
|
+
if (this.data.color?.bg) {
|
|
1071
|
+
hostElement.style.setProperty('--table-color', this.data.color.bg);
|
|
1072
|
+
hostElement.style.setProperty('--table-header-bg', this.data.color.bg);
|
|
1073
|
+
}
|
|
1074
|
+
if (this.data.color?.text) {
|
|
1075
|
+
hostElement.style.setProperty('--table-text-color', this.data.color.text);
|
|
1076
|
+
hostElement.style.setProperty('--table-header-text', this.data.color.text);
|
|
1077
|
+
}
|
|
1078
|
+
setTimeout(() => {
|
|
1079
|
+
const headerCells = hostElement.querySelectorAll('.mat-header-cell, .mat-mdc-header-cell, th.mat-header-cell, th.mat-mdc-header-cell');
|
|
1080
|
+
headerCells.forEach((cell) => {
|
|
1081
|
+
if (this.data.color?.bg) {
|
|
1082
|
+
cell.style.backgroundColor = this.data.color.bg;
|
|
1083
|
+
}
|
|
1084
|
+
if (this.data.color?.text) {
|
|
1085
|
+
cell.style.color = this.data.color.text;
|
|
1086
|
+
}
|
|
1087
|
+
});
|
|
1088
|
+
}, 100);
|
|
1089
|
+
}
|
|
1090
|
+
async ngOnInit() {
|
|
1091
|
+
if (!this.data.color) {
|
|
1092
|
+
this.data.color = {
|
|
1093
|
+
bg: TABLE_DEFAULTS.DEFAULT_BG_COLOR,
|
|
1094
|
+
text: TABLE_DEFAULTS.DEFAULT_TEXT_COLOR,
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1097
|
+
if (this.data.showSimpleSearch === undefined) {
|
|
1098
|
+
this.data.showSimpleSearch = true;
|
|
1099
|
+
}
|
|
1100
|
+
this.columnProperties = this.data.displayedColumns.map((column) => column.property);
|
|
1101
|
+
this.cdr.markForCheck();
|
|
1102
|
+
if (this.data.actionButton && !this.data.actionButton.condition) {
|
|
1103
|
+
this.data.actionButton.condition = (_row) => true;
|
|
1104
|
+
}
|
|
1105
|
+
// Inicializar dropdownItems usando FilterService
|
|
1106
|
+
const filterConfig = this.filterService.initializeDropdownItems(this.data.displayedColumns);
|
|
1107
|
+
this.dropdownItems = filterConfig.dropdownItems;
|
|
1108
|
+
this.sortableDropdownItems = filterConfig.sortableDropdownItems;
|
|
1109
|
+
this.hasFilterableColumn = filterConfig.hasFilterableColumn;
|
|
1110
|
+
this.hasSortableColumn = filterConfig.hasSortableColumn;
|
|
1111
|
+
if (this.data.filterableOptions) {
|
|
1112
|
+
this.dropdownItems = this.filterService.addFilterableOptions(this.dropdownItems, this.data.filterableOptions);
|
|
1113
|
+
}
|
|
1114
|
+
// Sem paginação
|
|
1115
|
+
if (this.data.pagination === false) {
|
|
1116
|
+
await this.loadItems();
|
|
1117
|
+
this.cdr.markForCheck();
|
|
1118
|
+
}
|
|
1119
|
+
// Com paginação
|
|
1120
|
+
if (this.data.pagination === true) {
|
|
1121
|
+
if (this.data.sortBy) {
|
|
1122
|
+
this.sortBy = {
|
|
1123
|
+
field: this.data.sortBy.field,
|
|
1124
|
+
order: this.data.sortBy.order,
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
this.filterSubject
|
|
1128
|
+
.pipe(debounceTime(this.debounceTimeMs), takeUntil(this.destroy$))
|
|
1129
|
+
.subscribe(() => {
|
|
1130
|
+
this.loadItemsPaginated('reload', true);
|
|
1131
|
+
});
|
|
1132
|
+
this.isLoading$.next(true);
|
|
1133
|
+
this.cdr.markForCheck();
|
|
1134
|
+
await this.loadItemsPaginated('reload', true);
|
|
1135
|
+
this.sort.active = 'createdAt';
|
|
1136
|
+
this.sort.direction = 'desc';
|
|
1137
|
+
this.dataSource.paginator = this.paginator;
|
|
1138
|
+
this.dataSource.sort = this.sort;
|
|
1139
|
+
this.totalItems = 0;
|
|
1140
|
+
if (this.data.totalRef) {
|
|
1141
|
+
for (const totalRef of this.data.totalRef) {
|
|
1142
|
+
const totalRefDoc = await totalRef.ref.get();
|
|
1143
|
+
const docData = totalRefDoc.data();
|
|
1144
|
+
if (docData && docData[totalRef.field]) {
|
|
1145
|
+
const fieldValue = docData[totalRef.field];
|
|
1146
|
+
this.totalItems = (this.totalItems +
|
|
1147
|
+
(typeof fieldValue === 'number' ? fieldValue : 0));
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
this.isLoading$.next(false);
|
|
1152
|
+
this.cdr.markForCheck();
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
// DATA LOADING METHODS
|
|
1156
|
+
async loadItems() {
|
|
1157
|
+
this.imageLoadingState.clear();
|
|
1158
|
+
this.items = (await this.tableService.getItems(this.data.collectionRef));
|
|
1159
|
+
if (this.data.conditions) {
|
|
1160
|
+
this.filterItems();
|
|
1161
|
+
}
|
|
1162
|
+
await this.loadRelations();
|
|
1163
|
+
await this.loadQueryLengths();
|
|
1164
|
+
this.totalItems = this.items.length;
|
|
1165
|
+
this.arrange = {
|
|
1166
|
+
filters: [],
|
|
1167
|
+
sortBy: this.data.sortBy || {
|
|
1168
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
1169
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
1170
|
+
},
|
|
1171
|
+
};
|
|
1172
|
+
this.sortBy = this.data.sortBy || {
|
|
1173
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
1174
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
1175
|
+
};
|
|
1176
|
+
let itemsToDisplay = [...this.items];
|
|
1177
|
+
itemsToDisplay = this.applyClientSideFilters(itemsToDisplay);
|
|
1178
|
+
this.filteredItems = itemsToDisplay;
|
|
1179
|
+
this.dataSource = new MatTableDataSource(itemsToDisplay);
|
|
1180
|
+
this.dataSource.paginator = this.paginator;
|
|
1181
|
+
this.dataSource.sort = this.sort;
|
|
1182
|
+
if (this.data.sortBy) {
|
|
1183
|
+
this.dataSource.sort.active = this.data.sortBy.field;
|
|
1184
|
+
this.dataSource.sort.direction = this.data.sortBy.order;
|
|
1185
|
+
this.dataSource.sort.sortChange.emit();
|
|
1186
|
+
}
|
|
1187
|
+
this.dataSource.filterPredicate = (data, filter) => {
|
|
1188
|
+
const item = data;
|
|
1189
|
+
return this.data.displayedColumns.some((col) => {
|
|
1190
|
+
if (col.filterPredicates) {
|
|
1191
|
+
return col.filterPredicates.some((predicate) => {
|
|
1192
|
+
const propertyValue = item[col.property];
|
|
1193
|
+
if (!propertyValue || typeof propertyValue !== 'object') {
|
|
1194
|
+
return false;
|
|
1195
|
+
}
|
|
1196
|
+
const propertyRecord = propertyValue;
|
|
1197
|
+
const predicateValue = propertyRecord[predicate];
|
|
1198
|
+
if (predicateValue === null || predicateValue === undefined) {
|
|
1199
|
+
return false;
|
|
1200
|
+
}
|
|
1201
|
+
return String(predicateValue)
|
|
1202
|
+
.trim()
|
|
1203
|
+
.toLocaleLowerCase()
|
|
1204
|
+
.includes(filter);
|
|
1205
|
+
});
|
|
1206
|
+
}
|
|
1207
|
+
if (col.property && col.isFilterable) {
|
|
1208
|
+
const propertyValue = item[col.property];
|
|
1209
|
+
if (propertyValue === null || propertyValue === undefined) {
|
|
1210
|
+
return false;
|
|
1211
|
+
}
|
|
1212
|
+
return String(propertyValue)
|
|
1213
|
+
.trim()
|
|
1214
|
+
.toLocaleLowerCase()
|
|
1215
|
+
.includes(filter);
|
|
1216
|
+
}
|
|
1217
|
+
return false;
|
|
1218
|
+
});
|
|
1219
|
+
};
|
|
1220
|
+
this.filterPredicate = this.dataSource.filterPredicate;
|
|
1221
|
+
this.cdr.markForCheck();
|
|
1222
|
+
}
|
|
1223
|
+
async loadItemsPaginated(navigation = 'reload', reset = false) {
|
|
1224
|
+
this.imageLoadingState.clear();
|
|
1225
|
+
if (reset && ['forward', 'reload'].includes(navigation)) {
|
|
1226
|
+
this.lastDoc = null;
|
|
1227
|
+
this.currentClientPageIndex = 0;
|
|
1228
|
+
}
|
|
1229
|
+
if (reset && ['backward', 'reload'].includes(navigation)) {
|
|
1230
|
+
this.firstDoc = null;
|
|
1231
|
+
this.currentClientPageIndex = 0;
|
|
1232
|
+
}
|
|
1233
|
+
const activeFilters = this.filterService.extractActiveFilters(this.filtersForm);
|
|
1234
|
+
this.arrange = {
|
|
1235
|
+
filters: activeFilters,
|
|
1236
|
+
sortBy: this.sortBy,
|
|
1237
|
+
};
|
|
1238
|
+
const paginated = {
|
|
1239
|
+
batchSize: this.pageSize,
|
|
1240
|
+
collection: this.data.collection,
|
|
1241
|
+
doc: { lastDoc: this.lastDoc, firstDoc: this.firstDoc },
|
|
1242
|
+
navigation,
|
|
1243
|
+
arrange: this.arrange,
|
|
1244
|
+
conditions: this.data.conditions,
|
|
1245
|
+
size: this.totalItems,
|
|
1246
|
+
filterFn: this.data.filterFn,
|
|
1247
|
+
clientPageIndex: this.currentClientPageIndex,
|
|
1248
|
+
};
|
|
1249
|
+
const result = await this.tableService.getPaginated(paginated);
|
|
1250
|
+
this.items = result.items;
|
|
1251
|
+
await this.loadRelations();
|
|
1252
|
+
await this.loadQueryLengths();
|
|
1253
|
+
this.lastDoc = result.lastDoc;
|
|
1254
|
+
this.firstDoc = result.firstDoc;
|
|
1255
|
+
if (result.currentClientPageIndex !== undefined) {
|
|
1256
|
+
this.currentClientPageIndex = result.currentClientPageIndex;
|
|
1257
|
+
}
|
|
1258
|
+
let sum = 0;
|
|
1259
|
+
if (this.data.totalRef) {
|
|
1260
|
+
for (const totalRef of this.data.totalRef) {
|
|
1261
|
+
const totalRefDoc = await totalRef.ref.get();
|
|
1262
|
+
const docData = totalRefDoc.data();
|
|
1263
|
+
if (docData || result.filterLength) {
|
|
1264
|
+
const fieldValue = docData ? docData[totalRef.field] : undefined;
|
|
1265
|
+
const numericValue = typeof fieldValue === 'number' ? fieldValue : 0;
|
|
1266
|
+
sum = result.filterLength ?? (sum + numericValue);
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
this.totalItems = sum;
|
|
1270
|
+
}
|
|
1271
|
+
this.hasNextPage = result.hasNextPage;
|
|
1272
|
+
this.dataSource = new MatTableDataSource(this.items);
|
|
1273
|
+
this.filterPredicate = this.dataSource.filterPredicate;
|
|
1274
|
+
this.cdr.markForCheck();
|
|
1275
|
+
}
|
|
1276
|
+
// PAGINATION METHODS
|
|
1277
|
+
async onPageChange(event) {
|
|
1278
|
+
if (this.data.pagination !== true || !event)
|
|
1279
|
+
return;
|
|
1280
|
+
this.isLoading$.next(true);
|
|
1281
|
+
const currentState = {
|
|
1282
|
+
currentPageNumber: this.currentPageNumber,
|
|
1283
|
+
currentClientPageIndex: this.currentClientPageIndex,
|
|
1284
|
+
pageSize: this.pageSize,
|
|
1285
|
+
totalItems: this.totalItems,
|
|
1286
|
+
hasNextPage: this.hasNextPage,
|
|
1287
|
+
};
|
|
1288
|
+
const navigation = this.paginationService.calculateNavigation(event, currentState);
|
|
1289
|
+
if (!navigation.shouldNavigate) {
|
|
1290
|
+
this.isLoading$.next(false);
|
|
1291
|
+
this.pageEvent = event;
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1294
|
+
// Atualizar estado local
|
|
1295
|
+
this.currentClientPageIndex = navigation.newClientPageIndex;
|
|
1296
|
+
this.currentPageNumber = navigation.newPageNumber;
|
|
1297
|
+
// Atualizar pageSize se mudou
|
|
1298
|
+
if (event.pageSize !== this.pageSize) {
|
|
1299
|
+
this.pageSize = event.pageSize;
|
|
1300
|
+
}
|
|
1301
|
+
// Ajustar pageSize temporariamente para última página se necessário
|
|
1302
|
+
const lastPageIndex = this.paginationService.calculateLastPageIndex(this.totalItems, event.pageSize);
|
|
1303
|
+
let originalPageSize = null;
|
|
1304
|
+
if (event.pageIndex === lastPageIndex &&
|
|
1305
|
+
navigation.direction === 'backward' &&
|
|
1306
|
+
navigation.resetDocs) {
|
|
1307
|
+
const itemsExpectedInLastPage = this.paginationService.calculateLastPageItemCount(this.totalItems, event.pageSize);
|
|
1308
|
+
if (itemsExpectedInLastPage > 0 &&
|
|
1309
|
+
itemsExpectedInLastPage < event.pageSize) {
|
|
1310
|
+
originalPageSize = this.pageSize;
|
|
1311
|
+
this.pageSize = itemsExpectedInLastPage;
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
try {
|
|
1315
|
+
await this.loadItemsPaginated(navigation.direction, navigation.resetDocs);
|
|
1316
|
+
}
|
|
1317
|
+
catch (error) {
|
|
1318
|
+
console.error('Erro ao carregar itens paginados:', error);
|
|
1319
|
+
}
|
|
1320
|
+
finally {
|
|
1321
|
+
if (originalPageSize !== null) {
|
|
1322
|
+
this.pageSize = originalPageSize;
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
this.pageEvent = event;
|
|
1326
|
+
this.isLoading$.next(false);
|
|
1327
|
+
this.cdr.markForCheck();
|
|
1328
|
+
}
|
|
1329
|
+
// FILTER/SEARCH METHODS
|
|
1330
|
+
applyFilter(value) {
|
|
1331
|
+
if (this.data.pagination === false) {
|
|
1332
|
+
this.dataSource.filter = String(value).trim().toLowerCase();
|
|
1333
|
+
}
|
|
1334
|
+
if (this.data.pagination === true) {
|
|
1335
|
+
this.filterValue = value;
|
|
1336
|
+
this.filterSubject.next(this.filterValue);
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
async search(event) {
|
|
1340
|
+
if (event) {
|
|
1341
|
+
event.preventDefault();
|
|
1342
|
+
event.stopPropagation();
|
|
1343
|
+
}
|
|
1344
|
+
if (this.selectSort.value) {
|
|
1345
|
+
if (this.selectSort.value.arrange === 'ascending') {
|
|
1346
|
+
this.sortBy = {
|
|
1347
|
+
field: this.selectSort.value.property,
|
|
1348
|
+
order: 'asc',
|
|
1349
|
+
};
|
|
1350
|
+
}
|
|
1351
|
+
if (this.selectSort.value.arrange === 'descending') {
|
|
1352
|
+
this.sortBy = {
|
|
1353
|
+
field: this.selectSort.value.property,
|
|
1354
|
+
order: 'desc',
|
|
1355
|
+
};
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
if (this.data.pagination === false) {
|
|
1359
|
+
this.arrange = this.buildArrangeFromFilters();
|
|
1360
|
+
this.applyFiltersToDataSource();
|
|
1361
|
+
this.currentArrange =
|
|
1362
|
+
this.filtersForm.length > 0
|
|
1363
|
+
? (this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? '')
|
|
1364
|
+
: '';
|
|
1365
|
+
this.cdr.markForCheck();
|
|
1366
|
+
}
|
|
1367
|
+
else {
|
|
1368
|
+
await this.loadItemsPaginated('reload', true);
|
|
1369
|
+
this.currentArrange =
|
|
1370
|
+
this.filtersForm.length > 0
|
|
1371
|
+
? (this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? '')
|
|
1372
|
+
: '';
|
|
1373
|
+
this.paginator.firstPage();
|
|
1374
|
+
this.cdr.markForCheck();
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
async resetFilter() {
|
|
1378
|
+
this.dataSource.filter = '';
|
|
1379
|
+
if (this.filterPredicate) {
|
|
1380
|
+
this.dataSource.filterPredicate = this.filterPredicate;
|
|
1381
|
+
}
|
|
1382
|
+
this.filtersForm.clear();
|
|
1383
|
+
this.addFilter();
|
|
1384
|
+
this.selectSort.patchValue('');
|
|
1385
|
+
this.sortBy = {
|
|
1386
|
+
order: this.data.sortBy ? this.data.sortBy.order : 'desc',
|
|
1387
|
+
field: this.data.sortBy ? this.data.sortBy.field : 'createdAt',
|
|
1388
|
+
};
|
|
1389
|
+
if (this.data.pagination === false) {
|
|
1390
|
+
this.arrange = {
|
|
1391
|
+
filters: [],
|
|
1392
|
+
sortBy: this.sortBy,
|
|
1393
|
+
};
|
|
1394
|
+
this.dataSource.data = [...this.items];
|
|
1395
|
+
this.totalItems = this.items.length;
|
|
1396
|
+
this.currentArrange = '';
|
|
1397
|
+
this.cdr.markForCheck();
|
|
1398
|
+
}
|
|
1399
|
+
else {
|
|
1400
|
+
await this.loadItemsPaginated('reload', true);
|
|
1401
|
+
this.currentArrange = '';
|
|
1402
|
+
this.paginator.firstPage();
|
|
1403
|
+
this.cdr.markForCheck();
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
// NAVIGATION METHODS
|
|
1407
|
+
goToDetails(row) {
|
|
1408
|
+
if (this.data.isNotClickable) {
|
|
1409
|
+
return;
|
|
1410
|
+
}
|
|
1411
|
+
const urlPath = this.data.url || this.data.name;
|
|
1412
|
+
const rowWithId = row;
|
|
1413
|
+
const url = this.router.serializeUrl(this.router.createUrlTree([`/${urlPath}`, rowWithId.id]));
|
|
1414
|
+
window.open(url, '_blank');
|
|
1415
|
+
}
|
|
1416
|
+
// RELATION METHODS
|
|
1417
|
+
async getRelation(params) {
|
|
1418
|
+
try {
|
|
1419
|
+
let snapshot;
|
|
1420
|
+
if (params.id !== '' &&
|
|
1421
|
+
params.id !== undefined &&
|
|
1422
|
+
params.collection !== undefined &&
|
|
1423
|
+
params.collection !== '') {
|
|
1424
|
+
snapshot = await firstValueFrom(this.firestore.collection(params.collection).doc(params.id).get());
|
|
1425
|
+
}
|
|
1426
|
+
if (snapshot && snapshot.exists) {
|
|
1427
|
+
const data = snapshot.data();
|
|
1428
|
+
const value = data?.[params.newProperty];
|
|
1429
|
+
return typeof value === 'string' ? value : '';
|
|
1430
|
+
}
|
|
1431
|
+
return '';
|
|
1432
|
+
}
|
|
1433
|
+
catch (e) {
|
|
1434
|
+
console.error(e);
|
|
1435
|
+
return '';
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
async loadRelations() {
|
|
1439
|
+
const relationPromises = this.data.displayedColumns
|
|
1440
|
+
.filter((col) => col.relation)
|
|
1441
|
+
.flatMap((col) => this.items.map(async (item) => {
|
|
1442
|
+
if (col.relation) {
|
|
1443
|
+
const itemRecord = item;
|
|
1444
|
+
itemRecord[col.property] = await this.getRelation({
|
|
1445
|
+
id: String(itemRecord[col.relation.sourceProperty] ?? ''),
|
|
1446
|
+
collection: col.relation.targetedCollection,
|
|
1447
|
+
newProperty: col.relation.targetedProperty || col.property,
|
|
1448
|
+
});
|
|
1449
|
+
}
|
|
1450
|
+
}));
|
|
1451
|
+
await Promise.all(relationPromises);
|
|
1452
|
+
}
|
|
1453
|
+
async getQueryLength(params) {
|
|
1454
|
+
const itemRecord = params.item;
|
|
1455
|
+
const snapshot = await this.firestore
|
|
1456
|
+
.collection(params.relation.collection)
|
|
1457
|
+
.ref.where(params.relation.property, params.relation.operator, itemRecord[params.relation.value])
|
|
1458
|
+
.get();
|
|
1459
|
+
return snapshot.size;
|
|
1460
|
+
}
|
|
1461
|
+
async loadQueryLengths() {
|
|
1462
|
+
const lengthPromises = this.data.displayedColumns
|
|
1463
|
+
.filter((col) => col.queryLength)
|
|
1464
|
+
.flatMap((col) => this.items.map(async (item) => {
|
|
1465
|
+
if (col.queryLength) {
|
|
1466
|
+
const itemRecord = item;
|
|
1467
|
+
itemRecord[col.property] = await this.getQueryLength({
|
|
1468
|
+
item: item,
|
|
1469
|
+
relation: col.queryLength,
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
}));
|
|
1473
|
+
await Promise.all(lengthPromises);
|
|
1474
|
+
}
|
|
1475
|
+
filterItems() {
|
|
1476
|
+
if (this.data.conditions) {
|
|
1477
|
+
this.data.conditions.forEach((cond) => {
|
|
1478
|
+
this.items = this.items.filter((item) => {
|
|
1479
|
+
const operatorFunction = this.tableService.operators[cond.operator];
|
|
1480
|
+
if (operatorFunction) {
|
|
1481
|
+
const itemRecord = item;
|
|
1482
|
+
return operatorFunction(itemRecord[cond.firestoreProperty], cond.dashProperty);
|
|
1483
|
+
}
|
|
1484
|
+
return false;
|
|
1485
|
+
});
|
|
1486
|
+
});
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
// PUBLIC METHODS
|
|
1490
|
+
async reloadTable() {
|
|
1491
|
+
if (this.data.pagination) {
|
|
1492
|
+
await this.loadItemsPaginated('reload', true);
|
|
1493
|
+
this.paginator.firstPage();
|
|
1494
|
+
this.cdr.markForCheck();
|
|
1495
|
+
}
|
|
1496
|
+
else {
|
|
1497
|
+
await this.loadItems();
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
updateDisplayedColumns() {
|
|
1501
|
+
if (this.dataSource) {
|
|
1502
|
+
this.dataSource = new MatTableDataSource([]);
|
|
1503
|
+
}
|
|
1504
|
+
this.columnProperties = this.data.displayedColumns.map((column) => column.property);
|
|
1505
|
+
const filterConfig = this.filterService.initializeDropdownItems(this.data.displayedColumns);
|
|
1506
|
+
this.dropdownItems = filterConfig.dropdownItems;
|
|
1507
|
+
this.sortableDropdownItems = filterConfig.sortableDropdownItems;
|
|
1508
|
+
if (this.data.filterableOptions) {
|
|
1509
|
+
this.dropdownItems = this.filterService.addFilterableOptions(this.dropdownItems, this.data.filterableOptions);
|
|
1510
|
+
}
|
|
1511
|
+
this.cdr.markForCheck();
|
|
1512
|
+
}
|
|
1513
|
+
shouldShowActionButton() {
|
|
1514
|
+
if (!this.data?.actionButton) {
|
|
1515
|
+
return false;
|
|
1516
|
+
}
|
|
1517
|
+
if (!this.data.actionButton.condition) {
|
|
1518
|
+
return true;
|
|
1519
|
+
}
|
|
1520
|
+
try {
|
|
1521
|
+
return this.data.actionButton.condition(null) ?? true;
|
|
1522
|
+
}
|
|
1523
|
+
catch {
|
|
1524
|
+
return true;
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
handleDownload() {
|
|
1528
|
+
if (!this.downloadTable)
|
|
1529
|
+
return;
|
|
1530
|
+
if (this.data.pagination === false) {
|
|
1531
|
+
if (this.dataSource && this.dataSource.filteredData) {
|
|
1532
|
+
this.filteredItems = [...this.dataSource.filteredData];
|
|
1533
|
+
}
|
|
1534
|
+
const arrange = this.buildArrangeFromFilters();
|
|
1535
|
+
this.downloadTable(arrange, this.data.conditions || []);
|
|
1536
|
+
}
|
|
1537
|
+
else {
|
|
1538
|
+
if (this.arrange) {
|
|
1539
|
+
this.downloadTable(this.arrange, this.data.conditions || []);
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
TableComponent.ɵfac = function TableComponent_Factory(t) { return new (t || TableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.TableService), i0.ɵɵdirectiveInject(i3.FilterService), i0.ɵɵdirectiveInject(i4.TooltipService), i0.ɵɵdirectiveInject(i5.PaginationService), i0.ɵɵdirectiveInject(i6.AngularFirestore), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
1545
|
+
TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableComponent, selectors: [["lib-table"]], viewQuery: function TableComponent_Query(rf, ctx) { if (rf & 1) {
|
|
1546
|
+
i0.ɵɵviewQuery(MatPaginator, 5);
|
|
1547
|
+
i0.ɵɵviewQuery(MatSort, 5);
|
|
1548
|
+
} if (rf & 2) {
|
|
1549
|
+
let _t;
|
|
1550
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.paginator = _t.first);
|
|
1551
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sort = _t.first);
|
|
1552
|
+
} }, inputs: { data: "data", downloadTable: "downloadTable" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["class", "card-body", 4, "ngIf"], [1, "card-body"], [1, "flex", "flex-col", "justify-between", "gap-6"], ["class", "rounded-xl border border-gray-200 bg-white p-4 shadow-lg", 4, "ngIf"], [1, "flex", "flex-col"], [3, "tabsData", "selectedTab", "tabSelected", 4, "ngIf"], [1, "mat-elevation-z8", "w-full", "overflow-x-auto", "rounded-xl", "table-container"], ["mat-table", "", "matSort", "", "matSortActive", "createdAt", "matSortDirection", "desc", 3, "dataSource"], ["sort", "matSort"], [3, "matColumnDef", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "ngClass", "click", 4, "matRowDef", "matRowDefColumns"], ["class", "mat-row", 4, "matNoDataRow"], ["class", "flex justify-center", 4, "ngIf"], [1, "paginator-container"], ["showFirstLastButtons", "", "aria-label", "Select page of periodic elements", 3, "pageSizeOptions", "pageSize", "length", "ngClass", "page"], ["paginator", ""], ["class", "page-number-display", 4, "ngIf"], [3, "state", "styles"], [1, "rounded-xl", "border", "border-gray-200", "bg-white", "p-4", "shadow-lg"], [1, "mb-4", "flex", "flex-col", "items-start", "justify-between", "gap-4", "border-b-2", "border-gray-200", "pb-4", "md:flex-row", "md:items-center"], [1, "flex", "flex-wrap", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2"], [1, "fa", "fa-filter", "text-xl", "text-blue-500"], [1, "text-lg", "font-semibold", "text-gray-700"], [3, "ngClass", "routerLink", "click", 4, "ngIf"], ["class", "mb-4", 4, "ngIf"], ["class", "mb-4 space-y-3", 4, "ngIf"], [1, "-mb-2", "flex", "items-start", "justify-between", "gap-4", "border-t", "border-gray-200", "pt-4"], [4, "ngIf"], ["class", "flex flex-wrap gap-3 self-start sm:self-auto", 4, "ngIf"], [3, "ngClass", "routerLink", "click"], [3, "class", 4, "ngIf"], [1, "mb-4"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2"], [1, "min-w-[200px]", "flex-1"], ["appearance", "outline", 1, "w-full"], [1, "fa", "fa-sort-alpha-down", "text-cyan-600"], ["placeholder", "Selecione...", 3, "formControl"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "mb-4", "space-y-3"], ["class", "flex flex-wrap items-center gap-3 p-2", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2", 3, "formGroup"], ["class", "min-w-[200px] flex-1", 4, "ngIf"], ["class", "min-w-[340px] flex-auto", 4, "ngIf"], ["class", "ml-auto flex-shrink-0", 4, "ngIf"], ["placeholder", "Selecione o tipo...", "formControlName", "selectFilter", 3, "selectionChange"], [1, "text-sm", "text-blue-500"], [1, "fa", "fa-search", "text-gray-400"], ["formControlName", "typeFilter", "matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter"], ["input", ""], ["placeholder", "Selecione...", "formControlName", "selectItem", "multiple", ""], [1, "min-w-[340px]", "flex-auto"], [1, "flex", "flex-col", "items-stretch", "gap-3", "sm:flex-row", "sm:items-center"], ["appearance", "outline", 1, "flex-1"], [1, "fa", "fa-calendar", "text-gray-400"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], [1, "ml-auto", "flex-shrink-0"], ["matTooltip", "Remover filtro", 1, "flex", "h-10", "w-10", "items-center", "justify-center", "rounded-full", "transition-colors", "duration-300", "hover:bg-red-100", 3, "click"], [1, "fa", "fa-trash", "text-red-500", "hover:text-red-600"], ["matTooltip", "Adicionar novo filtro", 1, "transform", "rounded-full", "border-2", "border-blue-300", "bg-blue-50", "px-6", "py-2", "text-sm", "font-medium", "text-blue-600", "transition-all", "duration-300", "hover:-translate-y-0.5", "hover:border-blue-400", "hover:bg-blue-100", "hover:shadow-md", 3, "click"], [1, "fa", "fa-plus", "mr-2"], [1, "flex", "flex-wrap", "gap-3", "self-start", "sm:self-auto"], ["type", "button", "matTooltip", "Aplicar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-green-600", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-green-700", 3, "click"], [1, "fa", "fa-search"], ["matTooltip", "Limpar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-red-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-red-600", 3, "click"], [1, "fas", "fa-redo-alt"], ["class", "flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600", "matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 3, "disabled", "click", 4, "ngIf"], ["matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-orange-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-orange-600", 3, "disabled", "click"], [1, "fa", "fa-download"], [1, "fa", "fa-search", "text-blue-500"], ["matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter", "keyup"], ["filterInput", ""], ["matSuffix", "", 1, "text-gray-500"], ["class", "flex flex-wrap items-center gap-3", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", 3, "formGroup"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], [3, "tabsData", "selectedTab", "tabSelected"], [3, "matColumnDef"], [4, "matHeaderCellDef"], ["mat-header-cell", "", 4, "ngIf"], ["mat-header-cell", "", "mat-sort-header", "", 4, "ngIf"], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove", 4, "matCellDef"], ["mat-header-cell", ""], ["mat-header-cell", "", "mat-sort-header", ""], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove"], ["class", "relative inline-block", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["withinLimit", ""], ["target", "_blank", 3, "href", 4, "ngIf"], ["target", "_blank", 3, "href"], [1, "relative", "inline-block"], ["class", "absolute inset-0 m-auto", 3, "diameter", 4, "ngIf"], ["alt", "", 3, "src", "ngClass", "load", "error"], [1, "absolute", "inset-0", "m-auto", 3, "diameter"], [3, "click", 4, "ngFor", "ngForOf"], [3, "click"], [3, "ngClass", 4, "ngIf"], [3, "ngClass"], ["mat-header-row", ""], ["mat-row", "", 3, "ngClass", "click"], [1, "mat-row"], ["class", "mat-cell p-4", "colspan", "4", 4, "ngIf"], ["colspan", "4", 1, "mat-cell", "p-4"], [1, "flex", "justify-center"], [1, "page-number-display"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1553
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_Template, 21, 21, "div", 0);
|
|
1554
|
+
} if (rf & 2) {
|
|
1555
|
+
i0.ɵɵproperty("ngIf", ctx.data);
|
|
1556
|
+
} }, dependencies: [i7.NgClass, i7.NgForOf, i7.NgIf, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i8.MaxLengthValidator, i8.FormControlDirective, i8.FormGroupDirective, i8.FormControlName, i1.RouterLink, i9.MatTable, i9.MatHeaderCellDef, i9.MatHeaderRowDef, i9.MatColumnDef, i9.MatCellDef, i9.MatRowDef, i9.MatHeaderCell, i9.MatCell, i9.MatHeaderRow, i9.MatRow, i9.MatNoDataRow, i10.MatPaginator, i11.MatSort, i11.MatSortHeader, i12.MatFormField, i12.MatLabel, i12.MatSuffix, i13.MatInput, i14.MatOption, i15.MatSelect, i16.MatTooltip, i17.MatProgressSpinner, i18.MatIcon, i19.TableTabsComponent, i20.TableTooltipComponent, i7.AsyncPipe], styles: ["@charset \"UTF-8\";[_nghost-%COMP%]{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}[_nghost-%COMP%] .mat-table .mat-header-cell, [_nghost-%COMP%] .mat-header-cell, [_nghost-%COMP%] th.mat-header-cell, [_nghost-%COMP%] .mat-mdc-table .mat-mdc-header-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600} .fa-filter, i.fa-filter{color:var(--table-color, #1976d2)!important} .rounded-xl.border{border-color:var(--table-color, #1976d2)!important} .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important} .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{padding-bottom:0} .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled[_ngcontent-%COMP%]{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled[_ngcontent-%COMP%] .mdc-text-field__input[_ngcontent-%COMP%]{color:#525252}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none} .hide-length .mat-mdc-paginator-range-label{display:none} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden} .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw} .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:hover:not(:disabled), button[_ngcontent-%COMP%]:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}"], changeDetection: 0 });
|
|
1557
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
|
|
1558
|
+
type: Component,
|
|
1559
|
+
args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
1560
|
+
}], function () { return [{ type: i1.Router }, { type: i2.TableService }, { type: i3.FilterService }, { type: i4.TooltipService }, { type: i5.PaginationService }, { type: i6.AngularFirestore }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, { data: [{
|
|
1561
|
+
type: Input
|
|
1562
|
+
}], downloadTable: [{
|
|
1563
|
+
type: Input
|
|
1564
|
+
}], paginator: [{
|
|
1565
|
+
type: ViewChild,
|
|
1566
|
+
args: [MatPaginator]
|
|
1567
|
+
}], sort: [{
|
|
1568
|
+
type: ViewChild,
|
|
1569
|
+
args: [MatSort]
|
|
1570
|
+
}] }); })();
|
|
1571
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCdkQsb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RBQWtDLG9EQUFBO0lBTy9CLGVBQTRCO0lBQTVCLHFEQUE0QjtJQUcvQixlQUNGO0lBREUsZ0VBQ0Y7OztJQWNNLHNDQUdDLGNBQUE7SUFFRyx3QkFBbUQ7SUFDbkQsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBSi9CLGdDQUFjO0lBSU4sZUFBZ0I7SUFBaEIsb0NBQWdCOzs7SUFmcEMsK0JBQTJELGNBQUEsY0FBQSx5QkFBQSxvQkFBQTtJQUtqRCx3QkFBbUQ7SUFDbkQsNEJBQU07SUFBQSwyQkFBVztJQUFBLGlCQUFPLEVBQUE7SUFFMUIsc0NBQWtFO0lBQ2hFLGdHQVFhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBLEVBQUEsRUFBQTs7O0lBVjBCLGVBQTBCO0lBQTFCLGdEQUEwQjtJQUU1QyxlQUF3QjtJQUF4Qix1REFBd0I7OztJQThCM0Msc0NBR0MsY0FBQTtJQUVHLHdCQUdLO0lBQ0wsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBUC9CLGdDQUFjO0lBSVYsZUFBcUM7SUFBckMsOENBQXFDO0lBR2pDLGVBQWdCO0lBQWhCLG9DQUFnQjs7OztJQWpCaEMsK0JBQW1FLHlCQUFBLGdCQUFBO0lBRXBELDhCQUFjO0lBQUEsaUJBQVk7SUFDckMsc0NBSUM7SUFEQyw4TUFBbUIsZUFBQSw4QkFBc0IsQ0FBQSxJQUFDO0lBRTFDLDRHQVdhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBOzs7SUFYUSxlQUE4QjtJQUE5Qiw2REFBOEI7Ozs7SUFnQnZELCtCQUtDLHlCQUFBLG9CQUFBO0lBR0ssd0JBQTBDO0lBQzFDLDRCQUFNO0lBQUEsWUFHSjtJQUFBLGlCQUFPLEVBQUE7SUFFWCxxQ0FNRTtJQUxBLHVNQUFlLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBRGhDLGlCQU1FLEVBQUEsRUFBQTs7OztJQVhNLGVBR0o7SUFISSx3SkFHSjs7O0lBZ0NGLHNDQU1DO0lBQ0MsWUFDRjtJQUFBLGlCQUFhOzs7SUFIWCxnQ0FBYztJQUVkLGVBQ0Y7SUFERSwrQ0FDRjs7O0lBM0JOLCtCQVFDLHlCQUFBLGdCQUFBO0lBRWMsWUFHVDtJQUFBLGlCQUFZO0lBQ2Qsc0NBSUM7SUFDQyw0R0FRYTtJQUNmLGlCQUFhLEVBQUEsRUFBQTs7Ozs7SUFsQkYsZUFHVDtJQUhTLDBKQUdUO0lBUWtDLGVBR2xEO0lBSGtELDhHQUdsRDs7OztJQVNVLCtCQU1DLGNBQUEseUJBQUEsb0JBQUE7SUFNTyx3QkFBNEM7SUFDNUMsNEJBQU07SUFBQSw0QkFBWTtJQUFBLGlCQUFPLEVBQUE7SUFFM0IsaUNBUUU7SUFMQSwyTUFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsc05BQ3ZCLGVBQUEsNEJBQW9CLGFBQWEsUUFBSSxDQUFBLElBRGQ7SUFIbEMsaUJBUUUsRUFBQTtJQUdKLDBDQUFvRCxvQkFBQTtJQUVoRCx5QkFBNEM7SUFDNUMsNkJBQU07SUFBQSwyQkFBVTtJQUFBLGlCQUFPLEVBQUE7SUFFekIsa0NBUUU7SUFOQSw0TUFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsdU5BQ3ZCLGVBQUEsNEJBQW9CLFdBQVcsUUFBSSxDQUFBLElBRFo7SUFGbEMsaUJBUUUsRUFBQSxFQUFBLEVBQUE7Ozs7SUFNUiwrQkFBa0UsaUJBQUE7SUFFOUQsOE5BQVMsZUFBQSwyQkFBZSxDQUFBLElBQUM7SUFJekIsd0JBQTJEO0lBQzdELGlCQUFTLEVBQUE7OztJQTdJYiwrQkFJQztJQUVDLHdGQXNCTTtJQUdOLHdGQXNCTTtJQUdOLHdGQThCTTtJQUdOLHlGQTBDTTtJQUdOLHdGQVFNO0lBQ1IsaUJBQU07Ozs7Ozs7SUE5SUosMkNBQStCO0lBS0ksZUFBOEI7SUFBOUIsdURBQThCO0lBMkI5RCxlQUdiO0lBSGEsMkpBR2I7SUFzQmEsZUFNYjtJQU5hLG1OQU1iO0lBMkJhLGVBSWI7SUFKYSxpS0FJYjtJQXVDZ0IsZUFBNEI7SUFBNUIscURBQTRCOzs7SUF2SXRDLCtCQUFvRTtJQUNsRSxrRkErSU07SUFDUixpQkFBTTs7O0lBOUlzQixlQUF5QjtJQUF6QixzREFBeUI7Ozs7SUFxSm5ELDJCQUFzQyxpQkFBQTtJQUVsQywyS0FBUyxlQUFBLG1CQUFXLENBQUEsSUFBQztJQUlyQix3QkFBK0I7SUFDL0Isa0NBQ0Y7SUFBQSxpQkFBUyxFQUFBOzs7O0lBNkJULGtDQWFDO0lBTEMsb0xBQ2lCLDREQUN4QixTQUFTLEdBQW1CLHFFQUNuQixHQUNKLElBQ1YsQ0FBQSxJQURhO0lBRUQsd0JBQThCO0lBQzlCLDBCQUNGO0lBQUEsaUJBQVM7OztJQVhQLDRGQUVDOzs7O0lBaENMLCtCQUtDLGlCQUFBO0lBRUcsMktBQVMsZUFBQSxnQkFBUSxDQUFBLElBQUM7SUFLbEIsd0JBQTRCO0lBQzVCLDJCQUNGO0lBQUEsaUJBQVM7SUFFVCxrQ0FJQztJQUhDLDJLQUFTLGVBQUEscUJBQWEsQ0FBQSxJQUFDO0lBSXZCLHdCQUErQjtJQUMvQix5QkFDRjtJQUFBLGlCQUFTO0lBRVQseUZBZ0JTO0lBQ1gsaUJBQU07OztJQWhCRCxlQUE4QztJQUE5QywrRUFBOEM7OztJQTlQdkQsK0JBUUMsY0FBQSxjQUFBLGNBQUE7SUFRTyx3QkFBa0Q7SUFDbEQsZ0NBQ0c7SUFBQSx5Q0FBZTtJQUFBLGlCQUNqQixFQUFBO0lBRUgsa0ZBYVM7SUFDWCxpQkFBTSxFQUFBO0lBSVIsNkVBc0JNO0lBR04sNEVBaUpNO0lBR04sZ0NBRUM7SUFFQyw4RUFTTTtJQUdOLDhFQTBDTTtJQUNSLGlCQUFNLEVBQUE7OztJQXpQQyxlQUFzRDtJQUF0RCxxRkFBc0Q7SUFpQjFDLGVBQXNDO0lBQXRDLDhEQUFzQztJQXlCNUIsZUFBcUM7SUFBckMsNkRBQXFDO0lBd0oxRCxlQUE4QjtJQUE5QixzREFBOEI7SUFjakMsZUFHWDtJQUhXLCtGQUdYOzs7SUF1RVksb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RBQWtDLG9EQUFBO0lBTy9CLGVBQTRCO0lBQTVCLHFEQUE0QjtJQUcvQixlQUNGO0lBREUsZ0VBQ0Y7Ozs7SUFLSiwrQkFHQyx5QkFBQSxvQkFBQTtJQUdLLHdCQUEwQztJQUMxQyx3QkFDRjtJQUFBLGlCQUFZO0lBQ1oscUNBTUU7SUFKQSwyTEFBZSxlQUFBLHNCQUFjLENBQUEsSUFBQyw0TEFDckIsZUFBQSwrQkFBOEIsQ0FBQSxJQURUO0lBRmhDLGlCQU1FO0lBQ0Ysb0NBQTBDO0lBQUEsc0JBQU07SUFBQSxpQkFBVyxFQUFBLEVBQUE7OztJQXNCbkQsc0NBR0MsY0FBQTtJQUVHLHdCQUdLO0lBQ0wsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBUC9CLGdDQUFjO0lBSVYsZUFBcUM7SUFBckMsOENBQXFDO0lBR2pDLGVBQWdCO0lBQWhCLG9DQUFnQjs7OztJQWpCaEMsK0JBQW1FLHlCQUFBLGdCQUFBO0lBRXBELDhCQUFjO0lBQUEsaUJBQVk7SUFDckMsc0NBSUM7SUFEQyxvTkFBbUIsZUFBQSw4QkFBc0IsQ0FBQSxJQUFDO0lBRTFDLGtIQVdhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBOzs7SUFYUSxlQUE4QjtJQUE5Qiw2REFBOEI7Ozs7SUFnQnZELCtCQU1DLHlCQUFBLG9CQUFBO0lBR0ssd0JBQTBDO0lBQzFDLDRCQUFNO0lBQUEsWUFHSjtJQUFBLGlCQUFPLEVBQUE7SUFFWCxxQ0FNRTtJQUxBLDZNQUFlLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBRGhDLGlCQU1FLEVBQUEsRUFBQTs7OztJQVhNLGVBR0o7SUFISSx3SkFHSjs7O0lBZ0NGLHNDQU1DO0lBQ0MsWUFDRjtJQUFBLGlCQUFhOzs7SUFIWCxnQ0FBYztJQUVkLGVBQ0Y7SUFERSwrQ0FDRjs7O0lBM0JOLCtCQVFDLHlCQUFBLGdCQUFBO0lBRWMsWUFHVDtJQUFBLGlCQUFZO0lBQ2Qsc0NBSUM7SUFDQyxrSEFRYTtJQUNmLGlCQUFhLEVBQUEsRUFBQTs7Ozs7SUFsQkYsZUFHVDtJQUhTLDBKQUdUO0lBUW9DLGVBR3REO0lBSHNELDhHQUd0RDs7OztJQVNZLCtCQU1DLGNBQUEseUJBQUEsb0JBQUE7SUFNTyx3QkFBNEM7SUFDNUMsNEJBQU07SUFBQSw0QkFBWTtJQUFBLGlCQUFPLEVBQUE7SUFFM0IsaUNBU0U7SUFOQSxpTkFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsNE5BQ3ZCLGVBQUEsNEJBQW9CLGFBQWEsUUFBSSxDQUFBLElBRGQsNEtBRXhCLGVBQUEsNEJBQW9CLENBQUEsSUFGSTtJQUhsQyxpQkFTRSxFQUFBO0lBR0osMENBQW9ELG9CQUFBO0lBRWhELHlCQUE0QztJQUM1Qyw2QkFBTTtJQUFBLDJCQUFVO0lBQUEsaUJBQU8sRUFBQTtJQUV6QixrQ0FTRTtJQVBBLGtOQUFpQixlQUFBLHNCQUFjLENBQUEsSUFBQyw2TkFDdkIsZUFBQSw0QkFBb0IsV0FBVyxRQUFJLENBQUEsSUFEWiw2S0FFeEIsZUFBQSw0QkFBb0IsQ0FBQSxJQUZJO0lBRmxDLGlCQVNFLEVBQUEsRUFBQSxFQUFBOzs7O0lBTVIsK0JBQWtFLGlCQUFBO0lBRTlELHNPQUFTLGVBQUEsNEJBQWUsQ0FBQSxJQUFDO0lBSXpCLHdCQUEyRDtJQUM3RCxpQkFBUyxFQUFBOzs7SUFoSmIsK0JBSUM7SUFFQyw4RkFzQk07SUFHTiw4RkF1Qk07SUFHTiw4RkE4Qk07SUFHTiwrRkE0Q007SUFHTiw4RkFRTTtJQUNSLGlCQUFNOzs7Ozs7O0lBakpKLDJDQUErQjtJQUtJLGVBQThCO0lBQTlCLHVEQUE4QjtJQTJCOUQsZUFJZjtJQUplLDJKQUlmO0lBc0JlLGVBTWY7SUFOZSxtTkFNZjtJQTJCZSxlQUlmO0lBSmUsaUtBSWY7SUF5Q2tCLGVBQTRCO0lBQTVCLHFEQUE0Qjs7O0lBMUl0QywrQkFBb0U7SUFDbEUsd0ZBa0pNO0lBQ1IsaUJBQU07OztJQWpKc0IsZUFBeUI7SUFBekIsc0RBQXlCOzs7O0lBd0puRCwyQkFBc0MsaUJBQUE7SUFFbEMsa0xBQVMsZUFBQSxvQkFBVyxDQUFBLElBQUM7SUFJckIsd0JBQStCO0lBQy9CLGtDQUNGO0lBQUEsaUJBQVMsRUFBQTs7OztJQThCVCxrQ0FTQztJQURDLDJMQUFTLGVBQUEseUJBQWdCLENBQUEsSUFBQztJQUUxQix3QkFBOEI7SUFDOUIsMEJBQ0Y7SUFBQSxpQkFBUzs7O0lBUFAsOEZBRUM7Ozs7SUFqQ0wsK0JBTUMsaUJBQUE7SUFFRyxrTEFBUyxlQUFBLGlCQUFRLENBQUEsSUFBQztJQUtsQix3QkFBNEI7SUFDNUIsMkJBQ0Y7SUFBQSxpQkFBUztJQUVULGtDQUlDO0lBSEMsa0xBQVMsZUFBQSxzQkFBYSxDQUFBLElBQUM7SUFJdkIsd0JBQStCO0lBQy9CLHlCQUNGO0lBQUEsaUJBQVM7SUFFVCw4RkFZUztJQUNYLGlCQUFNOzs7SUFaRCxlQUE4QztJQUE5QywrRUFBOEM7OztJQXBNdkQsMkJBQXNDO0lBRXBDLGtGQW9KTTtJQUdOLCtCQUVDO0lBRUMsa0ZBU007SUFHTixrRkF1Q007SUFDUixpQkFBTSxFQUFBOzs7SUEvTXVCLGVBQXFDO0lBQXJDLDhEQUFxQztJQTJKMUQsZUFBOEI7SUFBOUIsdURBQThCO0lBY2pDLGVBSWI7SUFKYSxpR0FJYjs7O0lBM09JLCtCQVFDLGNBQUEsY0FBQSxjQUFBO0lBUU8sd0JBQWtEO0lBQ2xELGdDQUNHO0lBQUEseUNBQWU7SUFBQSxpQkFDakIsRUFBQTtJQUVILGtGQWFTO0lBQ1gsaUJBQU0sRUFBQTtJQUlSLDRFQWtCTTtJQUdOLDRFQWtOTTtJQUNSLGlCQUFNOzs7SUF6UEcsZUFBc0Q7SUFBdEQscUZBQXNEO0lBbUIxRCxlQUFxRTtJQUFyRSxvR0FBcUU7SUFtQmxFLGVBQThCO0lBQTlCLHNEQUE4Qjs7OztJQXVOcEMsMENBS0M7SUFEQywyTUFBZSxlQUFBLDhCQUFxQixDQUFBLElBQUM7SUFDdEMsaUJBQWlCOzs7SUFIaEIsb0RBQStCLG1DQUFBOzs7SUFxQnpCLDhCQUdDO0lBQ0MsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsK0NBQ0Y7OztJQUVBLDhCQUlDO0lBQ0MsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsK0NBQ0Y7OztJQW9CUSw2QkFJQztJQUNDLFlBQ0Y7SUFBQSxpQkFBSTs7Ozs7SUFKRixvRUFBMEI7SUFHMUIsZUFDRjtJQURFLDZFQUNGOzs7SUFDQSw2QkFJQztJQUNDLFlBQ0Y7SUFBQSxpQkFBSTs7Ozs7SUFKRix5REFBb0I7SUFHcEIsZUFDRjtJQURFLDZFQUNGOzs7SUFDQSw0QkFFQztJQUNDLFlBQ0Y7SUFBQSxpQkFBTzs7Ozs7SUFETCxlQUNGO0lBREUsNkVBQ0Y7OztJQTFCRiw0QkFPQztJQUNDLG1IQU1JO0lBQ0osbUhBTUk7SUFDSix5SEFJTztJQUNULGlCQUFPOzs7O0lBbEJGLGVBQTBCO0lBQTFCLGdEQUEwQjtJQU8xQixlQUEwQztJQUExQyw4RUFBMEM7SUFPMUMsZUFBb0Q7SUFBcEQsd0ZBQW9EOzs7SUFPekQsNkJBSUM7SUFDQyxZQUNGO0lBQUEsaUJBQUk7Ozs7O0lBSkYsb0VBQTBCO0lBRzFCLGVBQ0Y7SUFERSxtRkFDRjs7O0lBQ0EsNkJBSUM7SUFDQyxZQUNGO0lBQUEsaUJBQUk7Ozs7O0lBSkYseURBQW9CO0lBR3BCLGVBQ0Y7SUFERSxtRkFDRjs7O0lBQ0EsNEJBRUM7SUFDQyxZQUNGO0lBQUEsaUJBQU87Ozs7O0lBREwsZUFDRjtJQURFLG1GQUNGOzs7SUFsQkEsMEhBTUk7SUFDSiwwSEFNSTtJQUNKLGdJQUlPOzs7O0lBakJKLGdEQUEwQjtJQU8xQixlQUEwQztJQUExQyw4RUFBMEM7SUFPMUMsZUFBb0Q7SUFBcEQsd0ZBQW9EOzs7SUEvQzNELDRCQUEwRDtJQUN4RCw2QkFBYztJQUNaLGtIQTJCTztJQUNULDBCQUFlO0lBQ2YsaUtBb0JjO0lBQ2hCLGlCQUFPOzs7OztJQWpEQSxlQUtmO0lBTGUsbUlBS2YsbUJBQUE7OztJQXFEVSxrQ0FJZTs7SUFGYiw2QkFBZTs7OztJQVJuQiwrQkFLQztJQUNDLCtIQUllO0lBQ2YsK0JBT0U7SUFGQSxtU0FBUSxlQUFBLHdDQUFxQixDQUFBLElBQUMsOFJBQ3JCLGVBQUEseUVBQWlELENBQUEsSUFENUI7SUFMaEMsaUJBT0UsRUFBQTs7Ozs7SUFYQyxlQUE4QjtJQUE5QixrRUFBOEI7SUFPL0IsZUFBNEM7SUFBNUMsd0VBQTRDO0lBRjVDLCtGQUFnRCxpQ0FBQTs7O0lBZ0JsRCxrQ0FJZTs7SUFGYiw2QkFBZTs7OztJQVJuQiwrQkFLQztJQUNDLCtIQUllO0lBQ2YsK0JBT0U7SUFGQSxtU0FBUSxlQUFBLHdDQUFxQixDQUFBLElBQUMsOFJBQ3JCLGVBQUEseUVBQWlELENBQUEsSUFENUI7SUFMaEMsaUJBT0UsRUFBQTs7Ozs7SUFYQyxlQUE4QjtJQUE5QixrRUFBOEI7SUFPL0IsZUFBNEM7SUFBNUMsd0VBQTRDO0lBRjVDLG1FQUF5QixpQ0FBQTs7O0lBaUJ6QixpQ0FPRztJQUFBLFlBQW9CO0lBQUEsaUJBQ3RCOzs7SUFQQyw4Q0FBMkI7SUFNMUIsZUFBb0I7SUFBcEIseUNBQW9COzs7O0lBZnpCLGtDQU9DO0lBTEMsNlNBRXBCLDZDQUFpRCw2Q0FDM0IsR0FBMkIsd0JBRWpELENBQUEsSUFEcUI7SUFFRCxvSUFRQztJQUNILGlCQUFTOzs7O0lBUEosZUFLdkI7SUFMdUIsNklBS3ZCOzs7SUFoQmdCLDZCQUFvQztJQUNsQyw4SEFpQlM7SUFDWCwwQkFBZTs7O0lBakJXLGVBQWdCO0lBQWhCLDRDQUFnQjs7OztJQTVHNUMsOEJBT0M7SUFKQyxxUUFBUyxpQ0FBYSx5QkFBZSxHQUFHLElBQUksQ0FBQSxJQUFDLDhTQUMvQixlQUFBLHFEQUFrQyxDQUFBLElBREgsNExBRS9CLGVBQUEsMkJBQWtCLENBQUEsSUFGYSxnTUFHaEMsZUFBQSxnQ0FBdUIsQ0FBQSxJQUhTO0lBTTdDLDJHQW9ETztJQUdQLHlHQW1CTTtJQUdOLHlHQW1CTTtJQUNOLDJIQW1CZTtJQUNqQixpQkFBSzs7O0lBckhJLGVBQWlEO0lBQWpELGlGQUFpRDtJQXdEckQsZUFHbkI7SUFIbUIsdUdBR25CO0lBbUJtQixlQUduQjtJQUhtQixzR0FHbkI7SUFnQitCLGVBQW1CO0lBQW5CLHlDQUFtQjs7O0lBMUh0Qyw2QkFBZ0M7SUFFOUIsa0dBS0s7SUFFTCxrR0FNSztJQUNMLGtHQThISztJQUNQLDBCQUFlOzs7O0lBNUlWLGVBQWlEO0lBQWpELGdGQUFpRDtJQU9qRCxlQUFpRDtJQUFqRCxnRkFBaUQ7OztJQWR4RCxpQ0FHQztJQUNDLHVHQStJZTtJQUNqQiwwQkFBZTs7O0lBbEpiLDJEQUFpQzs7O0lBb0puQywwQkFBNEQ7Ozs7SUFDNUQsK0JBS0M7SUFEQyw4TkFBUyxlQUFBLDhCQUFnQixDQUFBLElBQUM7SUFDM0IsaUJBQUs7OztJQUpKLHFEQUFnQzs7O0lBUWhDLCtCQUFtRTtJQUNqRSwwREFDRjtJQUFBLGlCQUFLOzs7SUFIUCwrQkFBa0M7SUFDaEMsMkVBRUs7O0lBQ1AsaUJBQUs7OztJQUhFLGVBQTJCO0lBQTNCLCtEQUEyQjs7O0lBTXBDLGdDQUE0RDtJQUMxRCw4QkFBMkI7SUFDN0IsaUJBQU07OztJQWNKLGdDQVFDO0lBQ0MsWUFDRjtJQUFBLGlCQUFNOzs7SUFESixlQUNGO0lBREUsMERBQ0Y7Ozs7O0lBMXZCViw4QkFBb0MsYUFBQTtJQUdoQyxzRUFnUk07SUFHTixzRUErUU07SUFFTiw4QkFBMkI7SUFFekIsMkZBS2tCO0lBQ2xCLDhCQUVDLGtCQUFBO0lBU0csdUZBb0plO0lBRWYsc0VBQTREO0lBQzVELHNFQUtNO0lBR04sc0VBSUs7SUFDUCxpQkFBUTtJQUVSLHdFQUVNOztJQUVOLGdDQUFpQyw2QkFBQTtJQVE3QiwyS0FBUSxlQUFBLDZCQUFvQixDQUFBLElBQUM7SUFHL0IsaUJBQWdCO0lBQ2hCLHdFQVVNOztJQUNSLGlCQUFNLEVBQUEsRUFBQSxFQUFBO0lBTVoseUNBR3FCO0lBQ3ZCLGlCQUFNOzs7SUFod0JDLGVBTVA7SUFOTyxrS0FNUDtJQTZRTyxlQU1QO0lBTk8sK0pBTVA7SUE0UVMsZUFBc0U7SUFBdEUsNEdBQXNFO0lBVXJFLGVBQXlCO0lBQXpCLDhDQUF5QjtJQU9QLGVBQTBCO0lBQTFCLHNEQUEwQix3Q0FBQTtJQXFKeEIsZUFBaUM7SUFBakMseURBQWlDO0lBSTlCLGVBQXlCO0lBQXpCLDBEQUF5QjtJQVloQixlQUF3QjtJQUF4QixnRUFBd0I7SUFPdEQsZUFBaUM7SUFBakMsNkRBQWlDLDZCQUFBLDZCQUFBLHlDQUFBO0lBVWhDLGVBTWI7SUFOYSw0TkFNYjtJQVdJLGVBQXNCO0lBQXRCLDJDQUFzQixxQ0FBQTs7QURuc0IxQixNQUFNLE9BQU8sY0FBYztJQXdEekIsY0FBYztJQUNkLFlBQ1UsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxTQUEyQixFQUMzQixFQUFjLEVBQ2QsR0FBc0I7UUFQdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTNEaEMsWUFBTyxHQUFtQixJQUFJLENBQUM7UUFJL0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLENBQUMsQ0FBQztRQUVwQixlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFakQsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN2QixZQUFPLEdBQW9DLElBQUksQ0FBQztRQUNoRCxhQUFRLEdBQW9DLElBQUksQ0FBQztRQUNqRCxXQUFNLEdBQStDO1lBQzNELEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVU7U0FDakMsQ0FBQztRQUNLLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUd2QyxlQUFVLEdBQWdCLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXBCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQywwQkFBcUIsR0FBbUIsRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFFbEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUUzQixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDN0IsbUJBQWMsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFFbEUsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFReEIsaUNBQWlDO1FBQ2pDLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRXZDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBYXJDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxJQUFJLGFBQWEsQ0FBQztZQUN0RCwrRkFBK0YsQ0FDaEcsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTztZQUNMLHFCQUFxQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxLQUFLLElBQUk7WUFDekQsb0NBQW9DLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWM7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTztZQUNMLGFBQWEsRUFDWCxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7WUFDdkIsa0JBQWtCLEVBQ2hCLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsS0FBSyxJQUFJO1lBQ3JELGtCQUFrQixFQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVE7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRCw4Q0FBOEM7SUFFOUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxVQU1UO1FBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQzFCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFDN0IsVUFBVSxDQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQ2pELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBRTdELElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQ0UsY0FBYyxDQUFDLE9BQU8sS0FBSyxjQUFjO2dCQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQzdCO2dCQUNBLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FDVCxLQUFZLEVBQ1osV0FBd0MsRUFDeEMsV0FBbUI7UUFFbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFjLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FDdkQsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUU3QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUMzRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNmLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFFdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBVTtRQUN2QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQzlDLEtBQUssRUFDTCxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FDL0MsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVELGdEQUFnRDtJQUVoRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLEdBQU0sRUFBRSxHQUFXO1FBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQ2xDLEtBQUssRUFDTCxHQUFHLEVBQ0gsR0FBRyxFQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDMUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFpQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FDakMsS0FBSyxFQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUM3QixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjO0lBRWQsYUFBYSxDQUFDLEtBQXNDO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHdDQUF3QztJQUV4QyxlQUFlLENBQUMsR0FBVyxFQUFFLEdBQU0sRUFBRSxjQUF1QixLQUFLO1FBQy9ELE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFZLEVBQUUsSUFBWTtRQUN2QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDekMsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCx3QkFBd0I7SUFFaEIsV0FBVyxDQUFDLEdBQU0sRUFBRSxHQUFXO1FBQ3JDLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQU0sRUFBRSxHQUFXO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBTSxFQUFFLEdBQVc7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVksRUFBRSxHQUFNLEVBQUUsR0FBVyxFQUFFLFlBQXFCO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXRDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQ2hELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO2dCQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7YUFDL0I7U0FDRjtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG9CQUFvQjtJQUVwQixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN2QixXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUN6QixXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDM0IscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDckIsQ0FBQztTQUNIO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDOUMsb0ZBQW9GLENBQ3JGLENBQUM7WUFDRixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBaUIsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2lCQUNqRDtnQkFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUN6QztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRztnQkFDaEIsRUFBRSxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0I7Z0JBQ25DLElBQUksRUFBRSxjQUFjLENBQUMsa0JBQWtCO2FBQ3hDLENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ3BELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUM1QixDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ3ZEO1FBRUQsaURBQWlEO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDMUQsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FDNUIsQ0FBQztTQUNIO1FBRUQsZ0JBQWdCO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRztvQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztvQkFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7aUJBQzlCLENBQUM7YUFDSDtZQUNELElBQUksQ0FBQyxhQUFhO2lCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2pFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTlDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksRUFFbkIsQ0FBQztvQkFDZCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUN0QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVU7NEJBQ2hDLENBQUMsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFXLENBQUM7cUJBQ2hFO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtJQUVmLEtBQUssQ0FBQyxTQUFTO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3hCLENBQVEsQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRXBDLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSTtnQkFDMUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVO2dCQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVU7YUFDakM7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSTtZQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVU7WUFDaEMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVO1NBQ2pDLENBQUM7UUFFRixJQUFJLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLGNBQWMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUM7UUFFcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUN6RCxNQUFNLElBQUksR0FBRyxJQUErQixDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQVcsRUFBRTtnQkFDdEQsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3hCLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBVyxFQUFFO3dCQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN6QyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTs0QkFDdkQsT0FBTyxLQUFLLENBQUM7eUJBQ2Q7d0JBRUQsTUFBTSxjQUFjLEdBQUcsYUFBd0MsQ0FBQzt3QkFDaEUsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNqRCxJQUFJLGNBQWMsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTs0QkFDM0QsT0FBTyxLQUFLLENBQUM7eUJBQ2Q7d0JBRUQsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDOzZCQUMxQixJQUFJLEVBQUU7NkJBQ04saUJBQWlCLEVBQUU7NkJBQ25CLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUU7b0JBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO3dCQUN6RCxPQUFPLEtBQUssQ0FBQztxQkFDZDtvQkFFRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7eUJBQ3pCLElBQUksRUFBRTt5QkFDTixpQkFBaUIsRUFBRTt5QkFDbkIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLGFBQWdELFFBQVEsRUFDeEQsUUFBaUIsS0FBSztRQUV0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztTQUNqQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQzNELElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBZTtZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN2RCxVQUFVO1lBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsZUFBZSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7U0FDN0MsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBWSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBMEMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUEyQyxDQUFDO1FBRW5FLElBQUksTUFBTSxDQUFDLHNCQUFzQixLQUFLLFNBQVMsRUFBRTtZQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1NBQzdEO1FBRUQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN0QixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBRW5CLENBQUM7Z0JBQ2QsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDbEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2pFLE1BQU0sWUFBWSxHQUFHLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBWSxDQUFDO2lCQUMvRDthQUNGO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7U0FDdkI7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHFCQUFxQjtJQUVyQixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWlCO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsTUFBTSxZQUFZLEdBQUc7WUFDbkIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ25ELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQzNELEtBQUssRUFDTCxZQUFZLENBQ2IsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU87U0FDUjtRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRWxELDhCQUE4QjtRQUM5QixJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDaEM7UUFFRCxvRUFBb0U7UUFDcEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLENBQUMsVUFBVSxFQUNmLEtBQUssQ0FBQyxRQUFRLENBQ2YsQ0FBQztRQUNGLElBQUksZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztRQUUzQyxJQUNFLEtBQUssQ0FBQyxTQUFTLEtBQUssYUFBYTtZQUNqQyxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVU7WUFDbkMsVUFBVSxDQUFDLFNBQVMsRUFDcEI7WUFDQSxNQUFNLHVCQUF1QixHQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQy9DLElBQUksQ0FBQyxVQUFVLEVBQ2YsS0FBSyxDQUFDLFFBQVEsQ0FDZixDQUFDO1lBRUosSUFDRSx1QkFBdUIsR0FBRyxDQUFDO2dCQUMzQix1QkFBdUIsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUN4QztnQkFDQSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLHVCQUF1QixDQUFDO2FBQ3pDO1NBQ0Y7UUFFRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0U7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Q7Z0JBQVM7WUFDUixJQUFJLGdCQUFnQixLQUFLLElBQUksRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQzthQUNsQztTQUNGO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsd0JBQXdCO0lBRXhCLFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3RDtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUc7b0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVE7b0JBQ3JDLEtBQUssRUFBRSxLQUFLO2lCQUNiLENBQUM7YUFDSDtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFlBQVksRUFBRTtnQkFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRztvQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUTtvQkFDckMsS0FBSyxFQUFFLE1BQU07aUJBQ2QsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjO2dCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ3BFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDcEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUN4RDtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN6RCxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVztTQUMvRCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYixPQUFPLEVBQUUsRUFBRTtnQkFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07YUFDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtJQUVyQixXQUFXLENBQUMsR0FBTTtRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLE9BQU87U0FDUjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLEdBQStDLENBQUM7UUFDbEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxtQkFBbUI7SUFFbkIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUlqQjtRQUNDLElBQUk7WUFDRixJQUFJLFFBQXlELENBQUM7WUFDOUQsSUFDRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxFQUFFLEtBQUssU0FBUztnQkFDdkIsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTO2dCQUMvQixNQUFNLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFDeEI7Z0JBQ0EsUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FDbEUsQ0FBQzthQUNIO1lBQ0QsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBeUMsQ0FBQztnQkFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDL0M7WUFDRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjthQUNoRCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7YUFDN0IsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDZixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUNoQixNQUFNLFVBQVUsR0FBRyxJQUErQixDQUFDO2dCQUNuRCxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDaEQsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3pELFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtvQkFDM0MsV0FBVyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLFFBQVE7aUJBQzNELENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVKLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLE1BUXBCO1FBQ0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQStCLENBQUM7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUzthQUNsQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDdEMsR0FBRyxDQUFDLEtBQUssQ0FDUixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQ3hCLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLEdBQUcsRUFBRSxDQUFDO1FBQ1QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO2FBQzlDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQzthQUNoQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLE1BQU0sVUFBVSxHQUFHLElBQStCLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDO29CQUNuRCxJQUFJLEVBQUUsSUFBSTtvQkFDVixRQUFRLEVBQUUsR0FBRyxDQUFDLFdBQVc7aUJBQzFCLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUN6QixJQUFJLENBQUMsUUFBb0QsQ0FDMUQsQ0FBQztvQkFDSixJQUFJLGdCQUFnQixFQUFFO3dCQUNwQixNQUFNLFVBQVUsR0FBRyxJQUErQixDQUFDO3dCQUNuRCxPQUFPLGdCQUFnQixDQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7cUJBQ0g7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUVqQixLQUFLLENBQUMsV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDeEIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjthQUFNO1lBQ0wsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUksRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ3BELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUM1QixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDM0IsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQzFELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQzVCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7U0FDdkQ7UUFBQyxNQUFNO1lBQ04sT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUVoQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEQ7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7OzRFQXI2QlUsY0FBYztpRUFBZCxjQUFjO3VCQTZDZCxZQUFZO3VCQUNaLE9BQU87Ozs7OztRQzdHcEIsaUVBcXdCTTs7UUFyd0JBLCtCQUFVOzt1RkQrREgsY0FBYztjQVAxQixTQUFTOzJCQUNFLFdBQVcsY0FDVCxLQUFLLG1CQUdBLHVCQUF1QixDQUFDLE1BQU07cVFBTXRDLElBQUk7a0JBQVosS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUF3Q21CLFNBQVM7a0JBQWpDLFNBQVM7bUJBQUMsWUFBWTtZQUNILElBQUk7a0JBQXZCLFNBQVM7bUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFycmFuZ2UsXG4gIENvbmRpdGlvbixcbiAgVGFiRGF0YSxcbiAgVGFibGVEYXRhLFxuICBDb2x1bW4sXG4gIFRBQkxFX0RFRkFVTFRTLFxuICBEcm9wZG93bkl0ZW0sXG4gIEZpbHRlclNlbGVjdEl0ZW0sXG4gIFBhZ2luYXRpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzL1RhYmxlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJGaXJlc3RvcmUsXG4gIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvZmlyZXN0b3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwU2VydmljZSwgVG9vbHRpcFN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldERpc3BsYXlWYWx1ZSxcbiAgZ2V0TmVzdGVkVmFsdWUsXG4gIGlzU3RyaW5nLFxuICB0cmFja0J5UHJvcGVydHksXG4gIGdldEltYWdlS2V5LFxufSBmcm9tICcuLi8uLi91dGlscy90YWJsZS51dGlscyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckJ5RGlyZWN0aW9uIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xuaW1wb3J0IFdoZXJlRmlsdGVyT3AgPSBmaXJlYmFzZS5maXJlc3RvcmUuV2hlcmVGaWx0ZXJPcDtcbmltcG9ydCBmaXJlc3RvcmUgPSBmaXJlYmFzZS5maXJlc3RvcmU7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIC8vIElOUFVUU1xuICBASW5wdXQoKSBkYXRhITogVGFibGVEYXRhO1xuICBASW5wdXQoKSBkb3dubG9hZFRhYmxlPzogKGFycmFuZ2U6IEFycmFuZ2UsIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdKSA9PiB2b2lkO1xuICBhcnJhbmdlOiBBcnJhbmdlIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gVkFSSUFCTEVTXG4gIGRhdGFTb3VyY2UhOiBNYXRUYWJsZURhdGFTb3VyY2U8VD47XG4gIGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcbiAgY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XG5cbiAgcHVibGljIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgaXRlbXM6IFRbXSA9IFtdO1xuICBwdWJsaWMgZmlsdGVyZWRJdGVtczogVFtdID0gW107XG4gIHByaXZhdGUgbGFzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmlyc3REb2M6IFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNvcnRCeTogeyBmaWVsZDogc3RyaW5nOyBvcmRlcjogT3JkZXJCeURpcmVjdGlvbiB9ID0ge1xuICAgIGZpZWxkOiBUQUJMRV9ERUZBVUxUUy5TT1JUX0ZJRUxELFxuICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICB9O1xuICBwdWJsaWMgY29sdW1uUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblxuICBmaWx0ZXJzRm9ybTogRm9ybUFycmF5O1xuICBzZWxlY3RTb3J0OiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIGN1cnJlbnRBcnJhbmdlID0gJyc7XG5cbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZHJvcGRvd25JdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcbiAgc29ydGFibGVEcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBwYWdlU2l6ZSA9IFRBQkxFX0RFRkFVTFRTLlBBR0VfU0laRTtcbiAgdG90YWxJdGVtcyA9IDA7XG4gIHBhZ2VFdmVudD86IFBhZ2VFdmVudDtcbiAgZmlsdGVyVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGhhc0ZpbHRlcmFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGFzU29ydGFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyUHJlZGljYXRlOiAoKGRhdGE6IFQsIGZpbHRlcjogc3RyaW5nKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVGltZU1zID0gVEFCTEVfREVGQVVMVFMuREVCT1VOQ0VfVElNRV9NUztcblxuICBzZWxlY3RlZFRhYjogbnVtYmVyID0gMDtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xuXG4gIC8vIFByb3ByaWVkYWRlcyBwYXJhIGNvbnRyb2xlIGRvIHRvb2x0aXBcbiAgdG9vbHRpcFN0YXRlOiBUb29sdGlwU3RhdGU7XG5cbiAgLy8gQ29udHJvbGUgZGUgbG9hZGluZyBkZSBpbWFnZW5zXG4gIGltYWdlTG9hZGluZ1N0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gQ09OU1RSVUNUT1JcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHRhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2x0aXBTZXJ2aWNlOiBUb29sdGlwU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogQW5ndWxhckZpcmVzdG9yZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5maWx0ZXJzRm9ybSA9IG5ldyBGb3JtQXJyYXkoW3RoaXMuZmlsdGVyU2VydmljZS5jcmVhdGVGaWx0ZXJHcm91cCgpXSk7XG4gICAgdGhpcy50b29sdGlwU3RhdGUgPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLmNyZWF0ZUluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuZGF0YT8uYWN0aW9uQnV0dG9uPy5jb2xvckNsYXNzIHx8ICdiZy1ibHVlLTUwMCcpICtcbiAgICAgICcgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIGhvdmVyOm9wYWNpdHktNzAnXG4gICAgKTtcbiAgfVxuXG4gIGdldFRhYmxlUm93TmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93JzogdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSA9PT0gdHJ1ZSxcbiAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93IGN1cnNvci1wb2ludGVyJzogIXRoaXMuZGF0YT8uaXNOb3RDbGlja2FibGUsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBhZ2luYXRvck5nQ2xhc3MoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAnaGlkZS1sZW5ndGgnOlxuICAgICAgICBbJ2ZpbHRlcicsICdmaWx0ZXJCeURhdGUnLCAnZXF1YWxzJ10uaW5jbHVkZXModGhpcy5jdXJyZW50QXJyYW5nZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgICAgJ2hpZGUtbmV4dC1idXR0b24nOlxuICAgICAgICAhdGhpcy5oYXNOZXh0UGFnZSAmJiB0aGlzLmRhdGE/LnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICAnaGlkZS1sYXN0LWJ1dHRvbic6XG4gICAgICAgICghdGhpcy5oYXNOZXh0UGFnZSAmJiB0aGlzLmRhdGE/LnBhZ2luYXRpb24gPT09IHRydWUpIHx8XG4gICAgICAgICEhdGhpcy5kYXRhPy5maWx0ZXJGbixcbiAgICB9O1xuICB9XG5cbiAgLy8gRklMVEVSIE1FVEhPRFMgKGRlbGVnYWRvcyBhbyBGaWx0ZXJTZXJ2aWNlKVxuXG4gIGNyZWF0ZUZpbHRlckdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5jcmVhdGVGaWx0ZXJHcm91cCgpO1xuICB9XG5cbiAgYWRkRmlsdGVyKGZpbHRlckRhdGE/OiB7XG4gICAgc2VsZWN0RmlsdGVyOiBEcm9wZG93bkl0ZW0gfCBudWxsO1xuICAgIHR5cGVGaWx0ZXI/OiBzdHJpbmc7XG4gICAgc2VsZWN0SXRlbT86IEZpbHRlclNlbGVjdEl0ZW1bXTtcbiAgICBpbml0aWFsRGF0ZT86IHN0cmluZztcbiAgICBmaW5hbERhdGU/OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyKFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgZmlsdGVyRGF0YSxcbiAgICApO1xuICB9XG5cbiAgaGFzQWN0aXZlRGF0ZUZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmhhc0FjdGl2ZURhdGVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKCk6IERyb3Bkb3duSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoXG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICB0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0RmlsdGVyQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0RmlsdGVyID0gdGhpcy5maWx0ZXJzRm9ybS5hdChsYXN0SW5kZXgpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyID0gbGFzdEZpbHRlci5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZTtcblxuICAgIGlmIChzZWxlY3RlZEZpbHRlcikge1xuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZEZpbHRlci5hcnJhbmdlID09PSAnZmlsdGVyQnlEYXRlJyAmJlxuICAgICAgICB0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlRmlsdGVyKHRoaXMuZmlsdGVyc0Zvcm0sIGluZGV4KTtcbiAgfVxuXG4gIHJlbW92ZUFsbEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlbW92ZUFsbEZpbHRlcnModGhpcy5maWx0ZXJzRm9ybSk7XG4gICAgdGhpcy5yZXNldEZpbHRlcigpO1xuICB9XG5cbiAgb25EYXRlSW5wdXQoXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGNvbnRyb2xOYW1lOiAnaW5pdGlhbERhdGUnIHwgJ2ZpbmFsRGF0ZScsXG4gICAgZmlsdGVySW5kZXg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGZpbHRlckluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5RGF0ZU1hc2soZXZlbnQsIGNvbnRyb2xOYW1lLCBmaWx0ZXJHcm91cCk7XG4gIH1cblxuICBvbkRhdGVGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKFxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgICB0aGlzLnNvcnRCeSxcbiAgICAgICk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnNUb0RhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHJldHVybjtcblxuICAgIGxldCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnM8VD4oXG4gICAgICBbLi4udGhpcy5pdGVtc10sXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkSXRlbXM7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNsaWVudFNpZGVGaWx0ZXJzKGl0ZW1zOiBUW10pOiBUW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIGl0ZW1zLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuc29ydEJ5LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk6IEFycmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPT0xUSVAgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIFRvb2x0aXBTZXJ2aWNlKVxuXG4gIGdldFRvb2x0aXBTdHlsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHRpcFNlcnZpY2UuZ2V0VG9vbHRpcFN0eWxlcyh0aGlzLnRvb2x0aXBTdGF0ZSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IFQsIGNvbDogQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZUVudGVyKFxuICAgICAgZXZlbnQsXG4gICAgICByb3csXG4gICAgICBjb2wsXG4gICAgICAoYywgciwgdykgPT4gdGhpcy5nZXREaXNwbGF5VmFsdWUoYywgciwgdyksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCAuLi5zdGF0ZSB9O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZUxlYXZlKChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25DZWxsTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZU1vdmUoXG4gICAgICBldmVudCxcbiAgICAgIHRoaXMudG9vbHRpcFN0YXRlLnNob3dUb29sdGlwLFxuICAgICAgKHBvc2l0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbHRpcFN0YXRlID0geyAuLi50aGlzLnRvb2x0aXBTdGF0ZSwgdG9vbHRpcFBvc2l0aW9uOiBwb3NpdGlvbiB9O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRBQiBNRVRIT0RTXG5cbiAgb25UYWJTZWxlY3RlZChldmVudDogeyB0YWI6IFRhYkRhdGE7IGluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhLnRhYnM/Lm1ldGhvZCkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSBldmVudC5pbmRleDtcbiAgICB0aGlzLmRhdGEudGFicy5tZXRob2QoZXZlbnQudGFiLCBldmVudC5pbmRleCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBVVElMSVRZIE1FVEhPRFMgKGRlbGVnYWRvcyBhb3MgdXRpbHMpXG5cbiAgZ2V0RGlzcGxheVZhbHVlKGNvbDogQ29sdW1uLCByb3c6IFQsIHdpdGhpbkxpbWl0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHdpdGhpbkxpbWl0KTtcbiAgfVxuXG4gIGdldE5lc3RlZFZhbHVlKG9iajogdW5rbm93biwgcGF0aDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIGdldE5lc3RlZFZhbHVlKG9iaiwgcGF0aCk7XG4gIH1cblxuICBpc1N0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSk7XG4gIH1cblxuICB0cmFja0J5UHJvcGVydHkoX2luZGV4OiBudW1iZXIsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhY2tCeVByb3BlcnR5KF9pbmRleCwgY29sKTtcbiAgfVxuXG4gIC8vIElNQUdFIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgZ2V0SW1hZ2VLZXkocm93OiBULCBjb2w6IENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgfVxuXG4gIGlzSW1hZ2VMb2FkaW5nKHJvdzogVCwgY29sOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICByZXR1cm4gIXRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuaGFzKGtleSk7XG4gIH1cblxuICBvbkltYWdlTG9hZChyb3c6IFQsIGNvbDogQ29sdW1uKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSW1hZ2VFcnJvcihldmVudDogRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4sIGRlZmF1bHRJbWFnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuc2V0KGtleSwgdHJ1ZSk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpZiAoZGVmYXVsdEltYWdlKSB7XG4gICAgICAgIHRhcmdldC5zcmMgPSBkZWZhdWx0SW1hZ2U7XG4gICAgICAgIHRhcmdldC5vbmVycm9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gTElGRUNZQ0xFIE1FVEhPRFNcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFwcGx5Q3VzdG9tQ29sb3JzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5Q3VzdG9tQ29sb3JzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q3VzdG9tQ29sb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbD8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvc3RFbGVtZW50IHx8ICF0aGlzLmRhdGEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LmJnKSB7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS1jb2xvcicsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS1oZWFkZXItYmcnLCB0aGlzLmRhdGEuY29sb3IuYmcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy50ZXh0KSB7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS10ZXh0LWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLnRleHQpO1xuICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLXRhYmxlLWhlYWRlci10ZXh0JyxcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yLnRleHQsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyQ2VsbHMgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnLm1hdC1oZWFkZXItY2VsbCwgLm1hdC1tZGMtaGVhZGVyLWNlbGwsIHRoLm1hdC1oZWFkZXItY2VsbCwgdGgubWF0LW1kYy1oZWFkZXItY2VsbCcsXG4gICAgICApO1xuICAgICAgaGVhZGVyQ2VsbHMuZm9yRWFjaCgoY2VsbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGF0YS5jb2xvci5iZztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy50ZXh0KSB7XG4gICAgICAgICAgY2VsbC5zdHlsZS5jb2xvciA9IHRoaXMuZGF0YS5jb2xvci50ZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5kYXRhLmNvbG9yKSB7XG4gICAgICB0aGlzLmRhdGEuY29sb3IgPSB7XG4gICAgICAgIGJnOiBUQUJMRV9ERUZBVUxUUy5ERUZBVUxUX0JHX0NPTE9SLFxuICAgICAgICB0ZXh0OiBUQUJMRV9ERUZBVUxUUy5ERUZBVUxUX1RFWFRfQ09MT1IsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLnNob3dTaW1wbGVTZWFyY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYXRhLnNob3dTaW1wbGVTZWFyY2ggPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eSxcbiAgICApO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5hY3Rpb25CdXR0b24gJiYgIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XG4gICAgICB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbiA9IChfcm93PzogVCkgPT4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJbmljaWFsaXphciBkcm9wZG93bkl0ZW1zIHVzYW5kbyBGaWx0ZXJTZXJ2aWNlXG4gICAgY29uc3QgZmlsdGVyQ29uZmlnID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmluaXRpYWxpemVEcm9wZG93bkl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMsXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuZHJvcGRvd25JdGVtcztcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5zb3J0YWJsZURyb3Bkb3duSXRlbXM7XG4gICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc0ZpbHRlcmFibGVDb2x1bW47XG4gICAgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9IGZpbHRlckNvbmZpZy5oYXNTb3J0YWJsZUNvbHVtbjtcblxuICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXJhYmxlT3B0aW9ucyhcbiAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLFxuICAgICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFNlbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBDb20gcGFnaW5hw6fDo29cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkLFxuICAgICAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0XG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZU1zKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gJ2NyZWF0ZWRBdCc7XG4gICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xuICAgICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgICBmb3IgKGNvbnN0IHRvdGFsUmVmIG9mIHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgICAgIGNvbnN0IHRvdGFsUmVmRG9jID0gYXdhaXQgdG90YWxSZWYucmVmLmdldCgpO1xuICAgICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChkb2NEYXRhICYmIGRvY0RhdGFbdG90YWxSZWYuZmllbGRdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YVt0b3RhbFJlZi5maWVsZF07XG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAodGhpcy50b3RhbEl0ZW1zICtcbiAgICAgICAgICAgICAgKHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwKSkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gREFUQSBMT0FESU5HIE1FVEhPRFNcblxuICBwcml2YXRlIGFzeW5jIGxvYWRJdGVtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLmNsZWFyKCk7XG4gICAgdGhpcy5pdGVtcyA9IChhd2FpdCB0aGlzLnRhYmxlU2VydmljZS5nZXRJdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5jb2xsZWN0aW9uUmVmLFxuICAgICkpIGFzIFRbXTtcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtcy5sZW5ndGg7XG5cbiAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNvcnRCeTogdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICAgIGZpZWxkOiBUQUJMRV9ERUZBVUxUUy5TT1JUX0ZJRUxELFxuICAgICAgICBvcmRlcjogVEFCTEVfREVGQVVMVFMuU09SVF9PUkRFUixcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLnNvcnRCeSA9IHRoaXMuZGF0YS5zb3J0QnkgfHwge1xuICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICBvcmRlcjogVEFCTEVfREVGQVVMVFMuU09SVF9PUkRFUixcbiAgICB9O1xuXG4gICAgbGV0IGl0ZW1zVG9EaXNwbGF5ID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgIGl0ZW1zVG9EaXNwbGF5ID0gdGhpcy5hcHBseUNsaWVudFNpZGVGaWx0ZXJzKGl0ZW1zVG9EaXNwbGF5KTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtc1RvRGlzcGxheTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICBpZiAodGhpcy5kYXRhLnNvcnRCeSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuYWN0aXZlID0gdGhpcy5kYXRhLnNvcnRCeS5maWVsZDtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LmRpcmVjdGlvbiA9IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXI7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5zb3J0Q2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGRhdGEsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5zb21lKChjb2wpOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKGNvbC5maWx0ZXJQcmVkaWNhdGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5maWx0ZXJQcmVkaWNhdGVzLnNvbWUoKHByZWRpY2F0ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGl0ZW1bY29sLnByb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHlWYWx1ZSB8fCB0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlY29yZCA9IHByb3BlcnR5VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVWYWx1ZSA9IHByb3BlcnR5UmVjb3JkW3ByZWRpY2F0ZV07XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlVmFsdWUgPT09IG51bGwgfHwgcHJlZGljYXRlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocHJlZGljYXRlVmFsdWUpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLnByb3BlcnR5ICYmIGNvbC5pc0ZpbHRlcmFibGUpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSBudWxsIHx8IHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBTdHJpbmcocHJvcGVydHlWYWx1ZSlcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zUGFnaW5hdGVkKFxuICAgIG5hdmlnYXRpb246ICdyZWxvYWQnIHwgJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJyA9ICdyZWxvYWQnLFxuICAgIHJlc2V0OiBib29sZWFuID0gZmFsc2UsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICBpZiAocmVzZXQgJiYgWydmb3J3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XG4gICAgICB0aGlzLmxhc3REb2MgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcbiAgICB9XG4gICAgaWYgKHJlc2V0ICYmIFsnYmFja3dhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcbiAgICAgIHRoaXMuZmlyc3REb2MgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmV4dHJhY3RBY3RpdmVGaWx0ZXJzKFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICApO1xuXG4gICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgZmlsdGVyczogYWN0aXZlRmlsdGVycyxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2luYXRlZDogUGFnaW5hdGlvbiA9IHtcbiAgICAgIGJhdGNoU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMuZGF0YS5jb2xsZWN0aW9uLFxuICAgICAgZG9jOiB7IGxhc3REb2M6IHRoaXMubGFzdERvYywgZmlyc3REb2M6IHRoaXMuZmlyc3REb2MgfSxcbiAgICAgIG5hdmlnYXRpb24sXG4gICAgICBhcnJhbmdlOiB0aGlzLmFycmFuZ2UhLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5kYXRhLmNvbmRpdGlvbnMsXG4gICAgICBzaXplOiB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICBmaWx0ZXJGbjogdGhpcy5kYXRhLmZpbHRlckZuLFxuICAgICAgY2xpZW50UGFnZUluZGV4OiB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldFBhZ2luYXRlZChwYWdpbmF0ZWQpO1xuICAgIHRoaXMuaXRlbXMgPSByZXN1bHQuaXRlbXMgYXMgVFtdO1xuICAgIGF3YWl0IHRoaXMubG9hZFJlbGF0aW9ucygpO1xuICAgIGF3YWl0IHRoaXMubG9hZFF1ZXJ5TGVuZ3RocygpO1xuICAgIHRoaXMubGFzdERvYyA9IHJlc3VsdC5sYXN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG4gICAgdGhpcy5maXJzdERvYyA9IHJlc3VsdC5maXJzdERvYyBhcyBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsO1xuXG4gICAgaWYgKHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4O1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGlmICh0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVmRG9jID0gYXdhaXQgdG90YWxSZWYucmVmLmdldCgpO1xuICAgICAgICBjb25zdCBkb2NEYXRhID0gdG90YWxSZWZEb2MuZGF0YSgpIGFzXG4gICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZG9jRGF0YSB8fCByZXN1bHQuZmlsdGVyTGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGRvY0RhdGEgPyBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ251bWJlcicgPyBmaWVsZFZhbHVlIDogMDtcbiAgICAgICAgICBzdW0gPSByZXN1bHQuZmlsdGVyTGVuZ3RoID8/ICgoc3VtICsgbnVtZXJpY1ZhbHVlKSBhcyBudW1iZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSBzdW07XG4gICAgfVxuXG4gICAgdGhpcy5oYXNOZXh0UGFnZSA9IHJlc3VsdC5oYXNOZXh0UGFnZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuaXRlbXMpO1xuICAgIHRoaXMuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFBBR0lOQVRJT04gTUVUSE9EU1xuXG4gIGFzeW5jIG9uUGFnZUNoYW5nZShldmVudD86IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiAhPT0gdHJ1ZSB8fCAhZXZlbnQpIHJldHVybjtcblxuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgY3VycmVudFN0YXRlID0ge1xuICAgICAgY3VycmVudFBhZ2VOdW1iZXI6IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4OiB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGhhc05leHRQYWdlOiB0aGlzLmhhc05leHRQYWdlLFxuICAgIH07XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVOYXZpZ2F0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBjdXJyZW50U3RhdGUsXG4gICAgKTtcblxuICAgIGlmICghbmF2aWdhdGlvbi5zaG91bGROYXZpZ2F0ZSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBdHVhbGl6YXIgZXN0YWRvIGxvY2FsXG4gICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gbmF2aWdhdGlvbi5uZXdDbGllbnRQYWdlSW5kZXg7XG4gICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IG5hdmlnYXRpb24ubmV3UGFnZU51bWJlcjtcblxuICAgIC8vIEF0dWFsaXphciBwYWdlU2l6ZSBzZSBtdWRvdVxuICAgIGlmIChldmVudC5wYWdlU2l6ZSAhPT0gdGhpcy5wYWdlU2l6ZSkge1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xuICAgIH1cblxuICAgIC8vIEFqdXN0YXIgcGFnZVNpemUgdGVtcG9yYXJpYW1lbnRlIHBhcmEgw7psdGltYSBww6FnaW5hIHNlIG5lY2Vzc8OhcmlvXG4gICAgY29uc3QgbGFzdFBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlTGFzdFBhZ2VJbmRleChcbiAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGV2ZW50LnBhZ2VTaXplLFxuICAgICk7XG4gICAgbGV0IG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnQucGFnZUluZGV4ID09PSBsYXN0UGFnZUluZGV4ICYmXG4gICAgICBuYXZpZ2F0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyAmJlxuICAgICAgbmF2aWdhdGlvbi5yZXNldERvY3NcbiAgICApIHtcbiAgICAgIGNvbnN0IGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID1cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUl0ZW1Db3VudChcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPiAwICYmXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlIDwgZXZlbnQucGFnZVNpemVcbiAgICAgICkge1xuICAgICAgICBvcmlnaW5hbFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZChuYXZpZ2F0aW9uLmRpcmVjdGlvbiwgbmF2aWdhdGlvbi5yZXNldERvY3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGNhcnJlZ2FyIGl0ZW5zIHBhZ2luYWRvczonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChvcmlnaW5hbFBhZ2VTaXplICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBvcmlnaW5hbFBhZ2VTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGFnZUV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gRklMVEVSL1NFQVJDSCBNRVRIT0RTXG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZmlsdGVyU3ViamVjdC5uZXh0KHRoaXMuZmlsdGVyVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnYXNjZW5kaW5nJykge1xuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5zZWxlY3RTb3J0LnZhbHVlLnByb3BlcnR5LFxuICAgICAgICAgIG9yZGVyOiAnYXNjJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2Rlc2NlbmRpbmcnKSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXG4gICAgICAgICAgb3JkZXI6ICdkZXNjJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9XG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMFxuICAgICAgICAgID8gKHRoaXMuZmlsdGVyc0Zvcm0uYXQoMCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPz8gJycpXG4gICAgICAgICAgOiAnJztcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID1cbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPiAwXG4gICAgICAgICAgPyAodGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJylcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXNldEZpbHRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XG4gICAgaWYgKHRoaXMuZmlsdGVyUHJlZGljYXRlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5maWx0ZXJQcmVkaWNhdGU7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jbGVhcigpO1xuICAgIHRoaXMuYWRkRmlsdGVyKCk7XG4gICAgdGhpcy5zZWxlY3RTb3J0LnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyIDogJ2Rlc2MnLFxuICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkIDogJ2NyZWF0ZWRBdCcsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICB9O1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4udGhpcy5pdGVtc107XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID0gJyc7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5BVklHQVRJT04gTUVUSE9EU1xuXG4gIGdvVG9EZXRhaWxzKHJvdzogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuaXNOb3RDbGlja2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuZGF0YS51cmwgfHwgdGhpcy5kYXRhLm5hbWU7XG4gICAgY29uc3Qgcm93V2l0aElkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBpZDogc3RyaW5nIH07XG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbYC8ke3VybFBhdGh9YCwgcm93V2l0aElkLmlkXSksXG4gICAgKTtcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgfVxuXG4gIC8vIFJFTEFUSU9OIE1FVEhPRFNcblxuICBhc3luYyBnZXRSZWxhdGlvbihwYXJhbXM6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbGxlY3Rpb246IHN0cmluZztcbiAgICBuZXdQcm9wZXJ0eTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNuYXBzaG90OiBmaXJlc3RvcmUuRG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChcbiAgICAgICAgcGFyYW1zLmlkICE9PSAnJyAmJlxuICAgICAgICBwYXJhbXMuaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHNuYXBzaG90ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5maXJlc3RvcmUuY29sbGVjdGlvbihwYXJhbXMuY29sbGVjdGlvbikuZG9jKHBhcmFtcy5pZCkuZ2V0KCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YT8uW3BhcmFtcy5uZXdQcm9wZXJ0eV07XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZWxhdGlvblByb21pc2VzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbGF0aW9uKVxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cbiAgICAgICAgdGhpcy5pdGVtcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoY29sLnJlbGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29sLnByb3BlcnR5XSA9IGF3YWl0IHRoaXMuZ2V0UmVsYXRpb24oe1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKGl0ZW1SZWNvcmRbY29sLnJlbGF0aW9uLnNvdXJjZVByb3BlcnR5XSA/PyAnJyksXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbC5yZWxhdGlvbi50YXJnZXRlZENvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnR5OiBjb2wucmVsYXRpb24udGFyZ2V0ZWRQcm9wZXJ0eSB8fCBjb2wucHJvcGVydHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbGF0aW9uUHJvbWlzZXMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UXVlcnlMZW5ndGgocGFyYW1zOiB7XG4gICAgaXRlbTogVDtcbiAgICByZWxhdGlvbjoge1xuICAgICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgICAgcHJvcGVydHk6IHN0cmluZztcbiAgICAgIG9wZXJhdG9yOiBXaGVyZUZpbHRlck9wO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9O1xuICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBpdGVtUmVjb3JkID0gcGFyYW1zLml0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZVxuICAgICAgLmNvbGxlY3Rpb24ocGFyYW1zLnJlbGF0aW9uLmNvbGxlY3Rpb24pXG4gICAgICAucmVmLndoZXJlKFxuICAgICAgICBwYXJhbXMucmVsYXRpb24ucHJvcGVydHksXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5vcGVyYXRvcixcbiAgICAgICAgaXRlbVJlY29yZFtwYXJhbXMucmVsYXRpb24udmFsdWVdLFxuICAgICAgKVxuICAgICAgLmdldCgpO1xuICAgIHJldHVybiBzbmFwc2hvdC5zaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUXVlcnlMZW5ndGhzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxlbmd0aFByb21pc2VzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnF1ZXJ5TGVuZ3RoKVxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cbiAgICAgICAgdGhpcy5pdGVtcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoY29sLnF1ZXJ5TGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29sLnByb3BlcnR5XSA9IGF3YWl0IHRoaXMuZ2V0UXVlcnlMZW5ndGgoe1xuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICByZWxhdGlvbjogY29sLnF1ZXJ5TGVuZ3RoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobGVuZ3RoUHJvbWlzZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuZGF0YS5jb25kaXRpb25zLmZvckVhY2goKGNvbmQpID0+IHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3BlcmF0b3JGdW5jdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5vcGVyYXRvcnNbXG4gICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgYXMga2V5b2YgdHlwZW9mIHRoaXMudGFibGVTZXJ2aWNlLm9wZXJhdG9yc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JGdW5jdGlvbihcbiAgICAgICAgICAgICAgaXRlbVJlY29yZFtjb25kLmZpcmVzdG9yZVByb3BlcnR5XSxcbiAgICAgICAgICAgICAgY29uZC5kYXNoUHJvcGVydHksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUFVCTElDIE1FVEhPRFNcblxuICBhc3luYyByZWxvYWRUYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGlzcGxheWVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtblByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHksXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbHRlckNvbmZpZyA9IHRoaXMuZmlsdGVyU2VydmljZS5pbml0aWFsaXplRHJvcGRvd25JdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICk7XG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLmRyb3Bkb3duSXRlbXM7XG4gICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuc29ydGFibGVEcm9wZG93bkl0ZW1zO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2hvdWxkU2hvd0FjdGlvbkJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0YT8uYWN0aW9uQnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbihudWxsKSA/PyB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRG93bmxvYWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvd25sb2FkVGFibGUpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YSkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmFuZ2UgPSB0aGlzLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk7XG4gICAgICB0aGlzLmRvd25sb2FkVGFibGUoYXJyYW5nZSwgdGhpcy5kYXRhLmNvbmRpdGlvbnMgfHwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hcnJhbmdlKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRUYWJsZSh0aGlzLmFycmFuZ2UsIHRoaXMuZGF0YS5jb25kaXRpb25zIHx8IFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJkYXRhXCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC02XCI+XG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUw6IEZJTFRFUlMsIFNPUlQgJiBBQ1RJT05TIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlICYmXG4gICAgICAgIChkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTT1JUIEZJRUxEIChJbnRlZ3JhdGVkIHdpdGggZmlsdGVycykgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNFwiICpuZ0lmPVwic29ydGFibGVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyBwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc29ydC1hbHBoYS1kb3duIHRleHQtY3lhbi02MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+T3JkZW5hciBwb3I8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiIFtmb3JtQ29udHJvbF09XCJzZWxlY3RTb3J0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNvcnRhYmxlRHJvcGRvd25JdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc29ydC1hbHBoYS1kb3duIHRleHQtY3lhbi02MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBDT05URU5UIChXSVRIIFJFRklORU1FTlRTKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyBwLTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBGSUxURVIgVFlQRSBTRUxFQ1RPUiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRlIGZpbHRybzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWNvbiB8fCAnZmEgZmEtZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBURVhUIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gREFURSBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBGaW5hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSRU1PVkUgRklMVEVSIEJVVFRPTiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQQU5FTCBGT09URVI6IEFkZCBGaWx0ZXIgJiBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCItbWItMiBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmFuc2Zvcm0gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTUwIHB4LTYgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWJsdWUtNDAwIGhvdmVyOmJnLWJsdWUtMTAwIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbXItMlwiPjwvaT5cbiAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBTZWFyY2gsIFJlc2V0LCBFeHBvcnQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8IHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPT09IHRydWVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWdyZWVuLTYwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyZWVuLTcwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaW1wYXIgZmlsdHJvc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICBSZXNldGFyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuZG93bmxvYWQgIT09IGZhbHNlICYmIGRvd25sb2FkVGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBUYWJlbGFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGFueShhcnJhbmdlKSAmJiBkb3dubG9hZFRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRvd25sb2FkVGFibGUoJGFueShhcnJhbmdlKSwgZGF0YS5jb25kaXRpb25zIHx8IFtdKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9pPlxuICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMIChmb3Igbm9uLXBhZ2luYXRlZCB0YWJsZXMpOiBTRUFSQ0gsIFNPUlQgJiBGSUxURVJTIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSAmJlxuICAgICAgICAoaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTSU1QTEUgU0VBUkNIIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAqbmdJZj1cImhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgJiYgZGF0YS5zaG93U2ltcGxlU2VhcmNoICE9PSBmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgQnVzY2FyXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcihmaWx0ZXJJbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgIC8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBQQU5FTCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1ncmF5LTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJGaWx0cmFyXCJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRFJPUERPV04gRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXG4gICAgICAgICAgICAgICAgICAuZ2V0KCdzZWxlY3RGaWx0ZXInKVxuICAgICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEQVRFIEZJTFRFUiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPT09XG4gICAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgdGV4dC1ncmF5LTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbml0aWFsRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEZpbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRGF0ZUZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcnNGb3JtLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1sLWF1dG8gZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGgtMTAgdy0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCBob3ZlcjpiZy1yZWQtMTAwXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCB0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIEFjdGlvbnMgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkaWNpb25hciBub3ZvIGZpbHRyb1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxuICAgICAgICAgICAgICBBZGljaW9uYXIgRmlsdHJvXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMyBzZWxmLXN0YXJ0IHNtOnNlbGYtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFwbGljYXIgZmlsdHJvc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICBQZXNxdWlzYXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpbXBhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICAgIFJlc2V0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1vcmFuZ2UtNTAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctb3JhbmdlLTYwMFwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRG93bmxvYWQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICAgIEV4cG9ydGFyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICA8IS0tIFRBQlMgQ09NUE9ORU5UIC0tPlxuICAgICAgPGxpYi10YWJsZS10YWJzXG4gICAgICAgICpuZ0lmPVwiZGF0YS50YWJzICYmIGRhdGEudGFicy50YWJzRGF0YSAmJiBkYXRhLnRhYnMudGFic0RhdGEubGVuZ3RoID4gMFwiXG4gICAgICAgIFt0YWJzRGF0YV09XCJkYXRhLnRhYnMudGFic0RhdGFcIlxuICAgICAgICBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICAodGFiU2VsZWN0ZWQpPVwib25UYWJTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgID48L2xpYi10YWJsZS10YWJzPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggdy1mdWxsIG92ZXJmbG93LXgtYXV0byByb3VuZGVkLXhsIHRhYmxlLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIG1hdC10YWJsZVxuICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgICAgIG1hdFNvcnRcbiAgICAgICAgICAjc29ydD1cIm1hdFNvcnRcIlxuICAgICAgICAgIG1hdFNvcnRBY3RpdmU9XCJjcmVhdGVkQXRcIlxuICAgICAgICAgIG1hdFNvcnREaXJlY3Rpb249XCJkZXNjXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgZGF0YS5kaXNwbGF5ZWRDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5UHJvcGVydHlcIlxuICAgICAgICAgICAgbWF0Q29sdW1uRGVmPVwie3sgY29sLnByb3BlcnR5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICA8IS0tIElGIFRIRSBDT0xVTU4gSVMgTk9UIFNPUlRBQkxFLCBUSEVOIERPTidUIFNIT1cgVEhFIFNPUlQgQlVUVE9OUyAtLT5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmlzU29ydGFibGUgfHwgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8IS0tIElGIFRIRSBDT0xVTU4gSVMgU09SVEFCTEUsIFRIRU4gU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pc1NvcnRhYmxlICYmIGRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sLm1ldGhvZCA/IGNvbC5tZXRob2Qocm93KSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uQ2VsbE1vdXNlRW50ZXIoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uQ2VsbE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbW92ZSk9XCJvbkNlbGxNb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8IS0tIENIRUNLIElGIFRIRSBDT0xVTU4gTVVTVCBCRSBESVNQTEFZRUQgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLmltYWdlICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hhckxpbWl0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2wucHJvcGVydHldICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2wucHJvcGVydHldLmxlbmd0aCA+IGNvbC5jaGFyTGltaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpdGhpbkxpbWl0XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiY29sLmhhc0xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICE9PSB0cnVlICYmICFpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoaW5MaW1pdD5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgJiYgaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHRydWUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSBJTUFHRSAtLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS5wYXRoICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIzMlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBtLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY29sLmltYWdlLnBhdGggKyAnLycgKyByb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2VtIGNvbSBVUkwgY29tcGxldGEgZSBsb2FkaW5nIC0tPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5pbWFnZSAmJiBjb2wuaW1hZ2UudXJsICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIzMlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBtLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2wuaW1hZ2UuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkltYWdlRXJyb3IoJGV2ZW50LCByb3csIGNvbCwgY29sLmltYWdlLmRlZmF1bHQpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pY29uQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGljb25DbGFzcyBvZiBjb2wuaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcy5idXR0b25NZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZChyb3csICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaWNvbkNsYXNzLmNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRhbnkoaWNvbkNsYXNzLmNvbmRpdGlvbikocm93KSlcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID57eyBpY29uQ2xhc3MudGV4dCB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5Qcm9wZXJ0aWVzXCI+PC90cj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlUm93TmdDbGFzcygpXCJcbiAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5Qcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvRGV0YWlscyhyb3cpXCJcbiAgICAgICAgICA+PC90cj5cblxuICAgICAgICAgIDwhLS0gUk9XIFNIT1dOIFdIRU4gVEhFUkUgSVMgTk8gTUFUQ0hJTkcgREFUQS4gLS0+XG4gICAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICptYXROb0RhdGFSb3c+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhKGlzTG9hZGluZyQgfCBhc3luYylcIiBjbGFzcz1cIm1hdC1jZWxsIHAtNFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgIE5lbmh1bSByZXN1bHRhZG8gZW5jb250cmFkbyBwYXJhIGEgYnVzY2FcbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90YWJsZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3ItY29udGFpbmVyXCI+XG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgICAgICNwYWdpbmF0b3JcbiAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzI1LCA1MCwgMTAwXVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHBhZ2Ugb2YgcGVyaW9kaWMgZWxlbWVudHNcIlxuICAgICAgICAgICAgKHBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0UGFnaW5hdG9yTmdDbGFzcygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICEoaXNMb2FkaW5nJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlPy5kYXRhICYmXG4gICAgICAgICAgICAgIGRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIGRhdGE/LmZpbHRlckZuXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW51bWJlci1kaXNwbGF5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBjdXJyZW50UGFnZU51bWJlciB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRPT0xUSVAgUEVSU09OQUxJWkFETyAtLT5cbiAgPGxpYi10YWJsZS10b29sdGlwXG4gICAgW3N0YXRlXT1cInRvb2x0aXBTdGF0ZVwiXG4gICAgW3N0eWxlc109XCJnZXRUb29sdGlwU3R5bGVzKClcIlxuICA+PC9saWItdGFibGUtdG9vbHRpcD5cbjwvZGl2PlxuIl19
|