sidesys-generic-ui 2.4.3 → 2.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/avatar/components/profile-group/s-profile-group.component.mjs +13 -13
- package/esm2022/lib/avatar/s-avatar.component.mjs +19 -15
- package/esm2022/lib/badge/s-badge.component.mjs +1 -1
- package/esm2022/lib/breadcrum/s-breadcrum.component.mjs +1 -1
- package/esm2022/lib/card/s-card.component.mjs +3 -3
- package/esm2022/lib/collapse/s-collapse.component.mjs +3 -3
- package/esm2022/lib/empty/empty.component.mjs +1 -1
- package/esm2022/lib/grid-multi-inputs/grid-multi-inputs.component.mjs +1 -1
- package/esm2022/lib/icon-material/s-icon-material.component.mjs +6 -8
- package/esm2022/lib/icon-material/s-icon-material.model.mjs +1 -1
- package/esm2022/lib/input/components/calendar/s-calendar.component.mjs +1 -1
- package/esm2022/lib/input/components/color/s-color.component.mjs +1 -1
- package/esm2022/lib/input/components/error-control/s-error-control.component.mjs +1 -1
- package/esm2022/lib/input/components/input/s-input-model.mjs +3 -1
- package/esm2022/lib/input/components/input/s-input.component.mjs +16 -23
- package/esm2022/lib/input/components/input-number/s-input-number.component.mjs +1 -1
- package/esm2022/lib/input/components/time/s-time.component.mjs +1 -1
- package/esm2022/lib/list/s-list.component.mjs +1 -1
- package/esm2022/lib/list-simple/s-list-simple.component.mjs +2 -2
- package/esm2022/lib/modal/modal-confirm/modal-confirm.component.mjs +4 -4
- package/esm2022/lib/modal/modal-confirm/models/modal-confirm.interface.mjs +1 -1
- package/esm2022/lib/navbar/components/icon-menu/components/s-notificaction.component.mjs +1 -1
- package/esm2022/lib/navbar/components/icon-menu/s-icon-menu.component.mjs +1 -1
- package/esm2022/lib/navbar/components/menu-main/s-menu-main.component.mjs +1 -1
- package/esm2022/lib/navbar/s-navbar.component.mjs +3 -3
- package/esm2022/lib/pagination/s-pagination.component.mjs +1 -1
- package/esm2022/lib/popup/s-popup.component.mjs +1 -1
- package/esm2022/lib/precode/s-precode.component.mjs +1 -1
- package/esm2022/lib/progressbar/s-progressbar.component.mjs +1 -1
- package/esm2022/lib/select/select/s-select.component.mjs +10 -9
- package/esm2022/lib/select/select-multiple/s-select-multiple.component.mjs +3 -3
- package/esm2022/lib/select/select-multiple-old/s-select-multiple-old.component.mjs +3 -3
- package/esm2022/lib/select/select-simple/s-select-simple.component.mjs +3 -3
- package/esm2022/lib/sidebar/s-sidebar.component.mjs +3 -3
- package/esm2022/lib/sub-menu/s-sub-menu.component.mjs +3 -3
- package/esm2022/lib/table-complete/table-complete.component.mjs +14 -5
- package/esm2022/lib/table-double/table-double.component.mjs +188 -63
- package/esm2022/lib/table-double/table-double.model.mjs +1 -1
- package/esm2022/lib/table-double-complete/index.mjs +3 -0
- package/esm2022/lib/table-double-complete/table-double-complete.component.mjs +270 -0
- package/esm2022/lib/table-double-complete/table-double-complete.model.mjs +2 -0
- package/esm2022/lib/table-t/s-tablet-model.mjs +1 -1
- package/esm2022/lib/table-t/s-tablet.component.mjs +7 -4
- package/esm2022/lib/table-t/table-actions-buttons/table-actions-buttons.component.mjs +3 -3
- package/esm2022/lib/tabs/s-tabs.component.mjs +2 -2
- package/esm2022/lib/timeline/s-timeline.component.mjs +3 -3
- package/esm2022/lib/toast/s-toast.component.mjs +1 -1
- package/esm2022/lib/toggle-switch/s-toggle-switch.component.mjs +3 -3
- package/esm2022/lib/toggle-switch/toggle-switch-form/toggle-switch-form.component.mjs +1 -1
- package/esm2022/lib/toolbar-top/toolbar-top.component.mjs +4 -6
- package/esm2022/lib/tree-list/s-tree-list.component.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/sidesys-generic-ui.mjs +574 -184
- package/fesm2022/sidesys-generic-ui.mjs.map +1 -1
- package/lib/avatar/components/profile-group/s-profile-group.component.d.ts +1 -1
- package/lib/avatar/s-avatar.component.d.ts +1 -3
- package/lib/icon-material/s-icon-material.component.d.ts +1 -2
- package/lib/icon-material/s-icon-material.model.d.ts +1 -2
- package/lib/input/components/input/s-input-model.d.ts +2 -0
- package/lib/input/components/input/s-input.component.d.ts +2 -2
- package/lib/modal/modal-confirm/models/modal-confirm.interface.d.ts +1 -1
- package/lib/table-complete/table-complete.component.d.ts +4 -0
- package/lib/table-double/table-double.component.d.ts +42 -25
- package/lib/table-double/table-double.model.d.ts +23 -4
- package/lib/table-double-complete/index.d.ts +2 -0
- package/lib/table-double-complete/table-double-complete.component.d.ts +41 -0
- package/lib/table-double-complete/table-double-complete.model.d.ts +39 -0
- package/lib/table-t/s-tablet-model.d.ts +2 -0
- package/lib/table-t/s-tablet.component.d.ts +2 -1
- package/lib/toolbar-top/toolbar-top.component.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -4,8 +4,11 @@ import { FormsModule } from '@angular/forms';
|
|
|
4
4
|
import { STableCompleteModule } from '../table-complete';
|
|
5
5
|
import { SButtonModule } from '../button';
|
|
6
6
|
import { SIconMaterialModule } from '../icon-material';
|
|
7
|
+
import { SToggleSwitchModule } from '../toggle-switch';
|
|
7
8
|
import { STranslateService } from '../services';
|
|
8
9
|
import { SListModule } from '../list';
|
|
10
|
+
import { TableActionsButtonsModule } from '../table-t/table-actions-buttons/table-actions-buttons.module';
|
|
11
|
+
import { ActionsButtonsType } from '../table-t/table-actions-buttons/enums/ActionsButtonsType.enum';
|
|
9
12
|
import * as i0 from "@angular/core";
|
|
10
13
|
import * as i1 from "@angular/common";
|
|
11
14
|
import * as i2 from "../table-complete/table-complete.component";
|
|
@@ -13,6 +16,9 @@ import * as i3 from "../button/components/button/s-button.component";
|
|
|
13
16
|
import * as i4 from "@angular/forms";
|
|
14
17
|
import * as i5 from "../icon-material/s-icon-material.component";
|
|
15
18
|
import * as i6 from "../list/s-list.component";
|
|
19
|
+
import * as i7 from "../table-t/table-actions-buttons/table-actions-buttons.component";
|
|
20
|
+
import * as i8 from "../toggle-switch/toggle-switch-form/toggle-switch-form.component";
|
|
21
|
+
const MAX_TREE_LEVEL = 20;
|
|
16
22
|
export class STableDoubleComponent {
|
|
17
23
|
constructor() {
|
|
18
24
|
this.actionPositionEvent = new EventEmitter();
|
|
@@ -29,7 +35,11 @@ export class STableDoubleComponent {
|
|
|
29
35
|
this.pillButtonPositionEvent = new EventEmitter();
|
|
30
36
|
this.scrollPositionEvent = new EventEmitter();
|
|
31
37
|
this.selectPositionEvent = new EventEmitter();
|
|
38
|
+
this.rowSelectPositionEvent = new EventEmitter();
|
|
32
39
|
this.actionEvent = new EventEmitter();
|
|
40
|
+
this.toggleExpandEvent = new EventEmitter();
|
|
41
|
+
this.reorderItemEvent = new EventEmitter();
|
|
42
|
+
this.switchChangeEvent = new EventEmitter();
|
|
33
43
|
this.disabledButtonLeft = signal(true);
|
|
34
44
|
this.disabledButtonRight = signal(true);
|
|
35
45
|
this.itemsTableLeft = [];
|
|
@@ -66,34 +76,35 @@ export class STableDoubleComponent {
|
|
|
66
76
|
onDragLeave(event) {
|
|
67
77
|
this.dragOverItemId = null;
|
|
68
78
|
}
|
|
69
|
-
onDrop(event, itemId,
|
|
79
|
+
onDrop(event, itemId, isLeftTable) {
|
|
70
80
|
if (this.dragItemId === null || this.dragItemId === itemId) {
|
|
71
81
|
return;
|
|
72
82
|
}
|
|
73
83
|
// Reordenar los elementos
|
|
74
|
-
const
|
|
75
|
-
const
|
|
84
|
+
const items = this.getItems(isLeftTable);
|
|
85
|
+
const dragIndex = items.findIndex((item) => item.id === this.dragItemId);
|
|
86
|
+
const dropIndex = items.findIndex((item) => item.id === itemId);
|
|
76
87
|
if (dragIndex !== -1 && dropIndex !== -1) {
|
|
77
|
-
const draggedItem =
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
const draggedItem = items[dragIndex];
|
|
89
|
+
items.splice(dragIndex, 1);
|
|
90
|
+
items.splice(dropIndex, 0, draggedItem);
|
|
80
91
|
}
|
|
81
92
|
this.dragItemId = null;
|
|
82
93
|
this.dragOverItemId = null;
|
|
83
94
|
event.preventDefault();
|
|
84
95
|
this.eventUpdateTablesEmit();
|
|
85
96
|
}
|
|
86
|
-
iconAction(itemId,
|
|
87
|
-
const items = this.
|
|
97
|
+
iconAction(itemId, isLeftTable) {
|
|
98
|
+
const items = this.getItems(isLeftTable);
|
|
88
99
|
const item = items.find((item) => item.id === itemId);
|
|
89
100
|
if (item)
|
|
90
|
-
this.actionEvent.emit({
|
|
101
|
+
this.actionEvent.emit({ isLeftTable, id: itemId });
|
|
91
102
|
}
|
|
92
|
-
selectItem(itemId,
|
|
93
|
-
const items = this.
|
|
103
|
+
selectItem(itemId, isLeftTable) {
|
|
104
|
+
const items = this.getItems(isLeftTable);
|
|
94
105
|
const itemIndex = items.findIndex((item) => item.id === itemId);
|
|
95
106
|
if (itemIndex !== -1) {
|
|
96
|
-
items[itemIndex].
|
|
107
|
+
items[itemIndex].checked = !items[itemIndex].checked;
|
|
97
108
|
this.updateCounter();
|
|
98
109
|
}
|
|
99
110
|
}
|
|
@@ -101,18 +112,29 @@ export class STableDoubleComponent {
|
|
|
101
112
|
this.itemsTableLeft = [...this.config.tableLeftItems];
|
|
102
113
|
this.itemsTableRightData = [...this.config.tableRightItems];
|
|
103
114
|
}
|
|
104
|
-
moveItems(
|
|
105
|
-
const sourceData = this.
|
|
106
|
-
const targetData = this.
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
115
|
+
moveItems(isLeftTableSource) {
|
|
116
|
+
const sourceData = this.getItems(isLeftTableSource);
|
|
117
|
+
const targetData = this.getItems(!isLeftTableSource);
|
|
118
|
+
const originalSourceData = isLeftTableSource ? this.itemsTableLeft : this.itemsTableRightData;
|
|
119
|
+
const originalTargetData = isLeftTableSource ? this.itemsTableRightData : this.itemsTableLeft;
|
|
120
|
+
const hasItemSelection = sourceData.some(item => item.selected);
|
|
121
|
+
const selectedItems = sourceData
|
|
122
|
+
.filter(item => (hasItemSelection ? item.selected : item.checked))
|
|
123
|
+
.map(item => ({
|
|
124
|
+
...item,
|
|
125
|
+
checked: false,
|
|
126
|
+
selected: false,
|
|
127
|
+
}));
|
|
112
128
|
targetData.push(...selectedItems);
|
|
113
|
-
this.
|
|
129
|
+
this.setItems(isLeftTableSource, sourceData.filter(item => (hasItemSelection ? !item.selected : !item.checked)));
|
|
114
130
|
originalTargetData.push(...selectedItems);
|
|
115
|
-
|
|
131
|
+
const filteredOriginalSource = originalSourceData.filter(item => !selectedItems.some(sel => sel.name === item.name));
|
|
132
|
+
if (isLeftTableSource) {
|
|
133
|
+
this.itemsTableLeft = filteredOriginalSource;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.itemsTableRightData = filteredOriginalSource;
|
|
137
|
+
}
|
|
116
138
|
const checkColumnRight = this.config.tableRightConfig.columns[0]?.checkboxValue;
|
|
117
139
|
const checkColumnLeft = this.config.tableLeftConfig.columns[0]?.checkboxValue;
|
|
118
140
|
if (checkColumnRight)
|
|
@@ -131,69 +153,69 @@ export class STableDoubleComponent {
|
|
|
131
153
|
});
|
|
132
154
|
}
|
|
133
155
|
addItem() {
|
|
134
|
-
this.moveItems(
|
|
156
|
+
this.moveItems(true);
|
|
135
157
|
this.cloneItemsTables();
|
|
136
158
|
}
|
|
137
159
|
removeItem() {
|
|
138
|
-
this.moveItems(
|
|
160
|
+
this.moveItems(false);
|
|
139
161
|
this.cloneItemsTables();
|
|
140
162
|
}
|
|
141
|
-
action(
|
|
142
|
-
this.actionPositionEvent.emit(
|
|
163
|
+
action(isLeftTable) {
|
|
164
|
+
this.actionPositionEvent.emit(isLeftTable);
|
|
143
165
|
}
|
|
144
|
-
delete(
|
|
145
|
-
this.deletePositionEvent.emit(
|
|
166
|
+
delete(isLeftTable) {
|
|
167
|
+
this.deletePositionEvent.emit(isLeftTable);
|
|
146
168
|
}
|
|
147
|
-
empty(
|
|
148
|
-
this.emptyPositionEvent.emit(
|
|
169
|
+
empty(isLeftTable) {
|
|
170
|
+
this.emptyPositionEvent.emit(isLeftTable);
|
|
149
171
|
}
|
|
150
|
-
orderBy(event,
|
|
151
|
-
this.orderByPositionEvent.emit({
|
|
172
|
+
orderBy(event, isLeftTable) {
|
|
173
|
+
this.orderByPositionEvent.emit({ isLeftTable, value: event });
|
|
152
174
|
}
|
|
153
|
-
page(event,
|
|
154
|
-
this.pagePositionEvent.emit({
|
|
175
|
+
page(event, isLeftTable) {
|
|
176
|
+
this.pagePositionEvent.emit({ isLeftTable, value: event });
|
|
155
177
|
}
|
|
156
|
-
paginationEmitter(event,
|
|
157
|
-
this.paginationPositionEvent.emit({
|
|
178
|
+
paginationEmitter(event, isLeftTable) {
|
|
179
|
+
this.paginationPositionEvent.emit({ isLeftTable, value: event });
|
|
158
180
|
}
|
|
159
|
-
select(event,
|
|
160
|
-
this.selectPositionEvent.emit({
|
|
181
|
+
select(event, isLeftTable) {
|
|
182
|
+
this.selectPositionEvent.emit({ isLeftTable, value: event });
|
|
161
183
|
}
|
|
162
|
-
pillButton(
|
|
163
|
-
this.pillButtonPositionEvent.emit(
|
|
184
|
+
pillButton(isLeftTable) {
|
|
185
|
+
this.pillButtonPositionEvent.emit(isLeftTable);
|
|
164
186
|
}
|
|
165
|
-
filter(event,
|
|
166
|
-
this.filterPositionEvent.emit({
|
|
187
|
+
filter(event, isLeftTable) {
|
|
188
|
+
this.filterPositionEvent.emit({ isLeftTable, value: event });
|
|
167
189
|
}
|
|
168
|
-
multiSelect(event,
|
|
169
|
-
this.multiSelectPositionEvent.emit({
|
|
190
|
+
multiSelect(event, isLeftTable) {
|
|
191
|
+
this.multiSelectPositionEvent.emit({ isLeftTable, value: event });
|
|
170
192
|
}
|
|
171
|
-
checkAllEvent(event,
|
|
172
|
-
|
|
193
|
+
checkAllEvent(event, isLeftTable) {
|
|
194
|
+
const items = this.getItems(isLeftTable);
|
|
195
|
+
this.setItems(isLeftTable, items.map(item => ({
|
|
173
196
|
...item,
|
|
174
|
-
|
|
175
|
-
}));
|
|
197
|
+
checked: event,
|
|
198
|
+
})));
|
|
176
199
|
this.updateCounter();
|
|
177
200
|
}
|
|
178
|
-
onScroll(
|
|
179
|
-
this.scrollPositionEvent.emit(
|
|
201
|
+
onScroll(isLeftTable) {
|
|
202
|
+
this.scrollPositionEvent.emit(isLeftTable);
|
|
180
203
|
}
|
|
181
204
|
changeCheckbox() {
|
|
182
205
|
this.config.tableRightConfig.columns[0].checkboxValue =
|
|
183
|
-
this.config.tableRightItems.length > 0 && this.config.tableRightItems.every(item => item.
|
|
206
|
+
this.config.tableRightItems.length > 0 && this.config.tableRightItems.every(item => item.checked);
|
|
184
207
|
this.config.tableLeftConfig.columns[0].checkboxValue =
|
|
185
|
-
this.config.tableLeftItems.length > 0 && this.config.tableLeftItems.every(item => item.
|
|
208
|
+
this.config.tableLeftItems.length > 0 && this.config.tableLeftItems.every(item => item.checked);
|
|
186
209
|
this.updateCounter();
|
|
187
210
|
}
|
|
188
|
-
bottomStatusBarChange(state,
|
|
189
|
-
this.bottomStatusBarPositionEvent.emit({
|
|
211
|
+
bottomStatusBarChange(state, isLeftTable) {
|
|
212
|
+
this.bottomStatusBarPositionEvent.emit({ isLeftTable, value: state });
|
|
190
213
|
this.updateCounter();
|
|
191
214
|
}
|
|
192
|
-
search(event,
|
|
193
|
-
const
|
|
194
|
-
const original = isLeft ? this.itemsTableLeft : this.itemsTableRightData;
|
|
215
|
+
search(event, isLeftTable) {
|
|
216
|
+
const original = isLeftTable ? this.itemsTableLeft : this.itemsTableRightData;
|
|
195
217
|
const filtered = this.getFilteredItems(original, event);
|
|
196
|
-
if (
|
|
218
|
+
if (isLeftTable) {
|
|
197
219
|
this.config.tableLeftItems = filtered;
|
|
198
220
|
}
|
|
199
221
|
else {
|
|
@@ -208,24 +230,119 @@ export class STableDoubleComponent {
|
|
|
208
230
|
}
|
|
209
231
|
updateCounter() {
|
|
210
232
|
const updateStatusBar = (items, config, setter) => {
|
|
211
|
-
const
|
|
233
|
+
const counterCheckbox = items.filter(item => item.checked).length;
|
|
234
|
+
const counterItem = items.filter(item => item.selected).length;
|
|
235
|
+
const counter = Math.max(counterCheckbox, counterItem);
|
|
212
236
|
config.configBottomStatusBar = signal({
|
|
213
237
|
...config.configBottomStatusBar?.(),
|
|
214
238
|
counter,
|
|
215
239
|
disabled: items.length === 0,
|
|
216
240
|
total: items.length,
|
|
217
241
|
});
|
|
218
|
-
|
|
242
|
+
// Habilitar botón si hay items seleccionados (por checkbox O por item)
|
|
243
|
+
setter.set(counterCheckbox === 0 && counterItem === 0);
|
|
219
244
|
};
|
|
220
245
|
updateStatusBar(this.config.tableLeftItems, this.config.tableLeftConfig, this.disabledButtonLeft);
|
|
221
246
|
updateStatusBar(this.config.tableRightItems, this.config.tableRightConfig, this.disabledButtonRight);
|
|
222
247
|
}
|
|
248
|
+
getTreeCellColspan() {
|
|
249
|
+
return this.config.tableRightConfig.columns.filter(c => c.id === 'checkbox' || c.id === 'name').length;
|
|
250
|
+
}
|
|
251
|
+
getTreeLevelClass(item) {
|
|
252
|
+
if (!this.config.isTreeMode || !item.level) {
|
|
253
|
+
return 's-table-double__tree-level-0';
|
|
254
|
+
}
|
|
255
|
+
const level = Math.min(item.level, MAX_TREE_LEVEL);
|
|
256
|
+
return `s-table-double__tree-level-${level}`;
|
|
257
|
+
}
|
|
258
|
+
toggleExpand(event, itemId) {
|
|
259
|
+
event.stopPropagation();
|
|
260
|
+
this.toggleExpandEvent.emit(itemId);
|
|
261
|
+
}
|
|
262
|
+
rowClick(item, isLeftTable) {
|
|
263
|
+
if (isLeftTable && this.config.disableLeftRowSelection) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (!isLeftTable) {
|
|
267
|
+
this.config.tableRightItems.forEach(i => {
|
|
268
|
+
i.selected = i.id === item.id ? !i.selected : false;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
item.selected = !item.selected;
|
|
273
|
+
}
|
|
274
|
+
this.updateCounter();
|
|
275
|
+
this.rowSelectPositionEvent.emit({ isLeftTable, value: item });
|
|
276
|
+
}
|
|
277
|
+
getItems(isLeftTable) {
|
|
278
|
+
return isLeftTable ? this.config.tableLeftItems : this.config.tableRightItems;
|
|
279
|
+
}
|
|
280
|
+
setItems(isLeftTable, items) {
|
|
281
|
+
if (isLeftTable) {
|
|
282
|
+
this.config.tableLeftItems = items;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
this.config.tableRightItems = items;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
getOrderButtons(item) {
|
|
289
|
+
const isFirst = !!item.__isFirstSibling;
|
|
290
|
+
const isLast = !!item.__isLastSibling;
|
|
291
|
+
if (item.__orderButtons &&
|
|
292
|
+
item.__orderButtons[0].disabled === isFirst &&
|
|
293
|
+
item.__orderButtons[2].disabled === isLast) {
|
|
294
|
+
return item.__orderButtons;
|
|
295
|
+
}
|
|
296
|
+
item.__orderButtons = [
|
|
297
|
+
{
|
|
298
|
+
type: ActionsButtonsType.DOUBLE_ARROW_UP,
|
|
299
|
+
tooltip: this._sTranslateService.instant('ui.generic.first'),
|
|
300
|
+
disabled: isFirst,
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
type: ActionsButtonsType.ARROW_UP,
|
|
304
|
+
tooltip: this._sTranslateService.instant('ui.generic.up'),
|
|
305
|
+
disabled: isFirst,
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
type: ActionsButtonsType.ARROW_DOWN,
|
|
309
|
+
tooltip: this._sTranslateService.instant('ui.generic.down'),
|
|
310
|
+
disabled: isLast,
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
type: ActionsButtonsType.DOUBLE_ARROW_DOWN,
|
|
314
|
+
tooltip: this._sTranslateService.instant('ui.generic.last'),
|
|
315
|
+
disabled: isLast,
|
|
316
|
+
},
|
|
317
|
+
];
|
|
318
|
+
return item.__orderButtons;
|
|
319
|
+
}
|
|
320
|
+
onOrderButtonClick(type, itemId) {
|
|
321
|
+
this.reorderItemEvent.emit({ itemId, direction: type });
|
|
322
|
+
}
|
|
323
|
+
onSwitchChange(value, itemId, columnId, isLeftTable) {
|
|
324
|
+
const items = this.getItems(isLeftTable);
|
|
325
|
+
const item = items.find(i => i.id === itemId);
|
|
326
|
+
if (item) {
|
|
327
|
+
item[columnId] = value;
|
|
328
|
+
}
|
|
329
|
+
this.switchChangeEvent.emit({ isLeftTable, itemId, columnId, value });
|
|
330
|
+
}
|
|
223
331
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: STableDoubleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
224
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: STableDoubleComponent, isStandalone: true, selector: "s-table-double", inputs: { config: "config" }, outputs: { actionPositionEvent: "actionPositionEvent", bottomStatusBarPositionEvent: "bottomStatusBarPositionEvent", checkAllPositionEvent: "checkAllPositionEvent", deletePositionEvent: "deletePositionEvent", emptyPositionEvent: "emptyPositionEvent", eventUpdateTables: "eventUpdateTables", filterPositionEvent: "filterPositionEvent", multiSelectPositionEvent: "multiSelectPositionEvent", orderByPositionEvent: "orderByPositionEvent", pagePositionEvent: "pagePositionEvent", paginationPositionEvent: "paginationPositionEvent", pillButtonPositionEvent: "pillButtonPositionEvent", scrollPositionEvent: "scrollPositionEvent", selectPositionEvent: "selectPositionEvent", actionEvent: "actionEvent" }, ngImport: i0, template: "<div class=\"s-table-double\">\n <div class=\"s-table-double__header\"></div>\n <div class=\"s-table-double__body\">\n <div class=\"s-table-double__body__left\">\n <s-table-complete\n [config]=\"config.tableLeftConfig\"\n (actionEvent)=\"action('Left')\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, 'Left')\"\n (checkAllEvent)=\"checkAllEvent($event, 'Left')\"\n (deleteEvent)=\"delete('Left')\"\n (emptyEvent)=\"empty('Left')\"\n (filterEvent)=\"filter($event, 'Left')\"\n (multiSelectEvent)=\"multiSelect($event, 'Left')\"\n (orderByEvent)=\"orderBy($event, 'Left')\"\n (pageEvent)=\"page($event, 'Left')\"\n (paginationEvent)=\"paginationEmitter($event, 'Left')\"\n (pillButtonEvent)=\"pillButton('Left')\"\n (scrollEvent)=\"onScroll('Left')\"\n (searchEvent)=\"search($event, 'Left')\">\n @if (config.dragAndDrop) {\n @for (item of config.tableLeftItems; track item) {\n <div class=\"s-table-double__list\">\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.selected\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, 'Left')\"\n (click)=\"selectItem(item.id, 'Left')\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, 'Left')\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n </div>\n }\n } @else {\n @for (item of config.tableLeftItems; track item) {\n <tr [ngClass]=\"{ active: item.selected }\">\n <td>\n <input type=\"checkbox\" (change)=\"changeCheckbox()\" [(ngModel)]=\"item.selected\" />\n </td>\n @for (column of config.tableLeftConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined) {\n <td>{{ item[column.id] }}</td>\n }\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n <div class=\"s-table-double__body__middle\">\n <div>\n <s-button\n (click)=\"addItem()\"\n (keydown.enter)=\"addItem()\"\n position=\"normal\"\n [disabled]=\"disabledButtonLeft()\"\n [pill]=\"true\"\n ><s-icon-mat><span class=\"material-symbols-outlined\"> arrow_forward </span></s-icon-mat></s-button\n >\n </div>\n <div>\n <s-button\n (click)=\"removeItem()\"\n (keydown.enter)=\"removeItem()\"\n position=\"normal\"\n type=\"secondary\"\n [disabled]=\"disabledButtonRight()\"\n [pill]=\"true\"\n ><s-icon-mat><span class=\"material-symbols-outlined\"> arrow_back </span></s-icon-mat></s-button\n >\n </div>\n </div>\n <div class=\"s-table-double__body__right\">\n <s-table-complete\n [config]=\"config.tableRightConfig\"\n (actionEvent)=\"action('Right')\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, 'Right')\"\n (checkAllEvent)=\"checkAllEvent($event, 'Right')\"\n (deleteEvent)=\"delete('Right')\"\n (emptyEvent)=\"empty('Right')\"\n (filterEvent)=\"filter($event, 'Right')\"\n (multiSelectEvent)=\"multiSelect($event, 'Right')\"\n (orderByEvent)=\"orderBy($event, 'Right')\"\n (pageEvent)=\"page($event, 'Right')\"\n (paginationEvent)=\"paginationEmitter($event, 'Right')\"\n (pillButtonEvent)=\"pillButton('Right')\"\n (scrollEvent)=\"onScroll('Right')\"\n (searchEvent)=\"search($event, 'Right')\">\n @if (config.dragAndDrop) {\n @for (item of config.tableRightItems; track item) {\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.selected\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, 'Right')\"\n (click)=\"selectItem(item.id, 'Right')\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, 'Right')\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n }\n } @else {\n @for (item of config.tableRightItems; track item) {\n <tr [ngClass]=\"{ active: item.selected }\">\n <td>\n <input type=\"checkbox\" (change)=\"changeCheckbox()\" [(ngModel)]=\"item.selected\" />\n </td>\n @for (column of config.tableRightConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined) {\n <td>{{ item[column.id] }}</td>\n }\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n </div>\n</div>\n", styles: [".s-table-double{margin-bottom:1rem}.s-table-double__body{display:flex;gap:.625rem}.s-table-double__body .s-tablet tr{cursor:pointer}.s-table-double__body .s-tablet tr:hover{background-color:var(--primary-200)}.s-table-double__body .s-tablet tr.active{background-color:var(--neutrals-1100)}.s-table-double__body__left{flex:5}.s-table-double__body__middle{display:flex;flex-direction:column;gap:.625rem;justify-content:center;padding:1.25rem;background-color:var(--primary-100);border-radius:.5rem}.s-table-double__body__right{flex:5}.s-table-double__list{margin:.5rem}.s-table-double__drag{display:flex;justify-content:space-between;width:100%}.s-table-double__drag-icon{color:var(--primary-600)}.s-table-double__drag-icon:hover{cursor:pointer;color:var(--secondary-600)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: STableCompleteModule }, { kind: "component", type: i2.TableCompleteComponent, selector: "s-table-complete", inputs: ["config"], outputs: ["actionEvent", "checkAllEvent", "deleteEvent", "emptyEvent", "filterEvent", "orderByEvent", "pageEvent", "paginationEvent", "multiSelectEvent", "pillButtonEvent", "selectEvent", "searchEvent", "bottomStatusBarEvent", "scrollEvent"] }, { kind: "ngmodule", type: SButtonModule }, { kind: "component", type: i3.SButtonComponent, selector: "s-button", inputs: ["disabled", "pill", "size", "invert", "type", "loading", "position", "theme", "active"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SIconMaterialModule }, { kind: "component", type: i5.SIconMaterialComponent, selector: "s-icon-mat", inputs: ["name", "size", "fill", "weight", "grade", "opticalSize", "style", "type"] }, { kind: "ngmodule", type: SListModule }, { kind: "component", type: i6.SListComponent, selector: "s-list", inputs: ["disabled", "selected", "size"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
332
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: STableDoubleComponent, isStandalone: true, selector: "s-table-double", inputs: { config: "config" }, outputs: { actionPositionEvent: "actionPositionEvent", bottomStatusBarPositionEvent: "bottomStatusBarPositionEvent", checkAllPositionEvent: "checkAllPositionEvent", deletePositionEvent: "deletePositionEvent", emptyPositionEvent: "emptyPositionEvent", eventUpdateTables: "eventUpdateTables", filterPositionEvent: "filterPositionEvent", multiSelectPositionEvent: "multiSelectPositionEvent", orderByPositionEvent: "orderByPositionEvent", pagePositionEvent: "pagePositionEvent", paginationPositionEvent: "paginationPositionEvent", pillButtonPositionEvent: "pillButtonPositionEvent", scrollPositionEvent: "scrollPositionEvent", selectPositionEvent: "selectPositionEvent", rowSelectPositionEvent: "rowSelectPositionEvent", actionEvent: "actionEvent", toggleExpandEvent: "toggleExpandEvent", reorderItemEvent: "reorderItemEvent", switchChangeEvent: "switchChangeEvent" }, ngImport: i0, template: "<div class=\"s-table-double\">\n <div class=\"s-table-double__header\"></div>\n <div class=\"s-table-double__body\">\n <div class=\"s-table-double__body__left\">\n <s-table-complete\n [config]=\"config.tableLeftConfig\"\n (actionEvent)=\"action(true)\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, true)\"\n (checkAllEvent)=\"checkAllEvent($event, true)\"\n (deleteEvent)=\"delete(true)\"\n (emptyEvent)=\"empty(true)\"\n (filterEvent)=\"filter($event, true)\"\n (multiSelectEvent)=\"multiSelect($event, true)\"\n (orderByEvent)=\"orderBy($event, true)\"\n (pageEvent)=\"page($event, true)\"\n (paginationEvent)=\"paginationEmitter($event, true)\"\n (pillButtonEvent)=\"pillButton(true)\"\n (scrollEvent)=\"onScroll(true)\"\n (searchEvent)=\"search($event, true)\">\n @if (config.dragAndDrop) {\n @for (item of config.tableLeftItems; track item) {\n <div class=\"s-table-double__list\">\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.checked\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, true)\"\n (click)=\"selectItem(item.id, true)\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, true)\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n </div>\n }\n } @else {\n @for (item of config.tableLeftItems; track item) {\n <tr\n [ngClass]=\"{\n active: !config.disableLeftRowSelection && config.isTreeMode && item.selected,\n }\"\n (click)=\"!config.disableLeftRowSelection && config.isTreeMode && rowClick(item, true)\">\n <td (click)=\"$event.stopPropagation()\">\n <input type=\"checkbox\" [(ngModel)]=\"item.checked\" (change)=\"changeCheckbox()\" />\n </td>\n @for (column of config.tableLeftConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined) {\n <td>{{ item[column.id] }}</td>\n }\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n <div class=\"s-table-double__body__middle\">\n <div>\n <s-button\n (click)=\"addItem()\"\n (keydown.enter)=\"addItem()\"\n position=\"normal\"\n [disabled]=\"disabledButtonLeft()\"\n [pill]=\"true\"\n ><s-icon-mat\n ><span class=\"material-symbols-outlined\">\n {{ config.additionButton ? 'add' : 'arrow_forward' }}\n </span></s-icon-mat\n ></s-button\n >\n </div>\n <div>\n <s-button\n (click)=\"removeItem()\"\n (keydown.enter)=\"removeItem()\"\n position=\"normal\"\n type=\"secondary\"\n [disabled]=\"disabledButtonRight()\"\n [pill]=\"true\"\n ><s-icon-mat\n ><span class=\"material-symbols-outlined\">\n {{ config.additionButton ? 'remove' : 'arrow_back' }}\n </span></s-icon-mat\n ></s-button\n >\n </div>\n </div>\n <div class=\"s-table-double__body__right\">\n <s-table-complete\n [config]=\"config.tableRightConfig\"\n (actionEvent)=\"action(false)\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, false)\"\n (checkAllEvent)=\"checkAllEvent($event, false)\"\n (deleteEvent)=\"delete(false)\"\n (emptyEvent)=\"empty(false)\"\n (filterEvent)=\"filter($event, false)\"\n (multiSelectEvent)=\"multiSelect($event, false)\"\n (orderByEvent)=\"orderBy($event, false)\"\n (pageEvent)=\"page($event, false)\"\n (paginationEvent)=\"paginationEmitter($event, false)\"\n (pillButtonEvent)=\"pillButton(false)\"\n (scrollEvent)=\"onScroll(false)\"\n (searchEvent)=\"search($event, false)\">\n @if (config.dragAndDrop) {\n @for (item of config.tableRightItems; track item) {\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.checked\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, false)\"\n (click)=\"selectItem(item.id, false)\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, false)\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n }\n } @else {\n @for (item of config.tableRightItems; track item) {\n <tr\n [ngClass]=\"{ active: config.isTreeMode && item.selected }\"\n (click)=\"config.isTreeMode && rowClick(item, false)\">\n <td\n class=\"s-table-double__tree-cell\"\n [class.s-table-double__tree-cell--tree]=\"config.isTreeMode\"\n [attr.colspan]=\"config.isTreeMode ? getTreeCellColspan() : null\">\n <div class=\"s-table-double__tree-cell-content\" [ngClass]=\"getTreeLevelClass(item)\">\n @if (config.isTreeMode && item.hasChildren) {\n <s-icon-mat\n class=\"s-table-double__tree-toggle\"\n [class.s-table-double__tree-toggle--expanded]=\"item.expanded\"\n (click)=\"toggleExpand($event, item.id)\">\n <span class=\"material-symbols-outlined\">chevron_right</span>\n </s-icon-mat>\n } @else if (config.isTreeMode) {\n <span class=\"s-table-double__tree-spacer\"></span>\n }\n <input\n type=\"checkbox\"\n [(ngModel)]=\"item.checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"changeCheckbox()\" />\n @if (config.isTreeMode) {\n <span class=\"s-table-double__tree-name\">{{ item.name }}</span>\n }\n </div>\n </td>\n @for (column of config.tableRightConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined && !(config.isTreeMode && column.id === 'name') && column.id !== 'actions') {\n <td (click)=\"column.switchConfig && $event.stopPropagation()\">\n @if (column.switchConfig && item[column.id!] !== undefined) {\n <s-toggle-switch\n [config]=\"column.switchConfig\"\n [(ngModel)]=\"item[column.id!]\"\n (valueChange)=\"onSwitchChange($event, item.id, column.id!, false)\">\n </s-toggle-switch>\n } @else if (!column.switchConfig) {\n {{ item[column.id] }}\n }\n </td>\n }\n }\n @if (config.showOrderButtons) {\n <td class=\"s-table-double__order-actions\" (click)=\"$event.stopPropagation()\">\n <s-table-actions-buttons\n [tableActionsButtons]=\"getOrderButtons(item)\"\n (clickButtonEvent)=\"onOrderButtonClick($event, item.id)\">\n </s-table-actions-buttons>\n </td>\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n </div>\n</div>\n", styles: [".s-table-double__body{display:flex;gap:.625rem}.s-table-double__body .s-tablet tr{cursor:pointer;-webkit-user-select:none;user-select:none}.s-table-double__body .s-tablet tr:hover{background-color:var(--primary-200)}.s-table-double__body .s-tablet tr.active{background-color:var(--neutrals-1100)}.s-table-double__body__left{flex:5}.s-table-double__body__middle{display:flex;flex-direction:column;gap:.625rem;justify-content:center;padding:1.25rem;background-color:var(--primary-100);border-radius:.5rem}.s-table-double__body__right{flex:5}.s-table-double .s-table-double__tree-cell{padding-left:0!important}.s-table-double__tree-cell-content{display:flex;align-items:center;gap:.5rem}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__list{margin:.5rem}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag{display:flex;justify-content:space-between;width:100%}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag-icon{color:var(--primary-600)}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag-icon:hover{cursor:pointer;color:var(--secondary-600)}.s-table-double .s-table-double__tree-level-0{padding-left:11px!important}.s-table-double .s-table-double__tree-level-1{padding-left:35px!important}.s-table-double .s-table-double__tree-level-2{padding-left:59px!important}.s-table-double .s-table-double__tree-level-3{padding-left:83px!important}.s-table-double .s-table-double__tree-level-4{padding-left:107px!important}.s-table-double .s-table-double__tree-level-5{padding-left:131px!important}.s-table-double .s-table-double__tree-level-6{padding-left:155px!important}.s-table-double .s-table-double__tree-level-7{padding-left:179px!important}.s-table-double .s-table-double__tree-level-8{padding-left:203px!important}.s-table-double .s-table-double__tree-level-9{padding-left:227px!important}.s-table-double .s-table-double__tree-level-10{padding-left:251px!important}.s-table-double .s-table-double__tree-level-11{padding-left:275px!important}.s-table-double .s-table-double__tree-level-12{padding-left:299px!important}.s-table-double .s-table-double__tree-level-13{padding-left:323px!important}.s-table-double .s-table-double__tree-level-14{padding-left:347px!important}.s-table-double .s-table-double__tree-level-15{padding-left:371px!important}.s-table-double .s-table-double__tree-level-16{padding-left:395px!important}.s-table-double .s-table-double__tree-level-17{padding-left:419px!important}.s-table-double .s-table-double__tree-level-18{padding-left:443px!important}.s-table-double .s-table-double__tree-level-19{padding-left:467px!important}.s-table-double .s-table-double__tree-level-20{padding-left:491px!important}.s-table-double__tree-toggle{cursor:pointer;transition:transform .2s ease;display:inline-flex;align-items:center;justify-content:center;color:var(--neutrals-600);font-size:1.25rem}.s-table-double__tree-toggle:hover{color:var(--primary-600)}.s-table-double__tree-toggle--expanded{transform:rotate(90deg)}.s-table-double__tree-spacer{display:inline-block;width:24px}.s-table-double__tree-name{margin-left:.25rem;white-space:nowrap;cursor:pointer;flex:1}.s-table-double .s-table-double__drag{display:flex;justify-content:space-between;color:var(--primary-600)}.s-table-double__order-actions{width:1px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: STableCompleteModule }, { kind: "component", type: i2.TableCompleteComponent, selector: "s-table-complete", inputs: ["config"], outputs: ["actionEvent", "checkAllEvent", "deleteEvent", "emptyEvent", "filterEvent", "orderByEvent", "pageEvent", "paginationEvent", "multiSelectEvent", "pillButtonEvent", "selectEvent", "searchEvent", "bottomStatusBarEvent", "scrollEvent"] }, { kind: "ngmodule", type: SButtonModule }, { kind: "component", type: i3.SButtonComponent, selector: "s-button", inputs: ["disabled", "pill", "size", "invert", "type", "loading", "position", "theme", "active"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SIconMaterialModule }, { kind: "component", type: i5.SIconMaterialComponent, selector: "s-icon-mat", inputs: ["name", "size", "fill", "weight", "grade", "style", "type"] }, { kind: "ngmodule", type: SListModule }, { kind: "component", type: i6.SListComponent, selector: "s-list", inputs: ["disabled", "selected", "size"] }, { kind: "ngmodule", type: TableActionsButtonsModule }, { kind: "component", type: i7.TableActionsButtonsComponent, selector: "s-table-actions-buttons", inputs: ["tableActionsButtons"], outputs: ["clickButtonEvent"] }, { kind: "ngmodule", type: SToggleSwitchModule }, { kind: "component", type: i8.ToggleSwitchFormComponent, selector: "s-toggle-switch", inputs: ["config"], outputs: ["blur", "focus", "valueChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
225
333
|
}
|
|
226
334
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: STableDoubleComponent, decorators: [{
|
|
227
335
|
type: Component,
|
|
228
|
-
args: [{ selector: 's-table-double', standalone: true, imports: [
|
|
336
|
+
args: [{ selector: 's-table-double', standalone: true, imports: [
|
|
337
|
+
CommonModule,
|
|
338
|
+
STableCompleteModule,
|
|
339
|
+
SButtonModule,
|
|
340
|
+
FormsModule,
|
|
341
|
+
SIconMaterialModule,
|
|
342
|
+
SListModule,
|
|
343
|
+
TableActionsButtonsModule,
|
|
344
|
+
SToggleSwitchModule,
|
|
345
|
+
], encapsulation: ViewEncapsulation.None, template: "<div class=\"s-table-double\">\n <div class=\"s-table-double__header\"></div>\n <div class=\"s-table-double__body\">\n <div class=\"s-table-double__body__left\">\n <s-table-complete\n [config]=\"config.tableLeftConfig\"\n (actionEvent)=\"action(true)\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, true)\"\n (checkAllEvent)=\"checkAllEvent($event, true)\"\n (deleteEvent)=\"delete(true)\"\n (emptyEvent)=\"empty(true)\"\n (filterEvent)=\"filter($event, true)\"\n (multiSelectEvent)=\"multiSelect($event, true)\"\n (orderByEvent)=\"orderBy($event, true)\"\n (pageEvent)=\"page($event, true)\"\n (paginationEvent)=\"paginationEmitter($event, true)\"\n (pillButtonEvent)=\"pillButton(true)\"\n (scrollEvent)=\"onScroll(true)\"\n (searchEvent)=\"search($event, true)\">\n @if (config.dragAndDrop) {\n @for (item of config.tableLeftItems; track item) {\n <div class=\"s-table-double__list\">\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.checked\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, true)\"\n (click)=\"selectItem(item.id, true)\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, true)\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n </div>\n }\n } @else {\n @for (item of config.tableLeftItems; track item) {\n <tr\n [ngClass]=\"{\n active: !config.disableLeftRowSelection && config.isTreeMode && item.selected,\n }\"\n (click)=\"!config.disableLeftRowSelection && config.isTreeMode && rowClick(item, true)\">\n <td (click)=\"$event.stopPropagation()\">\n <input type=\"checkbox\" [(ngModel)]=\"item.checked\" (change)=\"changeCheckbox()\" />\n </td>\n @for (column of config.tableLeftConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined) {\n <td>{{ item[column.id] }}</td>\n }\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n <div class=\"s-table-double__body__middle\">\n <div>\n <s-button\n (click)=\"addItem()\"\n (keydown.enter)=\"addItem()\"\n position=\"normal\"\n [disabled]=\"disabledButtonLeft()\"\n [pill]=\"true\"\n ><s-icon-mat\n ><span class=\"material-symbols-outlined\">\n {{ config.additionButton ? 'add' : 'arrow_forward' }}\n </span></s-icon-mat\n ></s-button\n >\n </div>\n <div>\n <s-button\n (click)=\"removeItem()\"\n (keydown.enter)=\"removeItem()\"\n position=\"normal\"\n type=\"secondary\"\n [disabled]=\"disabledButtonRight()\"\n [pill]=\"true\"\n ><s-icon-mat\n ><span class=\"material-symbols-outlined\">\n {{ config.additionButton ? 'remove' : 'arrow_back' }}\n </span></s-icon-mat\n ></s-button\n >\n </div>\n </div>\n <div class=\"s-table-double__body__right\">\n <s-table-complete\n [config]=\"config.tableRightConfig\"\n (actionEvent)=\"action(false)\"\n (bottomStatusBarEvent)=\"bottomStatusBarChange($event, false)\"\n (checkAllEvent)=\"checkAllEvent($event, false)\"\n (deleteEvent)=\"delete(false)\"\n (emptyEvent)=\"empty(false)\"\n (filterEvent)=\"filter($event, false)\"\n (multiSelectEvent)=\"multiSelect($event, false)\"\n (orderByEvent)=\"orderBy($event, false)\"\n (pageEvent)=\"page($event, false)\"\n (paginationEvent)=\"paginationEmitter($event, false)\"\n (pillButtonEvent)=\"pillButton(false)\"\n (scrollEvent)=\"onScroll(false)\"\n (searchEvent)=\"search($event, false)\">\n @if (config.dragAndDrop) {\n @for (item of config.tableRightItems; track item) {\n <s-list\n [size]=\"'xs'\"\n [attr.data-item-id]=\"item.id\"\n [draggable]=\"true\"\n [selected]=\"item.checked\"\n (dragstart)=\"onDragStart($event, item.id)\"\n (dragover)=\"onDragOver($event, item.id)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event, item.id, false)\"\n (click)=\"selectItem(item.id, false)\">\n <div class=\"s-table-double__drag\">\n <h5 class=\"ml-2\">{{ item.name }}</h5>\n @if (item.iconAction) {\n <div class=\"s-table-double__drag-icon\">\n <s-icon-mat (click)=\"iconAction(item.id, false)\">{{ item.iconAction }}</s-icon-mat>\n </div>\n }\n </div>\n </s-list>\n }\n } @else {\n @for (item of config.tableRightItems; track item) {\n <tr\n [ngClass]=\"{ active: config.isTreeMode && item.selected }\"\n (click)=\"config.isTreeMode && rowClick(item, false)\">\n <td\n class=\"s-table-double__tree-cell\"\n [class.s-table-double__tree-cell--tree]=\"config.isTreeMode\"\n [attr.colspan]=\"config.isTreeMode ? getTreeCellColspan() : null\">\n <div class=\"s-table-double__tree-cell-content\" [ngClass]=\"getTreeLevelClass(item)\">\n @if (config.isTreeMode && item.hasChildren) {\n <s-icon-mat\n class=\"s-table-double__tree-toggle\"\n [class.s-table-double__tree-toggle--expanded]=\"item.expanded\"\n (click)=\"toggleExpand($event, item.id)\">\n <span class=\"material-symbols-outlined\">chevron_right</span>\n </s-icon-mat>\n } @else if (config.isTreeMode) {\n <span class=\"s-table-double__tree-spacer\"></span>\n }\n <input\n type=\"checkbox\"\n [(ngModel)]=\"item.checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"changeCheckbox()\" />\n @if (config.isTreeMode) {\n <span class=\"s-table-double__tree-name\">{{ item.name }}</span>\n }\n </div>\n </td>\n @for (column of config.tableRightConfig.columns; track column) {\n @if (column.id !== 'checkbox' && column.id !== undefined && !(config.isTreeMode && column.id === 'name') && column.id !== 'actions') {\n <td (click)=\"column.switchConfig && $event.stopPropagation()\">\n @if (column.switchConfig && item[column.id!] !== undefined) {\n <s-toggle-switch\n [config]=\"column.switchConfig\"\n [(ngModel)]=\"item[column.id!]\"\n (valueChange)=\"onSwitchChange($event, item.id, column.id!, false)\">\n </s-toggle-switch>\n } @else if (!column.switchConfig) {\n {{ item[column.id] }}\n }\n </td>\n }\n }\n @if (config.showOrderButtons) {\n <td class=\"s-table-double__order-actions\" (click)=\"$event.stopPropagation()\">\n <s-table-actions-buttons\n [tableActionsButtons]=\"getOrderButtons(item)\"\n (clickButtonEvent)=\"onOrderButtonClick($event, item.id)\">\n </s-table-actions-buttons>\n </td>\n }\n </tr>\n }\n }\n </s-table-complete>\n </div>\n </div>\n</div>\n", styles: [".s-table-double__body{display:flex;gap:.625rem}.s-table-double__body .s-tablet tr{cursor:pointer;-webkit-user-select:none;user-select:none}.s-table-double__body .s-tablet tr:hover{background-color:var(--primary-200)}.s-table-double__body .s-tablet tr.active{background-color:var(--neutrals-1100)}.s-table-double__body__left{flex:5}.s-table-double__body__middle{display:flex;flex-direction:column;gap:.625rem;justify-content:center;padding:1.25rem;background-color:var(--primary-100);border-radius:.5rem}.s-table-double__body__right{flex:5}.s-table-double .s-table-double__tree-cell{padding-left:0!important}.s-table-double__tree-cell-content{display:flex;align-items:center;gap:.5rem}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__list{margin:.5rem}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag{display:flex;justify-content:space-between;width:100%}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag-icon{color:var(--primary-600)}.s-table-double .s-table-double__tree-cell.s-table-double__tree-cell--tree__drag-icon:hover{cursor:pointer;color:var(--secondary-600)}.s-table-double .s-table-double__tree-level-0{padding-left:11px!important}.s-table-double .s-table-double__tree-level-1{padding-left:35px!important}.s-table-double .s-table-double__tree-level-2{padding-left:59px!important}.s-table-double .s-table-double__tree-level-3{padding-left:83px!important}.s-table-double .s-table-double__tree-level-4{padding-left:107px!important}.s-table-double .s-table-double__tree-level-5{padding-left:131px!important}.s-table-double .s-table-double__tree-level-6{padding-left:155px!important}.s-table-double .s-table-double__tree-level-7{padding-left:179px!important}.s-table-double .s-table-double__tree-level-8{padding-left:203px!important}.s-table-double .s-table-double__tree-level-9{padding-left:227px!important}.s-table-double .s-table-double__tree-level-10{padding-left:251px!important}.s-table-double .s-table-double__tree-level-11{padding-left:275px!important}.s-table-double .s-table-double__tree-level-12{padding-left:299px!important}.s-table-double .s-table-double__tree-level-13{padding-left:323px!important}.s-table-double .s-table-double__tree-level-14{padding-left:347px!important}.s-table-double .s-table-double__tree-level-15{padding-left:371px!important}.s-table-double .s-table-double__tree-level-16{padding-left:395px!important}.s-table-double .s-table-double__tree-level-17{padding-left:419px!important}.s-table-double .s-table-double__tree-level-18{padding-left:443px!important}.s-table-double .s-table-double__tree-level-19{padding-left:467px!important}.s-table-double .s-table-double__tree-level-20{padding-left:491px!important}.s-table-double__tree-toggle{cursor:pointer;transition:transform .2s ease;display:inline-flex;align-items:center;justify-content:center;color:var(--neutrals-600);font-size:1.25rem}.s-table-double__tree-toggle:hover{color:var(--primary-600)}.s-table-double__tree-toggle--expanded{transform:rotate(90deg)}.s-table-double__tree-spacer{display:inline-block;width:24px}.s-table-double__tree-name{margin-left:.25rem;white-space:nowrap;cursor:pointer;flex:1}.s-table-double .s-table-double__drag{display:flex;justify-content:space-between;color:var(--primary-600)}.s-table-double__order-actions{width:1px;white-space:nowrap}\n"] }]
|
|
229
346
|
}], propDecorators: { config: [{
|
|
230
347
|
type: Input
|
|
231
348
|
}], actionPositionEvent: [{
|
|
@@ -256,7 +373,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
256
373
|
type: Output
|
|
257
374
|
}], selectPositionEvent: [{
|
|
258
375
|
type: Output
|
|
376
|
+
}], rowSelectPositionEvent: [{
|
|
377
|
+
type: Output
|
|
259
378
|
}], actionEvent: [{
|
|
260
379
|
type: Output
|
|
380
|
+
}], toggleExpandEvent: [{
|
|
381
|
+
type: Output
|
|
382
|
+
}], reorderItemEvent: [{
|
|
383
|
+
type: Output
|
|
384
|
+
}], switchChangeEvent: [{
|
|
385
|
+
type: Output
|
|
261
386
|
}] } });
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZG91YmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpZGVzeXMtZ2VuZXJpYy11aS9zcmMvbGliL3RhYmxlLWRvdWJsZS90YWJsZS1kb3VibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lkZXN5cy1nZW5lcmljLXVpL3NyYy9saWIvdGFibGUtZG91YmxlL3RhYmxlLWRvdWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04saUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWF2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7QUFVdEMsTUFBTSxPQUFPLHFCQUFxQjtJQVJsQztRQVVZLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDbkQsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDNUUsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDckUsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNuRCx1QkFBa0IsR0FBRyxJQUFJ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cUIsaXlCQ3ZDbEMscXNMQTBJQSw2ekJEeEdZLFlBQVksNEhBQUUsb0JBQW9CLDJYQUFFLGFBQWEsd01BQUUsV0FBVywrZ0JBQUUsbUJBQW1CLG1NQUFFLFdBQVc7OzRGQUsvRixxQkFBcUI7a0JBUmpDLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGlCQUc1RixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTVGFibGVDb21wbGV0ZU1vZHVsZSB9IGZyb20gJy4uL3RhYmxlLWNvbXBsZXRlJztcbmltcG9ydCB7IFNCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgU0ljb25NYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uL2ljb24tbWF0ZXJpYWwnO1xuaW1wb3J0IHsgU29ydFRhYmxlIH0gZnJvbSAnLi4vdGFibGUtdCc7XG5pbXBvcnQge1xuICBQb3NpdGlvbixcbiAgU1RhYmxlRG91YmxlLFxuICBTVGFibGVEb3VibGVBY3Rpb25FdmVudCxcbiAgU1RhYmxlRG91YmxlQm9vbGVhbkV2ZW50LFxuICBTVGFibGVEb3VibGVOdW1iZXJFdmVudCxcbiAgU1RhYmxlRG91YmxlU29ydEV2ZW50LFxuICBTVGFibGVEb3VibGVTdHJpbmdBcnJheUV2ZW50LFxuICBTVGFibGVEb3VibGVTdHJpbmdFdmVudCxcbiAgU1RhYmxlc0RhdGEsXG59IGZyb20gJy4vdGFibGUtZG91YmxlLm1vZGVsJztcbmltcG9ydCB7IFNUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgU0xpc3RNb2R1bGUgfSBmcm9tICcuLi9saXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy10YWJsZS1kb3VibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTVGFibGVDb21wbGV0ZU1vZHVsZSwgU0J1dHRvbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNJY29uTWF0ZXJpYWxNb2R1bGUsIFNMaXN0TW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWRvdWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90YWJsZS1kb3VibGUuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTVGFibGVEb3VibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb25maWchOiBTVGFibGVEb3VibGU7XG4gIEBPdXRwdXQoKSBhY3Rpb25Qb3NpdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3NpdGlvbj4oKTtcbiAgQE91dHB1dCgpIGJvdHRvbVN0YXR1c0JhclBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZUJvb2xlYW5FdmVudD4oKTtcbiAgQE91dHB1dCgpIGNoZWNrQWxsUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlQm9vbGVhbkV2ZW50PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UG9zaXRpb24+KCk7XG4gIEBPdXRwdXQoKSBlbXB0eVBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBvc2l0aW9uPigpO1xuICBAT3V0cHV0KCkgZXZlbnRVcGRhdGVUYWJsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZXNEYXRhPigpO1xuICBAT3V0cHV0KCkgZmlsdGVyUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlU3RyaW5nQXJyYXlFdmVudD4oKTtcbiAgQE91dHB1dCgpIG11bHRpU2VsZWN0UG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlU3RyaW5nQXJyYXlFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9yZGVyQnlQb3NpdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxTVGFibGVEb3VibGVTb3J0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdlUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlTnVtYmVyRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlTnVtYmVyRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBwaWxsQnV0dG9uUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UG9zaXRpb24+KCk7XG4gIEBPdXRwdXQoKSBzY3JvbGxQb3NpdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQb3NpdGlvbj4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZVN0cmluZ0V2ZW50PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZUFjdGlvbkV2ZW50PigpO1xuXG4gIGRpc2FibGVkQnV0dG9uTGVmdCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgZGlzYWJsZWRCdXR0b25SaWdodCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgaXRlbXNUYWJsZUxlZnQ6IGFueVtdID0gW107XG4gIGl0ZW1zVGFibGVSaWdodERhdGE6IGFueVtdID0gW107XG5cbiAgZHJhZ0l0ZW1JZCE6IHN0cmluZyB8IG51bGw7XG4gIGRyYWdPdmVySXRlbUlkITogc3RyaW5nIHwgbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChTVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9uZUl0ZW1zVGFibGVzKCk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcuZW1wdHlDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLnRhYmxlTGVmdENvbmZpZy5lbXB0eUNvbmZpZyA9IHtcbiAgICAgICAgaW1hZ2U6ICdhc3NldHMvZW1wdHkvZW1wdHkucG5nJyxcbiAgICAgICAgdGl0bGU6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5VGl0bGVMZWZ0JyksIC8vJ05vIGhheSBlbGVtZW50b3MgZGlzcG9uaWJsZXMnLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmVtcHR5Q29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmVtcHR5Q29uZmlnID0ge1xuICAgICAgICBkZXRhaWw6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5RGV0YWlsUmlnaHQnKSwgLy8nU2VsZWNjaW9uZSBsb3Mgw610ZW1zIGRlc2VhZG9zIHkgbHVlZ28gaGFnYSBjbGljIGVuIGVsIGJvdMOzbiBkZSBsYSBjb2x1bW5hIGNlbnRyYWwuJyxcbiAgICAgICAgaW1hZ2U6ICdhc3NldHMvZW1wdHkvZW1wdHkucG5nJyxcbiAgICAgICAgdGl0bGU6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5VGl0bGVSaWdodCcpLCAvLydObyBoYXkgZWxlbWVudG9zIGFncmVnYWRvcycsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5kcmFnSXRlbUlkID0gaXRlbUlkO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YSgndGV4dC9wbGFpbicsICcnKTsgLy8gTmVjZXNhcmlvIHBhcmEgaGFiaWxpdGFyIGVsIGFycmFzdHJlIGVuIGFsZ3Vub3MgbmF2ZWdhZG9yZXNcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kcmFnSXRlbUlkID09PSBudWxsIHx8IHRoaXMuZHJhZ0l0ZW1JZCA9PT0gaXRlbUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJhZ092ZXJJdGVtSWQgPSBpdGVtSWQ7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdPdmVySXRlbUlkID0gbnVsbDtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBpdGVtSWQ6IHN0cmluZywgdGFyZ2V0UG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgaWYgKHRoaXMuZHJhZ0l0ZW1JZCA9PT0gbnVsbCB8fCB0aGlzLmRyYWdJdGVtSWQgPT09IGl0ZW1JZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlb3JkZW5hciBsb3MgZWxlbWVudG9zXG4gICAgY29uc3QgZHJhZ0luZGV4ID0gdGhpcy5jb25maWdbYHRhYmxlJHt0YXJnZXRQb3NpdGlvbn1JdGVtc2BdLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiB7IGlkOiBzdHJpbmcgfSkgPT4gaXRlbS5pZCA9PT0gdGhpcy5kcmFnSXRlbUlkXG4gICAgKTtcbiAgICBjb25zdCBkcm9wSW5kZXggPSB0aGlzLmNvbmZpZ1tgdGFibGUke3RhcmdldFBvc2l0aW9ufUl0ZW1zYF0uZmluZEluZGV4KFxuICAgICAgKGl0ZW06IHsgaWQ6IHN0cmluZyB9KSA9PiBpdGVtLmlkID09PSBpdGVtSWRcbiAgICApO1xuICAgIGlmIChkcmFnSW5kZXggIT09IC0xICYmIGRyb3BJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRyYWdnZWRJdGVtID0gdGhpcy5jb25maWdbYHRhYmxlJHt0YXJnZXRQb3NpdGlvbn1JdGVtc2BdW2RyYWdJbmRleF07XG4gICAgICB0aGlzLmNvbmZpZ1tgdGFibGUke3RhcmdldFBvc2l0aW9ufUl0ZW1zYF0uc3BsaWNlKGRyYWdJbmRleCwgMSk7XG4gICAgICB0aGlzLmNvbmZpZ1tgdGFibGUke3RhcmdldFBvc2l0aW9ufUl0ZW1zYF0uc3BsaWNlKGRyb3BJbmRleCwgMCwgZHJhZ2dlZEl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ0l0ZW1JZCA9IG51bGw7XG4gICAgdGhpcy5kcmFnT3Zlckl0ZW1JZCA9IG51bGw7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmV2ZW50VXBkYXRlVGFibGVzRW1pdCgpO1xuICB9XG5cbiAgaWNvbkFjdGlvbihpdGVtSWQ6IHN0cmluZywgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZ1tgdGFibGUke3Bvc2l0aW9ufUl0ZW1zYF07XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zLmZpbmQoKGl0ZW06IHsgaWQ6IHN0cmluZyB9KSA9PiBpdGVtLmlkID09PSBpdGVtSWQpO1xuICAgIGlmIChpdGVtKSB0aGlzLmFjdGlvbkV2ZW50LmVtaXQoeyBwb3NpdGlvbiwgaWQ6IGl0ZW1JZCB9KTtcbiAgfVxuXG4gIHNlbGVjdEl0ZW0oaXRlbUlkOiBzdHJpbmcsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jb25maWdbYHRhYmxlJHtwb3NpdGlvbn1JdGVtc2BdO1xuICAgIGNvbnN0IGl0ZW1JbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbTogeyBpZDogc3RyaW5nIH0pID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCk7XG4gICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHtcbiAgICAgIGl0ZW1zW2l0ZW1JbmRleF0uc2VsZWN0ZWQgPSAhaXRlbXNbaXRlbUluZGV4XS5zZWxlY3RlZDtcbiAgICAgIHRoaXMudXBkYXRlQ291bnRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lSXRlbXNUYWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtc1RhYmxlTGVmdCA9IFsuLi50aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtc107XG4gICAgdGhpcy5pdGVtc1RhYmxlUmlnaHREYXRhID0gWy4uLnRoaXMuY29uZmlnLnRhYmxlUmlnaHRJdGVtc107XG4gIH1cblxuICBtb3ZlSXRlbXMoc291cmNlUG9zaXRpb246IFBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2VEYXRhID0gdGhpcy5jb25maWdbYHRhYmxlJHtzb3VyY2VQb3NpdGlvbn1JdGVtc2BdO1xuICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmNvbmZpZ1tgdGFibGUke3RhcmdldFBvc2l0aW9ufUl0ZW1zYF07XG5cbiAgICBjb25zdCBvcmlnaW5hbFNvdXJjZUtleSA9IGBvcmlnaW5hbCR7XG4gICAgICBgdGFibGUke3NvdXJjZVBvc2l0aW9ufWAuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBgdGFibGUke3NvdXJjZVBvc2l0aW9ufWAuc2xpY2UoMSlcbiAgICB9SXRlbXNgO1xuICAgIGNvbnN0IG9yaWdpbmFsVGFyZ2V0S2V5ID0gYG9yaWdpbmFsJHtcbiAgICAgIGB0YWJsZSR7dGFyZ2V0UG9zaXRpb259YC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGB0YWJsZSR7dGFyZ2V0UG9zaXRpb259YC5zbGljZSgxKVxuICAgIH1JdGVtc2A7XG5cbiAgICBjb25zdCBvcmlnaW5hbFNvdXJjZURhdGEgPSAodGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIGFueVtdPilbb3JpZ2luYWxTb3VyY2VLZXldIHx8IFtdO1xuICAgIGNvbnN0IG9yaWdpbmFsVGFyZ2V0RGF0YSA9ICh0aGlzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgYW55W10+KVtvcmlnaW5hbFRhcmdldEtleV0gfHwgW107XG5cbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gc291cmNlRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiAoeyAuLi5pdGVtLCBzZWxlY3RlZDogZmFsc2UgfSkpO1xuXG4gICAgdGFyZ2V0RGF0YS5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xuICAgIHRoaXMuY29uZmlnW2B0YWJsZSR7c291cmNlUG9zaXRpb259SXRlbXNgXSA9IHNvdXJjZURhdGEuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uc2VsZWN0ZWQpO1xuXG4gICAgb3JpZ2luYWxUYXJnZXREYXRhLnB1c2goLi4uc2VsZWN0ZWRJdGVtcyk7XG4gICAgKHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4pW29yaWdpbmFsU291cmNlS2V5XSA9IG9yaWdpbmFsU291cmNlRGF0YS5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFzZWxlY3RlZEl0ZW1zLnNvbWUoc2VsID0+IHNlbC5uYW1lID09PSBpdGVtLm5hbWUpXG4gICAgKTtcblxuICAgIGNvbnN0IGNoZWNrQ29sdW1uUmlnaHQgPSB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmNvbHVtbnNbMF0/LmNoZWNrYm94VmFsdWU7XG4gICAgY29uc3QgY2hlY2tDb2x1bW5MZWZ0ID0gdGhpcy5jb25maWcudGFibGVMZWZ0Q29uZmlnLmNvbHVtbnNbMF0/LmNoZWNrYm94VmFsdWU7XG5cbiAgICBpZiAoY2hlY2tDb2x1bW5SaWdodCkgdGhpcy5jb25maWcudGFibGVSaWdodENvbmZpZy5jb2x1bW5zWzBdLmNoZWNrYm94VmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoY2hlY2tDb2x1bW5MZWZ0KSB0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcuY29sdW1uc1swXS5jaGVja2JveFZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5jb25maWcudGFibGVMZWZ0Q29uZmlnLnRvdGFsSXRlbXMgPSB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcy5sZW5ndGg7XG4gICAgdGhpcy5jb25maWcudGFibGVSaWdodENvbmZpZy50b3RhbEl0ZW1zID0gdGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLmV2ZW50VXBkYXRlVGFibGVzRW1pdCgpO1xuICAgIHRoaXMudXBkYXRlQ291bnRlcigpO1xuICB9XG5cbiAgZXZlbnRVcGRhdGVUYWJsZXNFbWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRVcGRhdGVUYWJsZXMuZW1pdCh7XG4gICAgICB0YWJsZUxlZnRJdGVtczogdGhpcy5jb25maWcudGFibGVMZWZ0SXRlbXMsXG4gICAgICB0YWJsZVJpZ2h0SXRlbXM6IHRoaXMuY29uZmlnLnRhYmxlUmlnaHRJdGVtcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbXMoJ0xlZnQnLCAnUmlnaHQnKTtcbiAgICB0aGlzLmNsb25lSXRlbXNUYWJsZXMoKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbXMoJ1JpZ2h0JywgJ0xlZnQnKTtcbiAgICB0aGlzLmNsb25lSXRlbXNUYWJsZXMoKTtcbiAgfVxuXG4gIGFjdGlvbihwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICB0aGlzLmFjdGlvblBvc2l0aW9uRXZlbnQuZW1pdChwb3NpdGlvbik7XG4gIH1cblxuICBkZWxldGUocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgdGhpcy5kZWxldGVQb3NpdGlvbkV2ZW50LmVtaXQocG9zaXRpb24pO1xuICB9XG5cbiAgZW1wdHkocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgdGhpcy5lbXB0eVBvc2l0aW9uRXZlbnQuZW1pdChwb3NpdGlvbik7XG4gIH1cblxuICBvcmRlckJ5KGV2ZW50OiBTb3J0VGFibGUsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHRoaXMub3JkZXJCeVBvc2l0aW9uRXZlbnQuZW1pdCh7IHBvc2l0aW9uOiBwb3NpdGlvbiwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgcGFnZShldmVudDogbnVtYmVyLCBwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICB0aGlzLnBhZ2VQb3NpdGlvbkV2ZW50LmVtaXQoeyBwb3NpdGlvbjogcG9zaXRpb24sIHZhbHVlOiBldmVudCB9KTtcbiAgfVxuXG4gIHBhZ2luYXRpb25FbWl0dGVyKGV2ZW50OiBudW1iZXIsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHRoaXMucGFnaW5hdGlvblBvc2l0aW9uRXZlbnQuZW1pdCh7IHBvc2l0aW9uOiBwb3NpdGlvbiwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgc2VsZWN0KGV2ZW50OiBzdHJpbmcsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHRoaXMuc2VsZWN0UG9zaXRpb25FdmVudC5lbWl0KHsgcG9zaXRpb246IHBvc2l0aW9uLCB2YWx1ZTogZXZlbnQgfSk7XG4gIH1cblxuICBwaWxsQnV0dG9uKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHRoaXMucGlsbEJ1dHRvblBvc2l0aW9uRXZlbnQuZW1pdChwb3NpdGlvbik7XG4gIH1cblxuICBmaWx0ZXIoZXZlbnQ6IHN0cmluZ1tdLCBwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICB0aGlzLmZpbHRlclBvc2l0aW9uRXZlbnQuZW1pdCh7IHBvc2l0aW9uOiBwb3NpdGlvbiwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgbXVsdGlTZWxlY3QoZXZlbnQ6IHN0cmluZ1tdLCBzaWRlOiBQb3NpdGlvbikge1xuICAgIHRoaXMubXVsdGlTZWxlY3RQb3NpdGlvbkV2ZW50LmVtaXQoeyBwb3NpdGlvbjogc2lkZSwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgY2hlY2tBbGxFdmVudChldmVudDogYm9vbGVhbiwgc2lkZTogUG9zaXRpb24pIHtcbiAgICB0aGlzLmNvbmZpZ1tgdGFibGUke3NpZGV9SXRlbXNgXSA9IHRoaXMuY29uZmlnW2B0YWJsZSR7c2lkZX1JdGVtc2BdLm1hcChpdGVtID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgc2VsZWN0ZWQ6IGV2ZW50LFxuICAgIH0pKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgfVxuXG4gIG9uU2Nyb2xsKHNpZGU6IFBvc2l0aW9uKSB7XG4gICAgdGhpcy5zY3JvbGxQb3NpdGlvbkV2ZW50LmVtaXQoc2lkZSk7XG4gIH1cblxuICBjaGFuZ2VDaGVja2JveCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmNvbHVtbnNbMF0uY2hlY2tib3hWYWx1ZSA9XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKTtcblxuICAgIHRoaXMuY29uZmlnLnRhYmxlTGVmdENvbmZpZy5jb2x1bW5zWzBdLmNoZWNrYm94VmFsdWUgPVxuICAgICAgdGhpcy5jb25maWcudGFibGVMZWZ0SXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcy5ldmVyeShpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpO1xuXG4gICAgdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gIH1cblxuICBib3R0b21TdGF0dXNCYXJDaGFuZ2Uoc3RhdGU6IGJvb2xlYW4sIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgIHRoaXMuYm90dG9tU3RhdHVzQmFyUG9zaXRpb25FdmVudC5lbWl0KHsgcG9zaXRpb24sIHZhbHVlOiBzdGF0ZSB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgfVxuXG4gIHNlYXJjaChldmVudDogc3RyaW5nLCBwb3NpdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMZWZ0ID0gcG9zaXRpb24gPT09ICdMZWZ0JztcbiAgICBjb25zdCBvcmlnaW5hbCA9IGlzTGVmdCA/IHRoaXMuaXRlbXNUYWJsZUxlZnQgOiB0aGlzLml0ZW1zVGFibGVSaWdodERhdGE7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmdldEZpbHRlcmVkSXRlbXMob3JpZ2luYWwsIGV2ZW50KTtcblxuICAgIGlmIChpc0xlZnQpIHtcbiAgICAgIHRoaXMuY29uZmlnLnRhYmxlTGVmdEl0ZW1zID0gZmlsdGVyZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnLnRhYmxlUmlnaHRJdGVtcyA9IGZpbHRlcmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRJdGVtcyhvcmlnaW5hbDogYW55W10sIHNlYXJjaFRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCB0ZXJtID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXRlcm0pIHJldHVybiBbLi4ub3JpZ2luYWxdO1xuXG4gICAgcmV0dXJuIG9yaWdpbmFsLmZpbHRlcihpdGVtID0+IE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSh2YWx1ZSA9PiBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ291bnRlcigpIHtcbiAgICBjb25zdCB1cGRhdGVTdGF0dXNCYXIgPSAoXG4gICAgICBpdGVtczogYW55W10sXG4gICAgICBjb25maWc6IHsgY29uZmlnQm90dG9tU3RhdHVzQmFyPzogV3JpdGFibGVTaWduYWw8YW55PiB9LFxuICAgICAgc2V0dGVyOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPlxuICAgICkgPT4ge1xuICAgICAgY29uc3QgY291bnRlciA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLmxlbmd0aDtcbiAgICAgIGNvbmZpZy5jb25maWdCb3R0b21TdGF0dXNCYXIgPSBzaWduYWwoe1xuICAgICAgICAuLi5jb25maWcuY29uZmlnQm90dG9tU3RhdHVzQmFyPy4oKSxcbiAgICAgICAgY291bnRlcixcbiAgICAgICAgZGlzYWJsZWQ6IGl0ZW1zLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgdG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIH0pO1xuICAgICAgc2V0dGVyLnNldChjb3VudGVyID09PSAwKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlU3RhdHVzQmFyKHRoaXMuY29uZmlnLnRhYmxlTGVmdEl0ZW1zLCB0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcsIHRoaXMuZGlzYWJsZWRCdXR0b25MZWZ0KTtcbiAgICB1cGRhdGVTdGF0dXNCYXIodGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLCB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLCB0aGlzLmRpc2FibGVkQnV0dG9uUmlnaHQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVcIj5cbiAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX19oZWFkZXJcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX19ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX19ib2R5X19sZWZ0XCI+XG4gICAgICA8cy10YWJsZS1jb21wbGV0ZVxuICAgICAgICBbY29uZmlnXT1cImNvbmZpZy50YWJsZUxlZnRDb25maWdcIlxuICAgICAgICAoYWN0aW9uRXZlbnQpPVwiYWN0aW9uKCdMZWZ0JylcIlxuICAgICAgICAoYm90dG9tU3RhdHVzQmFyRXZlbnQpPVwiYm90dG9tU3RhdHVzQmFyQ2hhbmdlKCRldmVudCwgJ0xlZnQnKVwiXG4gICAgICAgIChjaGVja0FsbEV2ZW50KT1cImNoZWNrQWxsRXZlbnQoJGV2ZW50LCAnTGVmdCcpXCJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZSgnTGVmdCcpXCJcbiAgICAgICAgKGVtcHR5RXZlbnQpPVwiZW1wdHkoJ0xlZnQnKVwiXG4gICAgICAgIChmaWx0ZXJFdmVudCk9XCJmaWx0ZXIoJGV2ZW50LCAnTGVmdCcpXCJcbiAgICAgICAgKG11bHRpU2VsZWN0RXZlbnQpPVwibXVsdGlTZWxlY3QoJGV2ZW50LCAnTGVmdCcpXCJcbiAgICAgICAgKG9yZGVyQnlFdmVudCk9XCJvcmRlckJ5KCRldmVudCwgJ0xlZnQnKVwiXG4gICAgICAgIChwYWdlRXZlbnQpPVwicGFnZSgkZXZlbnQsICdMZWZ0JylcIlxuICAgICAgICAocGFnaW5hdGlvbkV2ZW50KT1cInBhZ2luYXRpb25FbWl0dGVyKCRldmVudCwgJ0xlZnQnKVwiXG4gICAgICAgIChwaWxsQnV0dG9uRXZlbnQpPVwicGlsbEJ1dHRvbignTGVmdCcpXCJcbiAgICAgICAgKHNjcm9sbEV2ZW50KT1cIm9uU2Nyb2xsKCdMZWZ0JylcIlxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwic2VhcmNoKCRldmVudCwgJ0xlZnQnKVwiPlxuICAgICAgICBAaWYgKGNvbmZpZy5kcmFnQW5kRHJvcCkge1xuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY29uZmlnLnRhYmxlTGVmdEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2xpc3RcIj5cbiAgICAgICAgICAgICAgPHMtbGlzdFxuICAgICAgICAgICAgICAgIFtzaXplXT1cIid4cydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaXRlbS1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudCwgaXRlbS5pZClcIlxuICAgICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudCwgaXRlbS5pZCwgJ0xlZnQnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS5pZCwgJ0xlZnQnKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fZHJhZ1wiPlxuICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWwtMlwiPnt7IGl0ZW0ubmFtZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaWNvbkFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2RyYWctaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzLWljb24tbWF0IChjbGljayk9XCJpY29uQWN0aW9uKGl0ZW0uaWQsICdMZWZ0JylcIj57eyBpdGVtLmljb25BY3Rpb24gfX08L3MtaWNvbi1tYXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3MtbGlzdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcudGFibGVMZWZ0SXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgIDx0ciBbbmdDbGFzc109XCJ7IGFjdGl2ZTogaXRlbS5zZWxlY3RlZCB9XCI+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJjaGFuZ2VDaGVja2JveCgpXCIgWyhuZ01vZGVsKV09XCJpdGVtLnNlbGVjdGVkXCIgLz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbmZpZy50YWJsZUxlZnRDb25maWcuY29sdW1uczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaWQgIT09ICdjaGVja2JveCcgJiYgY29sdW1uLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtW2NvbHVtbi5pZF0gfX08L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvcy10YWJsZS1jb21wbGV0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2JvZHlfX21pZGRsZVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWRkSXRlbSgpXCJcbiAgICAgICAgICBwb3NpdGlvbj1cIm5vcm1hbFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQnV0dG9uTGVmdCgpXCJcbiAgICAgICAgICBbcGlsbF09XCJ0cnVlXCJcbiAgICAgICAgICA+PHMtaWNvbi1tYXQ+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFycm93X2ZvcndhcmQgPC9zcGFuPjwvcy1pY29uLW1hdD48L3MtYnV0dG9uXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVtb3ZlSXRlbSgpXCJcbiAgICAgICAgICBwb3NpdGlvbj1cIm5vcm1hbFwiXG4gICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQnV0dG9uUmlnaHQoKVwiXG4gICAgICAgICAgW3BpbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjxzLWljb24tbWF0PjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhcnJvd19iYWNrIDwvc3Bhbj48L3MtaWNvbi1tYXQ+PC9zLWJ1dHRvblxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2JvZHlfX3JpZ2h0XCI+XG4gICAgICA8cy10YWJsZS1jb21wbGV0ZVxuICAgICAgICBbY29uZmlnXT1cImNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnXCJcbiAgICAgICAgKGFjdGlvbkV2ZW50KT1cImFjdGlvbignUmlnaHQnKVwiXG4gICAgICAgIChib3R0b21TdGF0dXNCYXJFdmVudCk9XCJib3R0b21TdGF0dXNCYXJDaGFuZ2UoJGV2ZW50LCAnUmlnaHQnKVwiXG4gICAgICAgIChjaGVja0FsbEV2ZW50KT1cImNoZWNrQWxsRXZlbnQoJGV2ZW50LCAnUmlnaHQnKVwiXG4gICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGUoJ1JpZ2h0JylcIlxuICAgICAgICAoZW1wdHlFdmVudCk9XCJlbXB0eSgnUmlnaHQnKVwiXG4gICAgICAgIChmaWx0ZXJFdmVudCk9XCJmaWx0ZXIoJGV2ZW50LCAnUmlnaHQnKVwiXG4gICAgICAgIChtdWx0aVNlbGVjdEV2ZW50KT1cIm11bHRpU2VsZWN0KCRldmVudCwgJ1JpZ2h0JylcIlxuICAgICAgICAob3JkZXJCeUV2ZW50KT1cIm9yZGVyQnkoJGV2ZW50LCAnUmlnaHQnKVwiXG4gICAgICAgIChwYWdlRXZlbnQpPVwicGFnZSgkZXZlbnQsICdSaWdodCcpXCJcbiAgICAgICAgKHBhZ2luYXRpb25FdmVudCk9XCJwYWdpbmF0aW9uRW1pdHRlcigkZXZlbnQsICdSaWdodCcpXCJcbiAgICAgICAgKHBpbGxCdXR0b25FdmVudCk9XCJwaWxsQnV0dG9uKCdSaWdodCcpXCJcbiAgICAgICAgKHNjcm9sbEV2ZW50KT1cIm9uU2Nyb2xsKCdSaWdodCcpXCJcbiAgICAgICAgKHNlYXJjaEV2ZW50KT1cInNlYXJjaCgkZXZlbnQsICdSaWdodCcpXCI+XG4gICAgICAgIEBpZiAoY29uZmlnLmRyYWdBbmREcm9wKSB7XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcudGFibGVSaWdodEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8cy1saXN0XG4gICAgICAgICAgICAgIFtzaXplXT1cIid4cydcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWl0ZW0taWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50LCBpdGVtLmlkKVwiXG4gICAgICAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsIGl0ZW0uaWQsICdSaWdodCcpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS5pZCwgJ1JpZ2h0JylcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX19kcmFnXCI+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWwtMlwiPnt7IGl0ZW0ubmFtZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb25BY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fZHJhZy1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzLWljb24tbWF0IChjbGljayk9XCJpY29uQWN0aW9uKGl0ZW0uaWQsICdSaWdodCcpXCI+e3sgaXRlbS5pY29uQWN0aW9uIH19PC9zLWljb24tbWF0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvcy1saXN0PlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcudGFibGVSaWdodEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8dHIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGl0ZW0uc2VsZWN0ZWQgfVwiPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwiY2hhbmdlQ2hlY2tib3goKVwiIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiIC8+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb25maWcudGFibGVSaWdodENvbmZpZy5jb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5pZCAhPT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW1bY29sdW1uLmlkXSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9zLXRhYmxlLWNvbXBsZXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZG91YmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpZGVzeXMtZ2VuZXJpYy11aS9zcmMvbGliL3RhYmxlLWRvdWJsZS90YWJsZS1kb3VibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lkZXN5cy1nZW5lcmljLXVpL3NyYy9saWIvdGFibGUtZG91YmxlL3RhYmxlLWRvdWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04saUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWdCdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFMUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7Ozs7Ozs7Ozs7QUFFcEcsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBbUIxQixNQUFNLE9BQU8scUJBQXFCO0lBakJsQztRQW1C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QkFDRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNUYWJsZUNvbXBsZXRlTW9kdWxlIH0gZnJvbSAnLi4vdGFibGUtY29tcGxldGUnO1xuaW1wb3J0IHsgU0J1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBTSWNvbk1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi1tYXRlcmlhbCc7XG5pbXBvcnQgeyBTb3J0VGFibGUgfSBmcm9tICcuLi90YWJsZS10JztcbmltcG9ydCB7XG4gIFJlb3JkZXJEaXJlY3Rpb24sXG4gIFNUYWJsZURvdWJsZSxcbiAgU1RhYmxlRG91YmxlQWN0aW9uRXZlbnQsXG4gIFNUYWJsZURvdWJsZUJvb2xlYW5FdmVudCxcbiAgU1RhYmxlRG91YmxlSXRlbSxcbiAgU1RhYmxlRG91YmxlTnVtYmVyRXZlbnQsXG4gIFNUYWJsZURvdWJsZVJlb3JkZXJFdmVudCxcbiAgU1RhYmxlRG91YmxlU29ydEV2ZW50LFxuICBTVGFibGVEb3VibGVTdHJpbmdBcnJheUV2ZW50LFxuICBTVGFibGVEb3VibGVTdHJpbmdFdmVudCxcbiAgU1RhYmxlRG91YmxlU3dpdGNoRXZlbnQsXG4gIFNUYWJsZXNEYXRhLFxufSBmcm9tICcuL3RhYmxlLWRvdWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBTVG9nZ2xlU3dpdGNoTW9kdWxlIH0gZnJvbSAnLi4vdG9nZ2xlLXN3aXRjaCc7XG5pbXBvcnQgeyBTVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFNMaXN0TW9kdWxlIH0gZnJvbSAnLi4vbGlzdCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbnNCdXR0b25zTW9kdWxlIH0gZnJvbSAnLi4vdGFibGUtdC90YWJsZS1hY3Rpb25zLWJ1dHRvbnMvdGFibGUtYWN0aW9ucy1idXR0b25zLm1vZHVsZSc7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuLi90YWJsZS10L3RhYmxlLWFjdGlvbnMtYnV0dG9ucy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFjdGlvbnNCdXR0b25zVHlwZSB9IGZyb20gJy4uL3RhYmxlLXQvdGFibGUtYWN0aW9ucy1idXR0b25zL2VudW1zL0FjdGlvbnNCdXR0b25zVHlwZS5lbnVtJztcblxuY29uc3QgTUFYX1RSRUVfTEVWRUwgPSAyMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy10YWJsZS1kb3VibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNUYWJsZUNvbXBsZXRlTW9kdWxlLFxuICAgIFNCdXR0b25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU0ljb25NYXRlcmlhbE1vZHVsZSxcbiAgICBTTGlzdE1vZHVsZSxcbiAgICBUYWJsZUFjdGlvbnNCdXR0b25zTW9kdWxlLFxuICAgIFNUb2dnbGVTd2l0Y2hNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1kb3VibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFibGUtZG91YmxlLmNvbXBvbmVudC5zY3NzJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU1RhYmxlRG91YmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29uZmlnITogU1RhYmxlRG91YmxlO1xuICBAT3V0cHV0KCkgYWN0aW9uUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGJvdHRvbVN0YXR1c0JhclBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZUJvb2xlYW5FdmVudD4oKTtcbiAgQE91dHB1dCgpIGNoZWNrQWxsUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlQm9vbGVhbkV2ZW50PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlUG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGVtcHR5UG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGV2ZW50VXBkYXRlVGFibGVzID0gbmV3IEV2ZW50RW1pdHRlcjxTVGFibGVzRGF0YT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlclBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZVN0cmluZ0FycmF5RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBtdWx0aVNlbGVjdFBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZVN0cmluZ0FycmF5RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvcmRlckJ5UG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlU29ydEV2ZW50PigpO1xuICBAT3V0cHV0KCkgcGFnZVBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZU51bWJlckV2ZW50PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvblBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZU51bWJlckV2ZW50PigpO1xuICBAT3V0cHV0KCkgcGlsbEJ1dHRvblBvc2l0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzY3JvbGxQb3NpdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0UG9zaXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlU3RyaW5nRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByb3dTZWxlY3RQb3NpdGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlzTGVmdFRhYmxlOiBib29sZWFuOyB2YWx1ZTogYW55IH0+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlQWN0aW9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVFeHBhbmRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVvcmRlckl0ZW1FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8U1RhYmxlRG91YmxlUmVvcmRlckV2ZW50PigpO1xuICBAT3V0cHV0KCkgc3dpdGNoQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNUYWJsZURvdWJsZVN3aXRjaEV2ZW50PigpO1xuXG4gIGRpc2FibGVkQnV0dG9uTGVmdCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgZGlzYWJsZWRCdXR0b25SaWdodCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgaXRlbXNUYWJsZUxlZnQ6IGFueVtdID0gW107XG4gIGl0ZW1zVGFibGVSaWdodERhdGE6IGFueVtdID0gW107XG5cbiAgZHJhZ0l0ZW1JZCE6IHN0cmluZyB8IG51bGw7XG4gIGRyYWdPdmVySXRlbUlkITogc3RyaW5nIHwgbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChTVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9uZUl0ZW1zVGFibGVzKCk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcuZW1wdHlDb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnLnRhYmxlTGVmdENvbmZpZy5lbXB0eUNvbmZpZyA9IHtcbiAgICAgICAgaW1hZ2U6ICdhc3NldHMvZW1wdHkvZW1wdHkucG5nJyxcbiAgICAgICAgdGl0bGU6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5VGl0bGVMZWZ0JyksIC8vJ05vIGhheSBlbGVtZW50b3MgZGlzcG9uaWJsZXMnLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmVtcHR5Q29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmVtcHR5Q29uZmlnID0ge1xuICAgICAgICBkZXRhaWw6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5RGV0YWlsUmlnaHQnKSwgLy8nU2VsZWNjaW9uZSBsb3Mgw610ZW1zIGRlc2VhZG9zIHkgbHVlZ28gaGFnYSBjbGljIGVuIGVsIGJvdMOzbiBkZSBsYSBjb2x1bW5hIGNlbnRyYWwuJyxcbiAgICAgICAgaW1hZ2U6ICdhc3NldHMvZW1wdHkvZW1wdHkucG5nJyxcbiAgICAgICAgdGl0bGU6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLnRhYmxlRG91YmxlLmVtcHR5VGl0bGVSaWdodCcpLCAvLydObyBoYXkgZWxlbWVudG9zIGFncmVnYWRvcycsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5kcmFnSXRlbUlkID0gaXRlbUlkO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlcj8uc2V0RGF0YSgndGV4dC9wbGFpbicsICcnKTsgLy8gTmVjZXNhcmlvIHBhcmEgaGFiaWxpdGFyIGVsIGFycmFzdHJlIGVuIGFsZ3Vub3MgbmF2ZWdhZG9yZXNcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kcmFnSXRlbUlkID09PSBudWxsIHx8IHRoaXMuZHJhZ0l0ZW1JZCA9PT0gaXRlbUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJhZ092ZXJJdGVtSWQgPSBpdGVtSWQ7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLmRyYWdPdmVySXRlbUlkID0gbnVsbDtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBpdGVtSWQ6IHN0cmluZywgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kcmFnSXRlbUlkID09PSBudWxsIHx8IHRoaXMuZHJhZ0l0ZW1JZCA9PT0gaXRlbUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVvcmRlbmFyIGxvcyBlbGVtZW50b3NcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoaXNMZWZ0VGFibGUpO1xuICAgIGNvbnN0IGRyYWdJbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbTogeyBpZDogc3RyaW5nIH0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ0l0ZW1JZCk7XG4gICAgY29uc3QgZHJvcEluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpdGVtOiB7IGlkOiBzdHJpbmcgfSkgPT4gaXRlbS5pZCA9PT0gaXRlbUlkKTtcbiAgICBpZiAoZHJhZ0luZGV4ICE9PSAtMSAmJiBkcm9wSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IGl0ZW1zW2RyYWdJbmRleF07XG4gICAgICBpdGVtcy5zcGxpY2UoZHJhZ0luZGV4LCAxKTtcbiAgICAgIGl0ZW1zLnNwbGljZShkcm9wSW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdJdGVtSWQgPSBudWxsO1xuICAgIHRoaXMuZHJhZ092ZXJJdGVtSWQgPSBudWxsO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5ldmVudFVwZGF0ZVRhYmxlc0VtaXQoKTtcbiAgfVxuXG4gIGljb25BY3Rpb24oaXRlbUlkOiBzdHJpbmcsIGlzTGVmdFRhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKGlzTGVmdFRhYmxlKTtcbiAgICBjb25zdCBpdGVtID0gaXRlbXMuZmluZCgoaXRlbTogeyBpZDogc3RyaW5nIH0pID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCk7XG4gICAgaWYgKGl0ZW0pIHRoaXMuYWN0aW9uRXZlbnQuZW1pdCh7IGlzTGVmdFRhYmxlLCBpZDogaXRlbUlkIH0pO1xuICB9XG5cbiAgc2VsZWN0SXRlbShpdGVtSWQ6IHN0cmluZywgaXNMZWZ0VGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoaXNMZWZ0VGFibGUpO1xuICAgIGNvbnN0IGl0ZW1JbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaXRlbTogeyBpZDogc3RyaW5nIH0pID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCk7XG4gICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHtcbiAgICAgIGl0ZW1zW2l0ZW1JbmRleF0uY2hlY2tlZCA9ICFpdGVtc1tpdGVtSW5kZXhdLmNoZWNrZWQ7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgICB9XG4gIH1cblxuICBjbG9uZUl0ZW1zVGFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXNUYWJsZUxlZnQgPSBbLi4udGhpcy5jb25maWcudGFibGVMZWZ0SXRlbXNdO1xuICAgIHRoaXMuaXRlbXNUYWJsZVJpZ2h0RGF0YSA9IFsuLi50aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXNdO1xuICB9XG5cbiAgbW92ZUl0ZW1zKGlzTGVmdFRhYmxlU291cmNlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlRGF0YSA9IHRoaXMuZ2V0SXRlbXMoaXNMZWZ0VGFibGVTb3VyY2UpO1xuICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmdldEl0ZW1zKCFpc0xlZnRUYWJsZVNvdXJjZSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFNvdXJjZURhdGEgPSBpc0xlZnRUYWJsZVNvdXJjZSA/IHRoaXMuaXRlbXNUYWJsZUxlZnQgOiB0aGlzLml0ZW1zVGFibGVSaWdodERhdGE7XG4gICAgY29uc3Qgb3JpZ2luYWxUYXJnZXREYXRhID0gaXNMZWZ0VGFibGVTb3VyY2UgPyB0aGlzLml0ZW1zVGFibGVSaWdodERhdGEgOiB0aGlzLml0ZW1zVGFibGVMZWZ0O1xuXG4gICAgY29uc3QgaGFzSXRlbVNlbGVjdGlvbiA9IHNvdXJjZURhdGEuc29tZShpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzb3VyY2VEYXRhXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gKGhhc0l0ZW1TZWxlY3Rpb24gPyBpdGVtLnNlbGVjdGVkIDogaXRlbS5jaGVja2VkKSlcbiAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgfSkpO1xuXG4gICAgdGFyZ2V0RGF0YS5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xuICAgIHRoaXMuc2V0SXRlbXMoXG4gICAgICBpc0xlZnRUYWJsZVNvdXJjZSxcbiAgICAgIHNvdXJjZURhdGEuZmlsdGVyKGl0ZW0gPT4gKGhhc0l0ZW1TZWxlY3Rpb24gPyAhaXRlbS5zZWxlY3RlZCA6ICFpdGVtLmNoZWNrZWQpKVxuICAgICk7XG5cbiAgICBvcmlnaW5hbFRhcmdldERhdGEucHVzaCguLi5zZWxlY3RlZEl0ZW1zKTtcbiAgICBjb25zdCBmaWx0ZXJlZE9yaWdpbmFsU291cmNlID0gb3JpZ2luYWxTb3VyY2VEYXRhLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIXNlbGVjdGVkSXRlbXMuc29tZShzZWwgPT4gc2VsLm5hbWUgPT09IGl0ZW0ubmFtZSlcbiAgICApO1xuICAgIGlmIChpc0xlZnRUYWJsZVNvdXJjZSkge1xuICAgICAgdGhpcy5pdGVtc1RhYmxlTGVmdCA9IGZpbHRlcmVkT3JpZ2luYWxTb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXNUYWJsZVJpZ2h0RGF0YSA9IGZpbHRlcmVkT3JpZ2luYWxTb3VyY2U7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tDb2x1bW5SaWdodCA9IHRoaXMuY29uZmlnLnRhYmxlUmlnaHRDb25maWcuY29sdW1uc1swXT8uY2hlY2tib3hWYWx1ZTtcbiAgICBjb25zdCBjaGVja0NvbHVtbkxlZnQgPSB0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcuY29sdW1uc1swXT8uY2hlY2tib3hWYWx1ZTtcblxuICAgIGlmIChjaGVja0NvbHVtblJpZ2h0KSB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmNvbHVtbnNbMF0uY2hlY2tib3hWYWx1ZSA9IGZhbHNlO1xuICAgIGlmIChjaGVja0NvbHVtbkxlZnQpIHRoaXMuY29uZmlnLnRhYmxlTGVmdENvbmZpZy5jb2x1bW5zWzBdLmNoZWNrYm94VmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpZy50YWJsZUxlZnRDb25maWcudG90YWxJdGVtcyA9IHRoaXMuY29uZmlnLnRhYmxlTGVmdEl0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLnRvdGFsSXRlbXMgPSB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXMubGVuZ3RoO1xuICAgIHRoaXMuZXZlbnRVcGRhdGVUYWJsZXNFbWl0KCk7XG4gICAgdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gIH1cblxuICBldmVudFVwZGF0ZVRhYmxlc0VtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFVwZGF0ZVRhYmxlcy5lbWl0KHtcbiAgICAgIHRhYmxlTGVmdEl0ZW1zOiB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcyxcbiAgICAgIHRhYmxlUmlnaHRJdGVtczogdGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkSXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVJdGVtcyh0cnVlKTtcbiAgICB0aGlzLmNsb25lSXRlbXNUYWJsZXMoKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbXMoZmFsc2UpO1xuICAgIHRoaXMuY2xvbmVJdGVtc1RhYmxlcygpO1xuICB9XG5cbiAgYWN0aW9uKGlzTGVmdFRhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5hY3Rpb25Qb3NpdGlvbkV2ZW50LmVtaXQoaXNMZWZ0VGFibGUpO1xuICB9XG5cbiAgZGVsZXRlKGlzTGVmdFRhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kZWxldGVQb3NpdGlvbkV2ZW50LmVtaXQoaXNMZWZ0VGFibGUpO1xuICB9XG5cbiAgZW1wdHkoaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVtcHR5UG9zaXRpb25FdmVudC5lbWl0KGlzTGVmdFRhYmxlKTtcbiAgfVxuXG4gIG9yZGVyQnkoZXZlbnQ6IFNvcnRUYWJsZSwgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9yZGVyQnlQb3NpdGlvbkV2ZW50LmVtaXQoeyBpc0xlZnRUYWJsZSwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgcGFnZShldmVudDogbnVtYmVyLCBpc0xlZnRUYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMucGFnZVBvc2l0aW9uRXZlbnQuZW1pdCh7IGlzTGVmdFRhYmxlLCB2YWx1ZTogZXZlbnQgfSk7XG4gIH1cblxuICBwYWdpbmF0aW9uRW1pdHRlcihldmVudDogbnVtYmVyLCBpc0xlZnRUYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMucGFnaW5hdGlvblBvc2l0aW9uRXZlbnQuZW1pdCh7IGlzTGVmdFRhYmxlLCB2YWx1ZTogZXZlbnQgfSk7XG4gIH1cblxuICBzZWxlY3QoZXZlbnQ6IHN0cmluZywgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlbGVjdFBvc2l0aW9uRXZlbnQuZW1pdCh7IGlzTGVmdFRhYmxlLCB2YWx1ZTogZXZlbnQgfSk7XG4gIH1cblxuICBwaWxsQnV0dG9uKGlzTGVmdFRhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5waWxsQnV0dG9uUG9zaXRpb25FdmVudC5lbWl0KGlzTGVmdFRhYmxlKTtcbiAgfVxuXG4gIGZpbHRlcihldmVudDogc3RyaW5nW10sIGlzTGVmdFRhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5maWx0ZXJQb3NpdGlvbkV2ZW50LmVtaXQoeyBpc0xlZnRUYWJsZSwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgbXVsdGlTZWxlY3QoZXZlbnQ6IHN0cmluZ1tdLCBpc0xlZnRUYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMubXVsdGlTZWxlY3RQb3NpdGlvbkV2ZW50LmVtaXQoeyBpc0xlZnRUYWJsZSwgdmFsdWU6IGV2ZW50IH0pO1xuICB9XG5cbiAgY2hlY2tBbGxFdmVudChldmVudDogYm9vbGVhbiwgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoaXNMZWZ0VGFibGUpO1xuICAgIHRoaXMuc2V0SXRlbXMoXG4gICAgICBpc0xlZnRUYWJsZSxcbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGNoZWNrZWQ6IGV2ZW50LFxuICAgICAgfSkpXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgfVxuXG4gIG9uU2Nyb2xsKGlzTGVmdFRhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zY3JvbGxQb3NpdGlvbkV2ZW50LmVtaXQoaXNMZWZ0VGFibGUpO1xuICB9XG5cbiAgY2hhbmdlQ2hlY2tib3goKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcudGFibGVSaWdodENvbmZpZy5jb2x1bW5zWzBdLmNoZWNrYm94VmFsdWUgPVxuICAgICAgdGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5jaGVja2VkKTtcblxuICAgIHRoaXMuY29uZmlnLnRhYmxlTGVmdENvbmZpZy5jb2x1bW5zWzBdLmNoZWNrYm94VmFsdWUgPVxuICAgICAgdGhpcy5jb25maWcudGFibGVMZWZ0SXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcy5ldmVyeShpdGVtID0+IGl0ZW0uY2hlY2tlZCk7XG5cbiAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgfVxuXG4gIGJvdHRvbVN0YXR1c0JhckNoYW5nZShzdGF0ZTogYm9vbGVhbiwgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmJvdHRvbVN0YXR1c0JhclBvc2l0aW9uRXZlbnQuZW1pdCh7IGlzTGVmdFRhYmxlLCB2YWx1ZTogc3RhdGUgfSk7XG4gICAgdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gIH1cblxuICBzZWFyY2goZXZlbnQ6IHN0cmluZywgaXNMZWZ0VGFibGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGlzTGVmdFRhYmxlID8gdGhpcy5pdGVtc1RhYmxlTGVmdCA6IHRoaXMuaXRlbXNUYWJsZVJpZ2h0RGF0YTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZ2V0RmlsdGVyZWRJdGVtcyhvcmlnaW5hbCwgZXZlbnQpO1xuXG4gICAgaWYgKGlzTGVmdFRhYmxlKSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcyA9IGZpbHRlcmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXMgPSBmaWx0ZXJlZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmVkSXRlbXMob3JpZ2luYWw6IGFueVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgdGVybSA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKCF0ZXJtKSByZXR1cm4gWy4uLm9yaWdpbmFsXTtcblxuICAgIHJldHVybiBvcmlnaW5hbC5maWx0ZXIoaXRlbSA9PiBPYmplY3QudmFsdWVzKGl0ZW0pLnNvbWUodmFsdWUgPT4gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZXIoKSB7XG4gICAgY29uc3QgdXBkYXRlU3RhdHVzQmFyID0gKFxuICAgICAgaXRlbXM6IGFueVtdLFxuICAgICAgY29uZmlnOiB7IGNvbmZpZ0JvdHRvbVN0YXR1c0Jhcj86IFdyaXRhYmxlU2lnbmFsPGFueT4gfSxcbiAgICAgIHNldHRlcjogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGNvdW50ZXJDaGVja2JveCA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uY2hlY2tlZCkubGVuZ3RoO1xuICAgICAgY29uc3QgY291bnRlckl0ZW0gPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5sZW5ndGg7XG4gICAgICBjb25zdCBjb3VudGVyID0gTWF0aC5tYXgoY291bnRlckNoZWNrYm94LCBjb3VudGVySXRlbSk7XG5cbiAgICAgIGNvbmZpZy5jb25maWdCb3R0b21TdGF0dXNCYXIgPSBzaWduYWwoe1xuICAgICAgICAuLi5jb25maWcuY29uZmlnQm90dG9tU3RhdHVzQmFyPy4oKSxcbiAgICAgICAgY291bnRlcixcbiAgICAgICAgZGlzYWJsZWQ6IGl0ZW1zLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgdG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIH0pO1xuICAgICAgLy8gSGFiaWxpdGFyIGJvdMOzbiBzaSBoYXkgaXRlbXMgc2VsZWNjaW9uYWRvcyAocG9yIGNoZWNrYm94IE8gcG9yIGl0ZW0pXG4gICAgICBzZXR0ZXIuc2V0KGNvdW50ZXJDaGVja2JveCA9PT0gMCAmJiBjb3VudGVySXRlbSA9PT0gMCk7XG4gICAgfTtcblxuICAgIHVwZGF0ZVN0YXR1c0Jhcih0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcywgdGhpcy5jb25maWcudGFibGVMZWZ0Q29uZmlnLCB0aGlzLmRpc2FibGVkQnV0dG9uTGVmdCk7XG4gICAgdXBkYXRlU3RhdHVzQmFyKHRoaXMuY29uZmlnLnRhYmxlUmlnaHRJdGVtcywgdGhpcy5jb25maWcudGFibGVSaWdodENvbmZpZywgdGhpcy5kaXNhYmxlZEJ1dHRvblJpZ2h0KTtcbiAgfVxuXG4gIGdldFRyZWVDZWxsQ29sc3BhbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0Q29uZmlnLmNvbHVtbnMuZmlsdGVyKFxuICAgICAgYyA9PiBjLmlkID09PSAnY2hlY2tib3gnIHx8IGMuaWQgPT09ICduYW1lJ1xuICAgICkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0VHJlZUxldmVsQ2xhc3MoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzVHJlZU1vZGUgfHwgIWl0ZW0ubGV2ZWwpIHtcbiAgICAgIHJldHVybiAncy10YWJsZS1kb3VibGVfX3RyZWUtbGV2ZWwtMCc7XG4gICAgfVxuICAgIGNvbnN0IGxldmVsID0gTWF0aC5taW4oaXRlbS5sZXZlbCwgTUFYX1RSRUVfTEVWRUwpO1xuICAgIHJldHVybiBgcy10YWJsZS1kb3VibGVfX3RyZWUtbGV2ZWwtJHtsZXZlbH1gO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kKGV2ZW50OiBFdmVudCwgaXRlbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZUV4cGFuZEV2ZW50LmVtaXQoaXRlbUlkKTtcbiAgfVxuXG4gIHJvd0NsaWNrKGl0ZW06IGFueSwgaXNMZWZ0VGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNMZWZ0VGFibGUgJiYgdGhpcy5jb25maWcuZGlzYWJsZUxlZnRSb3dTZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc0xlZnRUYWJsZSkge1xuICAgICAgdGhpcy5jb25maWcudGFibGVSaWdodEl0ZW1zLmZvckVhY2goaSA9PiB7XG4gICAgICAgIGkuc2VsZWN0ZWQgPSBpLmlkID09PSBpdGVtLmlkID8gIWkuc2VsZWN0ZWQgOiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ291bnRlcigpO1xuICAgIHRoaXMucm93U2VsZWN0UG9zaXRpb25FdmVudC5lbWl0KHsgaXNMZWZ0VGFibGUsIHZhbHVlOiBpdGVtIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtcyhpc0xlZnRUYWJsZTogYm9vbGVhbik6IFNUYWJsZURvdWJsZUl0ZW1bXSB7XG4gICAgcmV0dXJuIGlzTGVmdFRhYmxlID8gdGhpcy5jb25maWcudGFibGVMZWZ0SXRlbXMgOiB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1zKGlzTGVmdFRhYmxlOiBib29sZWFuLCBpdGVtczogU1RhYmxlRG91YmxlSXRlbVtdKTogdm9pZCB7XG4gICAgaWYgKGlzTGVmdFRhYmxlKSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZUxlZnRJdGVtcyA9IGl0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpZy50YWJsZVJpZ2h0SXRlbXMgPSBpdGVtcztcbiAgICB9XG4gIH1cblxuICBnZXRPcmRlckJ1dHRvbnMoaXRlbTogYW55KTogQWN0aW9uQnV0dG9uW10ge1xuICAgIGNvbnN0IGlzRmlyc3QgPSAhIWl0ZW0uX19pc0ZpcnN0U2libGluZztcbiAgICBjb25zdCBpc0xhc3QgPSAhIWl0ZW0uX19pc0xhc3RTaWJsaW5nO1xuXG4gICAgaWYgKFxuICAgICAgaXRlbS5fX29yZGVyQnV0dG9ucyAmJlxuICAgICAgaXRlbS5fX29yZGVyQnV0dG9uc1swXS5kaXNhYmxlZCA9PT0gaXNGaXJzdCAmJlxuICAgICAgaXRlbS5fX29yZGVyQnV0dG9uc1syXS5kaXNhYmxlZCA9PT0gaXNMYXN0XG4gICAgKSB7XG4gICAgICByZXR1cm4gaXRlbS5fX29yZGVyQnV0dG9ucztcbiAgICB9XG5cbiAgICBpdGVtLl9fb3JkZXJCdXR0b25zID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBBY3Rpb25zQnV0dG9uc1R5cGUuRE9VQkxFX0FSUk9XX1VQLFxuICAgICAgICB0b29sdGlwOiB0aGlzLl9zVHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5nZW5lcmljLmZpcnN0JyksXG4gICAgICAgIGRpc2FibGVkOiBpc0ZpcnN0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQWN0aW9uc0J1dHRvbnNUeXBlLkFSUk9XX1VQLFxuICAgICAgICB0b29sdGlwOiB0aGlzLl9zVHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5nZW5lcmljLnVwJyksXG4gICAgICAgIGRpc2FibGVkOiBpc0ZpcnN0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQWN0aW9uc0J1dHRvbnNUeXBlLkFSUk9XX0RPV04sXG4gICAgICAgIHRvb2x0aXA6IHRoaXMuX3NUcmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmdlbmVyaWMuZG93bicpLFxuICAgICAgICBkaXNhYmxlZDogaXNMYXN0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogQWN0aW9uc0J1dHRvbnNUeXBlLkRPVUJMRV9BUlJPV19ET1dOLFxuICAgICAgICB0b29sdGlwOiB0aGlzLl9zVHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5nZW5lcmljLmxhc3QnKSxcbiAgICAgICAgZGlzYWJsZWQ6IGlzTGFzdCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICByZXR1cm4gaXRlbS5fX29yZGVyQnV0dG9ucztcbiAgfVxuXG4gIG9uT3JkZXJCdXR0b25DbGljayh0eXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW9yZGVySXRlbUV2ZW50LmVtaXQoeyBpdGVtSWQsIGRpcmVjdGlvbjogdHlwZSBhcyBSZW9yZGVyRGlyZWN0aW9uIH0pO1xuICB9XG5cbiAgb25Td2l0Y2hDaGFuZ2UodmFsdWU6IGJvb2xlYW4sIGl0ZW1JZDogc3RyaW5nLCBjb2x1bW5JZDogc3RyaW5nLCBpc0xlZnRUYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcyhpc0xlZnRUYWJsZSk7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zLmZpbmQoaSA9PiBpLmlkID09PSBpdGVtSWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtW2NvbHVtbklkXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnN3aXRjaENoYW5nZUV2ZW50LmVtaXQoeyBpc0xlZnRUYWJsZSwgaXRlbUlkLCBjb2x1bW5JZCwgdmFsdWUgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2hlYWRlclwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2JvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2JvZHlfX2xlZnRcIj5cbiAgICAgIDxzLXRhYmxlLWNvbXBsZXRlXG4gICAgICAgIFtjb25maWddPVwiY29uZmlnLnRhYmxlTGVmdENvbmZpZ1wiXG4gICAgICAgIChhY3Rpb25FdmVudCk9XCJhY3Rpb24odHJ1ZSlcIlxuICAgICAgICAoYm90dG9tU3RhdHVzQmFyRXZlbnQpPVwiYm90dG9tU3RhdHVzQmFyQ2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAoY2hlY2tBbGxFdmVudCk9XCJjaGVja0FsbEV2ZW50KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlKHRydWUpXCJcbiAgICAgICAgKGVtcHR5RXZlbnQpPVwiZW1wdHkodHJ1ZSlcIlxuICAgICAgICAoZmlsdGVyRXZlbnQpPVwiZmlsdGVyKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAobXVsdGlTZWxlY3RFdmVudCk9XCJtdWx0aVNlbGVjdCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgKG9yZGVyQnlFdmVudCk9XCJvcmRlckJ5KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAocGFnZUV2ZW50KT1cInBhZ2UoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIChwYWdpbmF0aW9uRXZlbnQpPVwicGFnaW5hdGlvbkVtaXR0ZXIoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIChwaWxsQnV0dG9uRXZlbnQpPVwicGlsbEJ1dHRvbih0cnVlKVwiXG4gICAgICAgIChzY3JvbGxFdmVudCk9XCJvblNjcm9sbCh0cnVlKVwiXG4gICAgICAgIChzZWFyY2hFdmVudCk9XCJzZWFyY2goJGV2ZW50LCB0cnVlKVwiPlxuICAgICAgICBAaWYgKGNvbmZpZy5kcmFnQW5kRHJvcCkge1xuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY29uZmlnLnRhYmxlTGVmdEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2xpc3RcIj5cbiAgICAgICAgICAgICAgPHMtbGlzdFxuICAgICAgICAgICAgICAgIFtzaXplXT1cIid4cydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaXRlbS1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpdGVtLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpdGVtLmlkKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50LCBpdGVtLmlkKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpdGVtLmlkLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS5pZCwgdHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2RyYWdcIj5cbiAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1sLTJcIj57eyBpdGVtLm5hbWUgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb25BY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX19kcmFnLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cy1pY29uLW1hdCAoY2xpY2spPVwiaWNvbkFjdGlvbihpdGVtLmlkLCB0cnVlKVwiPnt7IGl0ZW0uaWNvbkFjdGlvbiB9fTwvcy1pY29uLW1hdD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcy1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvbmZpZy50YWJsZUxlZnRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICFjb25maWcuZGlzYWJsZUxlZnRSb3dTZWxlY3Rpb24gJiYgY29uZmlnLmlzVHJlZU1vZGUgJiYgaXRlbS5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIhY29uZmlnLmRpc2FibGVMZWZ0Um93U2VsZWN0aW9uICYmIGNvbmZpZy5pc1RyZWVNb2RlICYmIHJvd0NsaWNrKGl0ZW0sIHRydWUpXCI+XG4gICAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXRlbS5jaGVja2VkXCIgKGNoYW5nZSk9XCJjaGFuZ2VDaGVja2JveCgpXCIgLz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbmZpZy50YWJsZUxlZnRDb25maWcuY29sdW1uczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaWQgIT09ICdjaGVja2JveCcgJiYgY29sdW1uLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtW2NvbHVtbi5pZF0gfX08L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvcy10YWJsZS1jb21wbGV0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2JvZHlfX21pZGRsZVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWRkSXRlbSgpXCJcbiAgICAgICAgICBwb3NpdGlvbj1cIm5vcm1hbFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQnV0dG9uTGVmdCgpXCJcbiAgICAgICAgICBbcGlsbF09XCJ0cnVlXCJcbiAgICAgICAgICA+PHMtaWNvbi1tYXRcbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAge3sgY29uZmlnLmFkZGl0aW9uQnV0dG9uID8gJ2FkZCcgOiAnYXJyb3dfZm9yd2FyZCcgfX1cbiAgICAgICAgICAgIDwvc3Bhbj48L3MtaWNvbi1tYXRcbiAgICAgICAgICA+PC9zLWJ1dHRvblxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICAgcG9zaXRpb249XCJub3JtYWxcIlxuICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEJ1dHRvblJpZ2h0KClcIlxuICAgICAgICAgIFtwaWxsXT1cInRydWVcIlxuICAgICAgICAgID48cy1pY29uLW1hdFxuICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICB7eyBjb25maWcuYWRkaXRpb25CdXR0b24gPyAncmVtb3ZlJyA6ICdhcnJvd19iYWNrJyB9fVxuICAgICAgICAgICAgPC9zcGFuPjwvcy1pY29uLW1hdFxuICAgICAgICAgID48L3MtYnV0dG9uXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fYm9keV9fcmlnaHRcIj5cbiAgICAgIDxzLXRhYmxlLWNvbXBsZXRlXG4gICAgICAgIFtjb25maWddPVwiY29uZmlnLnRhYmxlUmlnaHRDb25maWdcIlxuICAgICAgICAoYWN0aW9uRXZlbnQpPVwiYWN0aW9uKGZhbHNlKVwiXG4gICAgICAgIChib3R0b21TdGF0dXNCYXJFdmVudCk9XCJib3R0b21TdGF0dXNCYXJDaGFuZ2UoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAoY2hlY2tBbGxFdmVudCk9XCJjaGVja0FsbEV2ZW50KCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZShmYWxzZSlcIlxuICAgICAgICAoZW1wdHlFdmVudCk9XCJlbXB0eShmYWxzZSlcIlxuICAgICAgICAoZmlsdGVyRXZlbnQpPVwiZmlsdGVyKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgKG11bHRpU2VsZWN0RXZlbnQpPVwibXVsdGlTZWxlY3QoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAob3JkZXJCeUV2ZW50KT1cIm9yZGVyQnkoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAocGFnZUV2ZW50KT1cInBhZ2UoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAocGFnaW5hdGlvbkV2ZW50KT1cInBhZ2luYXRpb25FbWl0dGVyKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgKHBpbGxCdXR0b25FdmVudCk9XCJwaWxsQnV0dG9uKGZhbHNlKVwiXG4gICAgICAgIChzY3JvbGxFdmVudCk9XCJvblNjcm9sbChmYWxzZSlcIlxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwic2VhcmNoKCRldmVudCwgZmFsc2UpXCI+XG4gICAgICAgIEBpZiAoY29uZmlnLmRyYWdBbmREcm9wKSB7XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcudGFibGVSaWdodEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICA8cy1saXN0XG4gICAgICAgICAgICAgIFtzaXplXT1cIid4cydcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWl0ZW0taWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpdGVtLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgaXRlbS5pZClcIlxuICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQsIGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudCwgaXRlbS5pZCwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbS5pZCwgZmFsc2UpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fZHJhZ1wiPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1sLTJcIj57eyBpdGVtLm5hbWUgfX08L2g1PlxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy10YWJsZS1kb3VibGVfX2RyYWctaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8cy1pY29uLW1hdCAoY2xpY2spPVwiaWNvbkFjdGlvbihpdGVtLmlkLCBmYWxzZSlcIj57eyBpdGVtLmljb25BY3Rpb24gfX08L3MtaWNvbi1tYXQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zLWxpc3Q+XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvbmZpZy50YWJsZVJpZ2h0SXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogY29uZmlnLmlzVHJlZU1vZGUgJiYgaXRlbS5zZWxlY3RlZCB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpZy5pc1RyZWVNb2RlICYmIHJvd0NsaWNrKGl0ZW0sIGZhbHNlKVwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fdHJlZS1jZWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnMtdGFibGUtZG91YmxlX190cmVlLWNlbGwtLXRyZWVdPVwiY29uZmlnLmlzVHJlZU1vZGVcIlxuICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbmZpZy5pc1RyZWVNb2RlID8gZ2V0VHJlZUNlbGxDb2xzcGFuKCkgOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtdGFibGUtZG91YmxlX190cmVlLWNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImdldFRyZWVMZXZlbENsYXNzKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZy5pc1RyZWVNb2RlICYmIGl0ZW0uaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPHMtaWNvbi1tYXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInMtdGFibGUtZG91YmxlX190cmVlLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnMtdGFibGUtZG91YmxlX190cmVlLXRvZ2dsZS0tZXhwYW5kZWRdPVwiaXRlbS5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZCgkZXZlbnQsIGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Y2hldnJvbl9yaWdodDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zLWljb24tbWF0PlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29uZmlnLmlzVHJlZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fdHJlZS1zcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VDaGVja2JveCgpXCIgLz5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnLmlzVHJlZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fdHJlZS1uYW1lXCI+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29uZmlnLnRhYmxlUmlnaHRDb25maWcuY29sdW1uczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaWQgIT09ICdjaGVja2JveCcgJiYgY29sdW1uLmlkICE9PSB1bmRlZmluZWQgJiYgIShjb25maWcuaXNUcmVlTW9kZSAmJiBjb2x1bW4uaWQgPT09ICduYW1lJykgJiYgY29sdW1uLmlkICE9PSAnYWN0aW9ucycpIHtcbiAgICAgICAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiY29sdW1uLnN3aXRjaENvbmZpZyAmJiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uc3dpdGNoQ29uZmlnICYmIGl0ZW1bY29sdW1uLmlkIV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzLXRvZ2dsZS1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiY29sdW1uLnN3aXRjaENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1bY29sdW1uLmlkIV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgaXRlbS5pZCwgY29sdW1uLmlkISwgZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zLXRvZ2dsZS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKCFjb2x1bW4uc3dpdGNoQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbVtjb2x1bW4uaWRdIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoY29uZmlnLnNob3dPcmRlckJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzLXRhYmxlLWRvdWJsZV9fb3JkZXItYWN0aW9uc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgIDxzLXRhYmxlLWFjdGlvbnMtYnV0dG9uc1xuICAgICAgICAgICAgICAgICAgICBbdGFibGVBY3Rpb25zQnV0dG9uc109XCJnZXRPcmRlckJ1dHRvbnMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tCdXR0b25FdmVudCk9XCJvbk9yZGVyQnV0dG9uQ2xpY2soJGV2ZW50LCBpdGVtLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgPC9zLXRhYmxlLWFjdGlvbnMtYnV0dG9ucz5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9zLXRhYmxlLWNvbXBsZXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|