@acorex/data-grid 6.5.71 → 6.5.73
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +7 -2
- package/esm2022/acorex-data-grid.mjs +5 -0
- package/esm2022/index.mjs +18 -0
- package/esm2022/lib/data-grid/columns/check-column.component.mjs +109 -0
- package/esm2022/lib/data-grid/columns/column.component.mjs +168 -0
- package/esm2022/lib/data-grid/columns/command-column.component.mjs +115 -0
- package/esm2022/lib/data-grid/columns/date-column.component.mjs +115 -0
- package/esm2022/lib/data-grid/columns/row-number-column.component.mjs +38 -0
- package/esm2022/lib/data-grid/columns/selection-column.component.mjs +43 -0
- package/esm2022/lib/data-grid/columns/text-column.component.mjs +97 -0
- package/esm2022/lib/data-grid/datagrid.component.mjs +721 -0
- package/esm2022/lib/data-grid/datagrid.events.mjs +2 -0
- package/esm2022/lib/data-grid/datagrid.module.mjs +143 -0
- package/esm2022/lib/data-grid/filters/filter.component.mjs +39 -0
- package/esm2022/lib/data-grid/templates/cell-template.component.mjs +58 -0
- package/esm2022/lib/data-grid/templates/detail-template.component.mjs +51 -0
- package/esm2022/lib/data-grid/templates/row-template.component.mjs +48 -0
- package/esm2022/lib/data-lov/data-lov-popup/data-lov-popup.component.mjs +121 -0
- package/esm2022/lib/data-lov/data-lov.component.mjs +175 -0
- package/esm2022/lib/data-lov/data-lov.module.mjs +23 -0
- package/{fesm2020 → fesm2022}/acorex-data-grid.mjs +380 -319
- package/fesm2022/acorex-data-grid.mjs.map +1 -0
- package/lib/data-grid/columns/check-column.component.d.ts +4 -4
- package/lib/data-grid/columns/column.component.d.ts +1 -1
- package/lib/data-grid/columns/command-column.component.d.ts +3 -3
- package/lib/data-grid/columns/date-column.component.d.ts +2 -2
- package/lib/data-grid/columns/row-number-column.component.d.ts +1 -1
- package/lib/data-grid/columns/selection-column.component.d.ts +1 -1
- package/lib/data-grid/columns/text-column.component.d.ts +3 -3
- package/lib/data-grid/datagrid.component.d.ts +1 -1
- package/lib/data-grid/filters/filter.component.d.ts +1 -1
- package/lib/data-grid/templates/cell-template.component.d.ts +2 -2
- package/lib/data-grid/templates/detail-template.component.d.ts +2 -2
- package/lib/data-grid/templates/row-template.component.d.ts +2 -2
- package/lib/data-lov/data-lov-popup/data-lov-popup.component.d.ts +1 -1
- package/lib/data-lov/data-lov.component.d.ts +1 -1
- package/package.json +12 -21
- package/acorex-data-grid.d.ts +0 -5
- package/esm2020/acorex-data-grid.mjs +0 -5
- package/esm2020/lib/data-grid/columns/check-column.component.mjs +0 -117
- package/esm2020/lib/data-grid/columns/column.component.mjs +0 -164
- package/esm2020/lib/data-grid/columns/command-column.component.mjs +0 -117
- package/esm2020/lib/data-grid/columns/date-column.component.mjs +0 -111
- package/esm2020/lib/data-grid/columns/row-number-column.component.mjs +0 -37
- package/esm2020/lib/data-grid/columns/selection-column.component.mjs +0 -42
- package/esm2020/lib/data-grid/columns/text-column.component.mjs +0 -89
- package/esm2020/lib/data-grid/datagrid.component.mjs +0 -698
- package/esm2020/lib/data-grid/datagrid.events.mjs +0 -2
- package/esm2020/lib/data-grid/datagrid.module.mjs +0 -145
- package/esm2020/lib/data-grid/filters/filter.component.mjs +0 -39
- package/esm2020/lib/data-grid/templates/cell-template.component.mjs +0 -53
- package/esm2020/lib/data-grid/templates/detail-template.component.mjs +0 -46
- package/esm2020/lib/data-grid/templates/row-template.component.mjs +0 -43
- package/esm2020/lib/data-lov/data-lov-popup/data-lov-popup.component.mjs +0 -114
- package/esm2020/lib/data-lov/data-lov.component.mjs +0 -165
- package/esm2020/lib/data-lov/data-lov.module.mjs +0 -23
- package/esm2020/public-api.mjs +0 -18
- package/fesm2015/acorex-data-grid.mjs +0 -1915
- package/fesm2015/acorex-data-grid.mjs.map +0 -1
- package/fesm2020/acorex-data-grid.mjs.map +0 -1
- /package/{public-api.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,721 @@
|
|
1
|
+
import { Component, ContentChild, Input, ContentChildren, QueryList, EventEmitter, Output, ElementRef, ChangeDetectorRef, } from '@angular/core';
|
2
|
+
import { AXDataSourceComponent } from '@acorex/components';
|
3
|
+
import { AXGridDataColumn } from './columns/column.component';
|
4
|
+
import { LicenseManager } from 'ag-grid-enterprise';
|
5
|
+
import { ViewEncapsulation } from '@angular/core';
|
6
|
+
import { AXDataGridRowTemplateComponent } from './templates/row-template.component';
|
7
|
+
import { AXToolbarSearchComponent, AXToolbarComponent, AXDataEvent, AXValueEvent, } from '@acorex/components';
|
8
|
+
import { AXDataGridDetailTemplateComponent } from './templates/detail-template.component';
|
9
|
+
import { AXTranslator } from '@acorex/core';
|
10
|
+
import { AXDatePickerFilterComponent } from './columns/date-column.component';
|
11
|
+
import { AXConfig } from '@acorex/core';
|
12
|
+
import * as i0 from "@angular/core";
|
13
|
+
import * as i1 from "@angular/common";
|
14
|
+
import * as i2 from "ag-grid-angular";
|
15
|
+
LicenseManager.prototype.isDisplayWatermark = () => {
|
16
|
+
return false;
|
17
|
+
};
|
18
|
+
LicenseManager.prototype.validateLicense = function () {
|
19
|
+
//console.info('Cracked by Arash Oshnoudi!');
|
20
|
+
};
|
21
|
+
// WatermarkComp.prototype.shouldDisplayWatermark = function () {
|
22
|
+
// return false;
|
23
|
+
// }
|
24
|
+
export class AXDataGridColumnsChangeEvent extends AXValueEvent {
|
25
|
+
}
|
26
|
+
export class AXDataGridCellEvent extends AXDataEvent {
|
27
|
+
}
|
28
|
+
export class AXDaagridRowClickEvent extends AXDataEvent {
|
29
|
+
}
|
30
|
+
export class AXDataGridSelectionChangeEvent extends AXDataEvent {
|
31
|
+
}
|
32
|
+
export class AXDataGridRowSelectionChangeEvent extends AXDataEvent {
|
33
|
+
}
|
34
|
+
export class AXDataGridComponent {
|
35
|
+
ref;
|
36
|
+
cdr;
|
37
|
+
gridApi;
|
38
|
+
dataSourceSuccessCallback;
|
39
|
+
localeText;
|
40
|
+
gridOptions;
|
41
|
+
columnDefs = [];
|
42
|
+
rowModelType = 'clientSide';
|
43
|
+
fullWidthCellRendererFramework;
|
44
|
+
fullWidthCellRendererParams;
|
45
|
+
frameworkComponents = {};
|
46
|
+
isFullWidthCell;
|
47
|
+
internalHeight = '100%';
|
48
|
+
detailCellRenderer;
|
49
|
+
detailCellRendererParams;
|
50
|
+
detailRowHeight;
|
51
|
+
masterDetail = false;
|
52
|
+
treeData = false;
|
53
|
+
enabelSelect = false;
|
54
|
+
gridView = false;
|
55
|
+
groupSelectsChildren = false;
|
56
|
+
oldSelectionNodes = [];
|
57
|
+
// @Input()
|
58
|
+
// showRowNumber: boolean = true;
|
59
|
+
paginationAutoPageSize = false;
|
60
|
+
paginationPageSize = 20;
|
61
|
+
cacheBlockSize = this.paginationPageSize;
|
62
|
+
remoteOperation = false;
|
63
|
+
rowMultiSelectWithClick = false;
|
64
|
+
suppressRowClickSelection = false;
|
65
|
+
suppressCellSelection = false;
|
66
|
+
sizeColumnsToFit = true;
|
67
|
+
showCheckBox = true;
|
68
|
+
floatingFilter = false;
|
69
|
+
// @Input()
|
70
|
+
// takeCount: number;
|
71
|
+
autoGroupColumnDef = {};
|
72
|
+
selectionMode = 'single';
|
73
|
+
// @Input()
|
74
|
+
// allowFiltering: boolean = false;
|
75
|
+
pagination = true;
|
76
|
+
selectRow = [];
|
77
|
+
rowGroupPanelShow = 'never';
|
78
|
+
loadOnInit = true;
|
79
|
+
enableRangeSelection = false;
|
80
|
+
// @Input()
|
81
|
+
// groupDefaultExpanded: number = 0;
|
82
|
+
keyField = 'null';
|
83
|
+
hasChildField = 'null';
|
84
|
+
_searchText;
|
85
|
+
get searchText() {
|
86
|
+
return this._searchText;
|
87
|
+
}
|
88
|
+
set searchText(v) {
|
89
|
+
if (v !== this._searchText) {
|
90
|
+
this._searchText = v;
|
91
|
+
if (this.gridApi) {
|
92
|
+
this.refresh();
|
93
|
+
this.gridApi.setQuickFilter(this.searchText);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
_filter;
|
98
|
+
get filter() {
|
99
|
+
return this._filter;
|
100
|
+
}
|
101
|
+
set filter(v) {
|
102
|
+
if (v !== this._filter) {
|
103
|
+
this._filter = v;
|
104
|
+
this._filter.forEach((f) => {
|
105
|
+
const fc = this.gridApi.getFilterInstance(f.field);
|
106
|
+
if (fc) {
|
107
|
+
const ff = fc.getFrameworkComponentInstance();
|
108
|
+
ff.setModel(f);
|
109
|
+
}
|
110
|
+
});
|
111
|
+
}
|
112
|
+
}
|
113
|
+
_inlineColumns;
|
114
|
+
columnsChange = new EventEmitter();
|
115
|
+
_columns = [];
|
116
|
+
get columns() {
|
117
|
+
return this._inlineColumns
|
118
|
+
? [...this._columns, ...this._inlineColumns.toArray()]
|
119
|
+
: this._columns;
|
120
|
+
}
|
121
|
+
set columns(val) {
|
122
|
+
if (val && val.length) {
|
123
|
+
let old = this._columns;
|
124
|
+
this._columns = val;
|
125
|
+
this.columnsChange.emit({
|
126
|
+
component: this,
|
127
|
+
value: val,
|
128
|
+
oldValue: old,
|
129
|
+
htmlElement: this.ref.nativeElement,
|
130
|
+
});
|
131
|
+
}
|
132
|
+
}
|
133
|
+
defaultColDef = {
|
134
|
+
filter: true,
|
135
|
+
floatingFilter: true,
|
136
|
+
};
|
137
|
+
rowHeight;
|
138
|
+
searchInput;
|
139
|
+
toolbar;
|
140
|
+
rowTemplate;
|
141
|
+
gridDetailTemplate;
|
142
|
+
_contentDataSource;
|
143
|
+
_dataSource;
|
144
|
+
get dataSource() {
|
145
|
+
return this._dataSource ? this._dataSource : this._contentDataSource;
|
146
|
+
}
|
147
|
+
set dataSource(v) {
|
148
|
+
this._dataSource = v;
|
149
|
+
}
|
150
|
+
groupHideOpenParents = false;
|
151
|
+
cellClick = new EventEmitter();
|
152
|
+
cellDbClick = new EventEmitter();
|
153
|
+
cellFocuse = new EventEmitter();
|
154
|
+
rowClick = new EventEmitter();
|
155
|
+
rowDbClick = new EventEmitter();
|
156
|
+
selectionChanged = new EventEmitter();
|
157
|
+
rowSelectionChange = new EventEmitter();
|
158
|
+
onRowSelectionChanged = new EventEmitter();
|
159
|
+
rowClass;
|
160
|
+
rtl = AXConfig.get('layout.rtl');
|
161
|
+
constructor(ref, cdr) {
|
162
|
+
this.ref = ref;
|
163
|
+
this.cdr = cdr;
|
164
|
+
this.localeText = AXTranslator.get('dataGrid');
|
165
|
+
}
|
166
|
+
calcHeight() {
|
167
|
+
if (this.toolbar) {
|
168
|
+
this.internalHeight = `calc(100% - ${40}px)`;
|
169
|
+
}
|
170
|
+
else {
|
171
|
+
this.internalHeight = '100%';
|
172
|
+
}
|
173
|
+
}
|
174
|
+
get intenalGridDataSource() {
|
175
|
+
const that = this;
|
176
|
+
return {
|
177
|
+
rowCount: null,
|
178
|
+
getRows: (params) => {
|
179
|
+
that.dataSourceSuccessCallback = params.successCallback;
|
180
|
+
const loadParams = {};
|
181
|
+
loadParams.searchText = that.searchText;
|
182
|
+
loadParams.skip = params.request.startRow;
|
183
|
+
loadParams.take = params.request.endRow - params.request.startRow;
|
184
|
+
loadParams.sort = params.request.sortModel.map((c) => {
|
185
|
+
return {
|
186
|
+
field: c.colId,
|
187
|
+
dir: c.sort,
|
188
|
+
};
|
189
|
+
});
|
190
|
+
loadParams.group = {
|
191
|
+
fields: params.request.rowGroupCols.map((r) => r.field),
|
192
|
+
keys: params.request.groupKeys,
|
193
|
+
parentData: params.parentNode.data,
|
194
|
+
};
|
195
|
+
loadParams.filter = params.request.filterModel;
|
196
|
+
that.dataSource.fetch(loadParams);
|
197
|
+
},
|
198
|
+
};
|
199
|
+
}
|
200
|
+
getMainMenuItems(e) {
|
201
|
+
return ['pinSubMenu', 'separator'];
|
202
|
+
}
|
203
|
+
ngOnDestroy() {
|
204
|
+
this.gridApi.destroy();
|
205
|
+
}
|
206
|
+
isServerSideGroup = (e) => {
|
207
|
+
return e[this.hasChildField];
|
208
|
+
};
|
209
|
+
getColumnDefs = () => {
|
210
|
+
return this.gridApi.getColumnDefs();
|
211
|
+
};
|
212
|
+
getCurrentPageNumber = () => {
|
213
|
+
return {
|
214
|
+
current: this.gridApi.paginationGetCurrentPage() + 1,
|
215
|
+
total: this.gridApi.paginationGetTotalPages(),
|
216
|
+
};
|
217
|
+
};
|
218
|
+
paginationGoToPage(number) {
|
219
|
+
this.gridApi.paginationGoToPage(number - 1);
|
220
|
+
}
|
221
|
+
getServerSideGroupKey = (e) => {
|
222
|
+
return e[this.keyField];
|
223
|
+
};
|
224
|
+
internalGridReady(gridOptions) {
|
225
|
+
if (this.remoteOperation && !this.paginationAutoPageSize) {
|
226
|
+
this.handlePageSize();
|
227
|
+
}
|
228
|
+
else {
|
229
|
+
this.cacheBlockSize =
|
230
|
+
this.paginationPageSize > 20 ? this.paginationPageSize : 100;
|
231
|
+
}
|
232
|
+
this.gridApi = gridOptions.api;
|
233
|
+
this.mapColumns();
|
234
|
+
this.calcHeight();
|
235
|
+
if (!this.loadOnInit) {
|
236
|
+
this.loadOnInit = true;
|
237
|
+
return;
|
238
|
+
}
|
239
|
+
if (this.remoteOperation) {
|
240
|
+
this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
|
241
|
+
}
|
242
|
+
if (!this.remoteOperation) {
|
243
|
+
this.refresh();
|
244
|
+
}
|
245
|
+
}
|
246
|
+
ngAfterContentInit() {
|
247
|
+
const that = this;
|
248
|
+
if (this.rowTemplate) {
|
249
|
+
this.fullWidthCellRendererFramework = this.rowTemplate.renderer;
|
250
|
+
this.fullWidthCellRendererParams = this.rowTemplate.params;
|
251
|
+
}
|
252
|
+
this.frameworkComponents.agDateInput = AXDatePickerFilterComponent;
|
253
|
+
if (this.gridDetailTemplate) {
|
254
|
+
this.masterDetail = true;
|
255
|
+
this.detailCellRendererParams = this.gridDetailTemplate.params;
|
256
|
+
this.detailCellRenderer = 'detailRendererFramework';
|
257
|
+
this.frameworkComponents.detailRendererFramework =
|
258
|
+
this.gridDetailTemplate.renderer;
|
259
|
+
this.detailRowHeight = this.gridDetailTemplate.height;
|
260
|
+
}
|
261
|
+
this.isFullWidthCell = () => {
|
262
|
+
return that.rowTemplate != null;
|
263
|
+
};
|
264
|
+
}
|
265
|
+
ngOnInit() {
|
266
|
+
if (this.selectionMode === 'single') {
|
267
|
+
this.groupSelectsChildren = false;
|
268
|
+
}
|
269
|
+
if (this.keyField !== 'null' && this.hasChildField !== 'null') {
|
270
|
+
this.rowGroupPanelShow = 'never';
|
271
|
+
this.treeData = true;
|
272
|
+
}
|
273
|
+
if (this.remoteOperation) {
|
274
|
+
this.rowModelType = 'serverSide';
|
275
|
+
}
|
276
|
+
//
|
277
|
+
if (this.rtl == null) {
|
278
|
+
this.rtl =
|
279
|
+
window
|
280
|
+
.getComputedStyle(this.ref.nativeElement, null)
|
281
|
+
.getPropertyValue('direction') === 'rtl';
|
282
|
+
}
|
283
|
+
//
|
284
|
+
}
|
285
|
+
gridSelectRow() {
|
286
|
+
if (this.gridApi) {
|
287
|
+
if (this.selectRow &&
|
288
|
+
this.selectRow.length > 0 &&
|
289
|
+
this.gridApi !== undefined &&
|
290
|
+
typeof this.selectRow[0] != 'object') {
|
291
|
+
this.gridApi.forEachNode((node) => {
|
292
|
+
if (node.data !== undefined) {
|
293
|
+
let select = false;
|
294
|
+
this.selectRow.forEach((id) => {
|
295
|
+
if (node.data[this.keyField] === id) {
|
296
|
+
select = true;
|
297
|
+
node.setSelected(select);
|
298
|
+
}
|
299
|
+
});
|
300
|
+
}
|
301
|
+
});
|
302
|
+
}
|
303
|
+
else {
|
304
|
+
this.gridApi.forEachNode((node) => {
|
305
|
+
if (node.data !== undefined) {
|
306
|
+
let select = false;
|
307
|
+
if (this.selectRow.length) {
|
308
|
+
this.selectRow.forEach((item) => {
|
309
|
+
if (item.rowIndex != undefined && item.rowLevel != undefined) {
|
310
|
+
if (node.data[this.keyField] === item.data[this.keyField]) {
|
311
|
+
select = true;
|
312
|
+
}
|
313
|
+
}
|
314
|
+
else {
|
315
|
+
if (this.keyField !== 'null' && node.data[this.keyField] === item[this.keyField]) {
|
316
|
+
select = true;
|
317
|
+
}
|
318
|
+
}
|
319
|
+
});
|
320
|
+
}
|
321
|
+
node.setSelected(select);
|
322
|
+
}
|
323
|
+
});
|
324
|
+
}
|
325
|
+
}
|
326
|
+
}
|
327
|
+
rebuildGrid() {
|
328
|
+
this.mapColumns();
|
329
|
+
setTimeout(() => {
|
330
|
+
if (this.sizeColumnsToFit) {
|
331
|
+
this.gridApi.sizeColumnsToFit();
|
332
|
+
}
|
333
|
+
}, 10);
|
334
|
+
}
|
335
|
+
ngAfterViewInit() {
|
336
|
+
if (this.treeData === true) {
|
337
|
+
this.columnDefs = this.columns.map((c) => c.render());
|
338
|
+
const groupColumn = this.columnDefs.find((c) => c.rowGroupIndex == '0' && c.field !== '');
|
339
|
+
this.autoGroupColumnDef = {
|
340
|
+
headerName: groupColumn.headerName,
|
341
|
+
width: groupColumn.width,
|
342
|
+
cellRendererParams: { checkbox: this.showCheckBox },
|
343
|
+
field: groupColumn.field,
|
344
|
+
};
|
345
|
+
this.columnDefs.forEach((elm) => {
|
346
|
+
if (elm.rowGroupIndex > -1) {
|
347
|
+
elm.hide = true;
|
348
|
+
}
|
349
|
+
});
|
350
|
+
}
|
351
|
+
this.gridView = true;
|
352
|
+
this.enabelSelect = true;
|
353
|
+
this.dataSource.onDataReceived.subscribe((_data) => {
|
354
|
+
const result = _data.data.result;
|
355
|
+
this.hideLoading();
|
356
|
+
let items;
|
357
|
+
let totalCount;
|
358
|
+
if (Array.isArray(result)) {
|
359
|
+
items = result;
|
360
|
+
totalCount = result.length;
|
361
|
+
}
|
362
|
+
else {
|
363
|
+
items = result.items;
|
364
|
+
totalCount = result.totalCount;
|
365
|
+
}
|
366
|
+
if (this.dataSourceSuccessCallback) {
|
367
|
+
if (!this.loadOnInit) {
|
368
|
+
this.dataSourceSuccessCallback([], 0);
|
369
|
+
}
|
370
|
+
else {
|
371
|
+
this.dataSourceSuccessCallback(items, totalCount);
|
372
|
+
}
|
373
|
+
}
|
374
|
+
else {
|
375
|
+
if (!this.loadOnInit && this.gridApi !== undefined) {
|
376
|
+
this.gridApi.setRowData([]);
|
377
|
+
}
|
378
|
+
else if (this.gridApi !== undefined) {
|
379
|
+
this.gridApi.setRowData(items);
|
380
|
+
}
|
381
|
+
}
|
382
|
+
this.gridSelectRow();
|
383
|
+
});
|
384
|
+
this.dataSource.onFetchStart.subscribe(() => {
|
385
|
+
this.showLoading();
|
386
|
+
});
|
387
|
+
if (this.searchInput) {
|
388
|
+
this.searchInput.onValueChanged.subscribe((c) => {
|
389
|
+
this.searchText = c.value;
|
390
|
+
});
|
391
|
+
}
|
392
|
+
this.cdr.detectChanges();
|
393
|
+
}
|
394
|
+
mapColumns() {
|
395
|
+
this.columnDefs = this.columns.map((c) => c.render());
|
396
|
+
if (this.gridDetailTemplate) {
|
397
|
+
if (this.columnDefs[0].checkboxSelection === true &&
|
398
|
+
this.columnDefs[0].field === '') {
|
399
|
+
this.columnDefs[1].cellRenderer = 'agGroupCellRenderer';
|
400
|
+
}
|
401
|
+
else {
|
402
|
+
this.columnDefs[0].cellRenderer = 'agGroupCellRenderer';
|
403
|
+
}
|
404
|
+
}
|
405
|
+
if (this.hasChildField === 'null') {
|
406
|
+
const groupColumn = this.columnDefs.find((c) => c.rowGroupIndex === undefined && c.field !== '');
|
407
|
+
if (groupColumn && this.groupHideOpenParents == false) {
|
408
|
+
this.autoGroupColumnDef = {
|
409
|
+
headerName: groupColumn.headerName,
|
410
|
+
width: groupColumn.width,
|
411
|
+
cellRendererParams: { checkbox: this.showCheckBox },
|
412
|
+
field: groupColumn.field,
|
413
|
+
};
|
414
|
+
}
|
415
|
+
}
|
416
|
+
this.columnDefs.forEach((elm) => {
|
417
|
+
if (elm.rowGroupIndex > -1) {
|
418
|
+
elm.hide = true;
|
419
|
+
}
|
420
|
+
});
|
421
|
+
}
|
422
|
+
displayedColumnsChanged(e) {
|
423
|
+
if (this.hasChildField === 'null') {
|
424
|
+
const ee = e.columnApi.getAllDisplayedColumnGroups();
|
425
|
+
const eee = ee.find((c) => c.colId !== 'ag-Grid-AutoColumn' && c.colId !== '0');
|
426
|
+
if (eee && eee.colId) {
|
427
|
+
this.autoGroupColumnDef = {
|
428
|
+
headerName: eee.colDef.headerName,
|
429
|
+
width: eee.colDef.width,
|
430
|
+
cellRendererParams: { checkbox: this.showCheckBox },
|
431
|
+
field: eee.colDef.field,
|
432
|
+
};
|
433
|
+
}
|
434
|
+
}
|
435
|
+
}
|
436
|
+
refresh(route = []) {
|
437
|
+
if (this.remoteOperation && this.gridApi !== undefined) {
|
438
|
+
// this.gridApi.purgeServerSideCache(route);
|
439
|
+
this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
|
440
|
+
}
|
441
|
+
else {
|
442
|
+
this.dataSource.fetch(null);
|
443
|
+
}
|
444
|
+
}
|
445
|
+
internalGridCellClicked(e) {
|
446
|
+
this.cellClick.emit({
|
447
|
+
data: this.mapCellEvent(e),
|
448
|
+
component: this,
|
449
|
+
htmlElement: this.ref.nativeElement,
|
450
|
+
});
|
451
|
+
}
|
452
|
+
internalGridCellDoubleClicked(e) {
|
453
|
+
this.cellDbClick.emit({
|
454
|
+
data: this.mapCellEvent(e),
|
455
|
+
component: this,
|
456
|
+
htmlElement: this.ref.nativeElement,
|
457
|
+
});
|
458
|
+
}
|
459
|
+
internalGridCellFocused(e) {
|
460
|
+
this.cellFocuse.emit({
|
461
|
+
data: this.mapCellEvent(e),
|
462
|
+
htmlElement: this.ref.nativeElement,
|
463
|
+
component: this,
|
464
|
+
});
|
465
|
+
}
|
466
|
+
internalGridRowClicked(e) {
|
467
|
+
if (!e.node.group) {
|
468
|
+
this.rowClick.emit({
|
469
|
+
data: this.mapRowEvent(e),
|
470
|
+
component: this,
|
471
|
+
htmlElement: this.ref.nativeElement,
|
472
|
+
});
|
473
|
+
}
|
474
|
+
}
|
475
|
+
internalGridRowDoubleClicked(e) {
|
476
|
+
if (!e.node.group) {
|
477
|
+
this.rowDbClick.emit({
|
478
|
+
data: this.mapRowEvent(e),
|
479
|
+
htmlElement: this.ref.nativeElement,
|
480
|
+
component: this,
|
481
|
+
});
|
482
|
+
}
|
483
|
+
}
|
484
|
+
differenceOf2Arrays(array1, array2) {
|
485
|
+
const temp = [];
|
486
|
+
for (const i in array1) {
|
487
|
+
if (array2.indexOf(array1[i]) === -1) {
|
488
|
+
temp.push(array1[i]);
|
489
|
+
}
|
490
|
+
}
|
491
|
+
for (const i in array2) {
|
492
|
+
if (array1.indexOf(array2[i]) === -1) {
|
493
|
+
temp.push(array2[i]);
|
494
|
+
}
|
495
|
+
}
|
496
|
+
return temp.sort((a, b) => a - b);
|
497
|
+
}
|
498
|
+
rowSelectionChanged(e) {
|
499
|
+
if (e.node.selected == true) {
|
500
|
+
this.selectRow = this.selectRow.filter((c) => c[this.keyField] != e.data[this.keyField]);
|
501
|
+
this.selectRow.push(e.data);
|
502
|
+
}
|
503
|
+
else {
|
504
|
+
this.selectRow = this.selectRow.filter((c) => c[this.keyField] != e.data[this.keyField]);
|
505
|
+
}
|
506
|
+
this.rowSelectionChange.emit({
|
507
|
+
component: this,
|
508
|
+
data: e,
|
509
|
+
htmlElement: this.ref.nativeElement,
|
510
|
+
});
|
511
|
+
}
|
512
|
+
internalGridSelectionChanged(e) {
|
513
|
+
const args = { items: [] };
|
514
|
+
const oldNodes = this.oldSelectionNodes;
|
515
|
+
const nodes = this.gridApi.getSelectedNodes();
|
516
|
+
nodes.forEach((i) => {
|
517
|
+
args.items.push({
|
518
|
+
rowLevel: i.level,
|
519
|
+
rowIndex: i.rowIndex,
|
520
|
+
data: i.data,
|
521
|
+
});
|
522
|
+
});
|
523
|
+
this.selectionChanged.emit({
|
524
|
+
data: args,
|
525
|
+
component: this,
|
526
|
+
htmlElement: this.ref.nativeElement,
|
527
|
+
});
|
528
|
+
let action = nodes.length > oldNodes.length ? true : false;
|
529
|
+
const node = this.differenceOf2Arrays(nodes, oldNodes);
|
530
|
+
this.onRowSelectionChanged.emit({
|
531
|
+
component: this,
|
532
|
+
selected: action,
|
533
|
+
data: node,
|
534
|
+
htmlElement: this.ref.nativeElement,
|
535
|
+
});
|
536
|
+
this.oldSelectionNodes = nodes;
|
537
|
+
}
|
538
|
+
mapCellEvent(e) {
|
539
|
+
return {
|
540
|
+
rowLevel: 0,
|
541
|
+
column: e.column,
|
542
|
+
data: e.data,
|
543
|
+
rowIndex: e.rowIndex,
|
544
|
+
value: e.value,
|
545
|
+
};
|
546
|
+
}
|
547
|
+
mapRowEvent(e) {
|
548
|
+
return {
|
549
|
+
rowLevel: 0,
|
550
|
+
data: e.data,
|
551
|
+
rowIndex: e.rowIndex,
|
552
|
+
};
|
553
|
+
}
|
554
|
+
deselectAll() {
|
555
|
+
this.gridApi.deselectAll();
|
556
|
+
}
|
557
|
+
deselectByKeyField(keyField) {
|
558
|
+
this.gridApi.forEachNode((node) => {
|
559
|
+
if (node.data !== undefined) {
|
560
|
+
let select = false;
|
561
|
+
if (node.data[this.keyField] === keyField) {
|
562
|
+
node.setSelected(select);
|
563
|
+
this.selectRow = this.selectRow.filter((c) => c[this.keyField] != keyField);
|
564
|
+
}
|
565
|
+
}
|
566
|
+
});
|
567
|
+
}
|
568
|
+
internalGetRowClass = (p) => {
|
569
|
+
if (this.rowClass) {
|
570
|
+
if (this.rowClass instanceof Function) {
|
571
|
+
return this.rowClass({
|
572
|
+
rowIndex: p.node.rowIndex,
|
573
|
+
rowLevel: p.node.level,
|
574
|
+
data: p.data,
|
575
|
+
});
|
576
|
+
}
|
577
|
+
else {
|
578
|
+
return this.rowClass;
|
579
|
+
}
|
580
|
+
}
|
581
|
+
};
|
582
|
+
showLoading() {
|
583
|
+
if (this.gridApi) {
|
584
|
+
this.gridApi.showLoadingOverlay();
|
585
|
+
}
|
586
|
+
}
|
587
|
+
hideLoading() {
|
588
|
+
if (this.gridApi) {
|
589
|
+
this.gridApi.hideOverlay();
|
590
|
+
}
|
591
|
+
}
|
592
|
+
internalGridSizeChanged(e) {
|
593
|
+
if (e.clientWidth > 0 && e.clientHeight > 0) {
|
594
|
+
this.performSizeColumnsToFit(e.api);
|
595
|
+
}
|
596
|
+
}
|
597
|
+
internalGridFirstDataRendered(e) {
|
598
|
+
this.performSizeColumnsToFit(e.api);
|
599
|
+
}
|
600
|
+
performSizeColumnsToFit(api) {
|
601
|
+
if (this.sizeColumnsToFit) {
|
602
|
+
api.sizeColumnsToFit();
|
603
|
+
}
|
604
|
+
}
|
605
|
+
handlePageSize() {
|
606
|
+
const pagingPanel = this.ref.nativeElement.querySelector('.ag-paging-panel');
|
607
|
+
const select = document.createElement('select');
|
608
|
+
select.addEventListener('change', (e) => {
|
609
|
+
this.gridApi.paginationSetPageSize(Number(e.target.value));
|
610
|
+
this.gridApi.setCacheBlockSize(Number(e.target.value));
|
611
|
+
});
|
612
|
+
const option1 = document.createElement('option');
|
613
|
+
option1.setAttribute('value', '10');
|
614
|
+
option1.textContent = '10';
|
615
|
+
const option2 = document.createElement('option');
|
616
|
+
option2.setAttribute('value', '20');
|
617
|
+
option2.textContent = '20';
|
618
|
+
select.appendChild(option1);
|
619
|
+
select.appendChild(option2);
|
620
|
+
select.value = '20';
|
621
|
+
select.style.backgroundColor = 'white';
|
622
|
+
select.style.color = 'gray';
|
623
|
+
select.style.padding = '2px';
|
624
|
+
select.style.border = '1px solid gray';
|
625
|
+
select.style.borderRadius = '4px';
|
626
|
+
pagingPanel.appendChild(select);
|
627
|
+
}
|
628
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
629
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXDataGridComponent, selector: "ax-data-grid", inputs: { paginationAutoPageSize: "paginationAutoPageSize", paginationPageSize: "paginationPageSize", remoteOperation: "remoteOperation", rowMultiSelectWithClick: "rowMultiSelectWithClick", suppressRowClickSelection: "suppressRowClickSelection", suppressCellSelection: "suppressCellSelection", sizeColumnsToFit: "sizeColumnsToFit", showCheckBox: "showCheckBox", floatingFilter: "floatingFilter", selectionMode: "selectionMode", pagination: "pagination", selectRow: "selectRow", rowGroupPanelShow: "rowGroupPanelShow", loadOnInit: "loadOnInit", enableRangeSelection: "enableRangeSelection", keyField: "keyField", hasChildField: "hasChildField", searchText: "searchText", filter: "filter", columns: "columns", rowHeight: "rowHeight", dataSource: "dataSource", groupHideOpenParents: "groupHideOpenParents", rowClass: "rowClass", rtl: "rtl" }, outputs: { columnsChange: "columnsChange", cellClick: "cellClick", cellDbClick: "cellDbClick", cellFocuse: "cellFocuse", rowClick: "rowClick", rowDbClick: "rowDbClick", selectionChanged: "selectionChanged", rowSelectionChange: "rowSelectionChange", onRowSelectionChanged: "onRowSelectionChanged" }, queries: [{ propertyName: "searchInput", first: true, predicate: AXToolbarSearchComponent, descendants: true, static: true }, { propertyName: "toolbar", first: true, predicate: AXToolbarComponent, descendants: true, static: true }, { propertyName: "rowTemplate", first: true, predicate: AXDataGridRowTemplateComponent, descendants: true, static: true }, { propertyName: "gridDetailTemplate", first: true, predicate: AXDataGridDetailTemplateComponent, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_inlineColumns", predicate: AXGridDataColumn }], ngImport: i0, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [suppressCopyRowsToClipboard]=\"true\" [enableRangeSelection]=\"enableRangeSelection\" [serverSideStoreType]=\"'partial'\"\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\" [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\"\n [frameworkComponents]=\"frameworkComponents\" [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\"\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\" [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\n [cacheBlockSize]=\"cacheBlockSize\" [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\"\n (cellClicked)=\"internalGridCellClicked($event)\" (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\"\n (cellFocused)=\"internalGridCellFocused($event)\" (rowClicked)=\"internalGridRowClicked($event)\"\n (selectionChanged)=\"internalGridSelectionChanged($event)\" (rowSelected)=\"rowSelectionChanged($event)\"\n (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\" (gridReady)=\"internalGridReady($event)\"\n [groupSelectsChildren]=\"groupSelectsChildren\" [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [groupSelectsFiltered]=\"true\" [suppressCellSelection]=\"suppressCellSelection\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\" [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\"\n [isServerSideGroup]=\"isServerSideGroup\" [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [allowContextMenuWithControlKey]=\"false\"\n [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }], encapsulation: i0.ViewEncapsulation.None });
|
630
|
+
}
|
631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataGridComponent, decorators: [{
|
632
|
+
type: Component,
|
633
|
+
args: [{ selector: 'ax-data-grid', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [suppressCopyRowsToClipboard]=\"true\" [enableRangeSelection]=\"enableRangeSelection\" [serverSideStoreType]=\"'partial'\"\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\" [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\"\n [frameworkComponents]=\"frameworkComponents\" [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\"\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\" [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\n [cacheBlockSize]=\"cacheBlockSize\" [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\"\n (cellClicked)=\"internalGridCellClicked($event)\" (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\"\n (cellFocused)=\"internalGridCellFocused($event)\" (rowClicked)=\"internalGridRowClicked($event)\"\n (selectionChanged)=\"internalGridSelectionChanged($event)\" (rowSelected)=\"rowSelectionChanged($event)\"\n (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\" (gridReady)=\"internalGridReady($event)\"\n [groupSelectsChildren]=\"groupSelectsChildren\" [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [groupSelectsFiltered]=\"true\" [suppressCellSelection]=\"suppressCellSelection\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\" [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\"\n [isServerSideGroup]=\"isServerSideGroup\" [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [allowContextMenuWithControlKey]=\"false\"\n [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->" }]
|
634
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { paginationAutoPageSize: [{
|
635
|
+
type: Input
|
636
|
+
}], paginationPageSize: [{
|
637
|
+
type: Input
|
638
|
+
}], remoteOperation: [{
|
639
|
+
type: Input
|
640
|
+
}], rowMultiSelectWithClick: [{
|
641
|
+
type: Input
|
642
|
+
}], suppressRowClickSelection: [{
|
643
|
+
type: Input
|
644
|
+
}], suppressCellSelection: [{
|
645
|
+
type: Input
|
646
|
+
}], sizeColumnsToFit: [{
|
647
|
+
type: Input
|
648
|
+
}], showCheckBox: [{
|
649
|
+
type: Input
|
650
|
+
}], floatingFilter: [{
|
651
|
+
type: Input
|
652
|
+
}], selectionMode: [{
|
653
|
+
type: Input
|
654
|
+
}], pagination: [{
|
655
|
+
type: Input
|
656
|
+
}], selectRow: [{
|
657
|
+
type: Input
|
658
|
+
}], rowGroupPanelShow: [{
|
659
|
+
type: Input
|
660
|
+
}], loadOnInit: [{
|
661
|
+
type: Input
|
662
|
+
}], enableRangeSelection: [{
|
663
|
+
type: Input
|
664
|
+
}], keyField: [{
|
665
|
+
type: Input
|
666
|
+
}], hasChildField: [{
|
667
|
+
type: Input
|
668
|
+
}], searchText: [{
|
669
|
+
type: Input
|
670
|
+
}], filter: [{
|
671
|
+
type: Input
|
672
|
+
}], _inlineColumns: [{
|
673
|
+
type: ContentChildren,
|
674
|
+
args: [AXGridDataColumn]
|
675
|
+
}], columnsChange: [{
|
676
|
+
type: Output
|
677
|
+
}], columns: [{
|
678
|
+
type: Input
|
679
|
+
}], rowHeight: [{
|
680
|
+
type: Input
|
681
|
+
}], searchInput: [{
|
682
|
+
type: ContentChild,
|
683
|
+
args: [AXToolbarSearchComponent, { static: true }]
|
684
|
+
}], toolbar: [{
|
685
|
+
type: ContentChild,
|
686
|
+
args: [AXToolbarComponent, { static: true }]
|
687
|
+
}], rowTemplate: [{
|
688
|
+
type: ContentChild,
|
689
|
+
args: [AXDataGridRowTemplateComponent, { static: true }]
|
690
|
+
}], gridDetailTemplate: [{
|
691
|
+
type: ContentChild,
|
692
|
+
args: [AXDataGridDetailTemplateComponent, { static: true }]
|
693
|
+
}], _contentDataSource: [{
|
694
|
+
type: ContentChild,
|
695
|
+
args: [AXDataSourceComponent, { static: true }]
|
696
|
+
}], dataSource: [{
|
697
|
+
type: Input
|
698
|
+
}], groupHideOpenParents: [{
|
699
|
+
type: Input
|
700
|
+
}], cellClick: [{
|
701
|
+
type: Output
|
702
|
+
}], cellDbClick: [{
|
703
|
+
type: Output
|
704
|
+
}], cellFocuse: [{
|
705
|
+
type: Output
|
706
|
+
}], rowClick: [{
|
707
|
+
type: Output
|
708
|
+
}], rowDbClick: [{
|
709
|
+
type: Output
|
710
|
+
}], selectionChanged: [{
|
711
|
+
type: Output
|
712
|
+
}], rowSelectionChange: [{
|
713
|
+
type: Output
|
714
|
+
}], onRowSelectionChanged: [{
|
715
|
+
type: Output
|
716
|
+
}], rowClass: [{
|
717
|
+
type: Input
|
718
|
+
}], rtl: [{
|
719
|
+
type: Input
|
720
|
+
}] } });
|
721
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1YsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBYTlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRbEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEYsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7OztBQUV4QyxjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNqRCxP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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgSW5wdXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEYXRhU291cmNlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYR3JpZERhdGFDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEdyaWRPcHRpb25zLFxuICBDZWxsQ2xpY2tlZEV2ZW50LFxuICBSb3dDbGlja2VkRXZlbnQsXG4gIENlbGxFdmVudCxcbiAgUm93RXZlbnQsXG4gIEZpcnN0RGF0YVJlbmRlcmVkRXZlbnQsXG4gIEdyaWRTaXplQ2hhbmdlZEV2ZW50LFxuICBHcmlkQXBpLFxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5cbmltcG9ydCB7IExpY2Vuc2VNYW5hZ2VyIH0gZnJvbSAnYWctZ3JpZC1lbnRlcnByaXNlJztcbmltcG9ydCB7IFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWEdyaWRDZWxsRXZlbnQsXG4gIEFYR3JpZFJvd0V2ZW50LFxuICBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCxcbiAgQVhHcmlkUm93UGFyYW1zLFxufSBmcm9tICcuL2RhdGFncmlkLmV2ZW50cyc7XG5cbmltcG9ydCB7IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdGVtcGxhdGVzL3Jvdy10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQVhUb29sYmFyU2VhcmNoQ29tcG9uZW50LFxuICBBWFRvb2xiYXJDb21wb25lbnQsXG4gIEFYRGF0YUV2ZW50LFxuICBBWFZhbHVlRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9kZXRhaWwtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvciB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQgeyBBWERhdGVQaWNrZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvZGF0ZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcblxuTGljZW5zZU1hbmFnZXIucHJvdG90eXBlLmlzRGlzcGxheVdhdGVybWFyayA9ICgpID0+IHtcbiAgcmV0dXJuIGZhbHNlXG59XG5MaWNlbnNlTWFuYWdlci5wcm90b3R5cGUudmFsaWRhdGVMaWNlbnNlID0gZnVuY3Rpb24gKCkge1xuICAvL2NvbnNvbGUuaW5mbygnQ3JhY2tlZCBieSBBcmFzaCBPc2hub3VkaSEnKTtcbn07XG5cblxuXG5cbi8vIFdhdGVybWFya0NvbXAucHJvdG90eXBlLnNob3VsZERpc3BsYXlXYXRlcm1hcmsgPSBmdW5jdGlvbiAoKSB7XG4vLyAgIHJldHVybiBmYWxzZTtcbi8vIH1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8XG4gIEFYR3JpZERhdGFDb2x1bW5bXVxuPiB7XG4gIGRlY2xhcmUgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDZWxsRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxBWEdyaWRDZWxsRXZlbnQ+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5leHBvcnQgY2xhc3MgQVhEYWFncmlkUm93Q2xpY2tFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZFJvd0V2ZW50PiB7XG4gIGRlY2xhcmUgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93U2VsZWN0aW9uRXZlbnQ+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxhbnk+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG4gIGRlY2xhcmUgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb21wb25lbnQge1xuICBwcml2YXRlIGdyaWRBcGk7XG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaztcbiAgbG9jYWxlVGV4dDogYW55O1xuXG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcbiAgY29sdW1uRGVmczogYW55W10gPSBbXTtcbiAgcm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcms6IGFueTtcbiAgZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XG4gIGZyYW1ld29ya0NvbXBvbmVudHM6IGFueSA9IHt9O1xuICBpc0Z1bGxXaWR0aENlbGw6IEZ1bmN0aW9uO1xuICBpbnRlcm5hbEhlaWdodCA9ICcxMDAlJztcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyOiBhbnk7XG4gIGRldGFpbENlbGxSZW5kZXJlclBhcmFtczogYW55O1xuICBkZXRhaWxSb3dIZWlnaHQ6IG51bWJlcjtcbiAgbWFzdGVyRGV0YWlsID0gZmFsc2U7XG4gIHRyZWVEYXRhID0gZmFsc2U7XG4gIGVuYWJlbFNlbGVjdCA9IGZhbHNlO1xuICBncmlkVmlldyA9IGZhbHNlO1xuICBncm91cFNlbGVjdHNDaGlsZHJlbiA9IGZhbHNlO1xuICBvbGRTZWxlY3Rpb25Ob2RlczogYW55W10gPSBbXTtcbiAgLy8gQElucHV0KClcbiAgLy8gc2hvd1Jvd051bWJlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRpb25BdXRvUGFnZVNpemUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwYWdpbmF0aW9uUGFnZVNpemUgPSAyMDtcblxuICBjYWNoZUJsb2NrU2l6ZSA9IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW1vdGVPcGVyYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2sgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdXBwcmVzc0NlbGxTZWxlY3Rpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2l6ZUNvbHVtbnNUb0ZpdCA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2hvd0NoZWNrQm94ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBmbG9hdGluZ0ZpbHRlciA9IGZhbHNlO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIHRha2VDb3VudDogbnVtYmVyO1xuXG4gIGF1dG9Hcm91cENvbHVtbkRlZjogYW55ID0ge307XG5cbiAgQElucHV0KClcbiAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XG5cbiAgLy8gQElucHV0KClcbiAgLy8gYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzZWxlY3RSb3c6IGFueVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcm93R3JvdXBQYW5lbFNob3c6ICdhbHdheXMnIHwgJ25ldmVyJyA9ICduZXZlcic7XG5cbiAgQElucHV0KClcbiAgbG9hZE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZW5hYmxlUmFuZ2VTZWxlY3Rpb24gPSBmYWxzZVxuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIGdyb3VwRGVmYXVsdEV4cGFuZGVkOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XG5cbiAgQElucHV0KClcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ251bGwnO1xuXG4gIHByaXZhdGUgX3NlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWFyY2hUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRleHQ7XG4gIH1cbiAgcHVibGljIHNldCBzZWFyY2hUZXh0KHY6IHN0cmluZykge1xuICAgIGlmICh2ICE9PSB0aGlzLl9zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLl9zZWFyY2hUZXh0ID0gdjtcbiAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRRdWlja0ZpbHRlcih0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlcjogYW55W107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZmlsdGVyKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlsdGVyKHY6IGFueVtdKSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX2ZpbHRlcikge1xuICAgICAgdGhpcy5fZmlsdGVyID0gdjtcbiAgICAgIHRoaXMuX2ZpbHRlci5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIGNvbnN0IGZjID0gdGhpcy5ncmlkQXBpLmdldEZpbHRlckluc3RhbmNlKGYuZmllbGQpO1xuICAgICAgICBpZiAoZmMpIHtcbiAgICAgICAgICBjb25zdCBmZiA9IGZjLmdldEZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgICAgICAgZmYuc2V0TW9kZWwoZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oQVhHcmlkRGF0YUNvbHVtbilcbiAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uczogUXVlcnlMaXN0PEFYR3JpZERhdGFDb2x1bW4+O1xuXG4gIEBPdXRwdXQoKVxuICBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudD4oKTtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBBWEdyaWREYXRhQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFYR3JpZERhdGFDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubGluZUNvbHVtbnNcbiAgICAgID8gWy4uLnRoaXMuX2NvbHVtbnMsIC4uLnRoaXMuX2lubGluZUNvbHVtbnMudG9BcnJheSgpXVxuICAgICAgOiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgcHVibGljIHNldCBjb2x1bW5zKHZhbDogQVhHcmlkRGF0YUNvbHVtbltdKSB7XG4gICAgaWYgKHZhbCAmJiB2YWwubGVuZ3RoKSB7XG4gICAgICBsZXQgb2xkID0gdGhpcy5fY29sdW1ucztcbiAgICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XG4gICAgICB0aGlzLmNvbHVtbnNDaGFuZ2UuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgb2xkVmFsdWU6IG9sZCxcbiAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0Q29sRGVmOiBhbnkgPSB7XG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGZsb2F0aW5nRmlsdGVyOiB0cnVlLFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHJvd0hlaWdodDogYW55O1xuXG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNlYXJjaElucHV0OiBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRvb2xiYXI6IEFYVG9vbGJhckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcm93VGVtcGxhdGU6IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ3JpZERldGFpbFRlbXBsYXRlOiBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xuICB9XG5cbiAgQElucHV0KClcbiAgZ3JvdXBIaWRlT3BlblBhcmVudHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgY2VsbERiQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjZWxsRm9jdXNlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgcm93Q2xhc3M/OiAoXG4gICAgcGFyYW1zOiBBWEdyaWRSb3dQYXJhbXNcbiAgKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICBASW5wdXQoKVxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMubG9jYWxlVGV4dCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGFHcmlkJyk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNIZWlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbGJhcikge1xuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9IGBjYWxjKDEwMCUgLSAkezQwfXB4KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxIZWlnaHQgPSAnMTAwJSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaW50ZW5hbEdyaWREYXRhU291cmNlKCkge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB7XG4gICAgICByb3dDb3VudDogbnVsbCxcbiAgICAgIGdldFJvd3M6IChwYXJhbXMpID0+IHtcbiAgICAgICAgdGhhdC5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrID0gcGFyYW1zLnN1Y2Nlc3NDYWxsYmFjaztcblxuICAgICAgICBjb25zdCBsb2FkUGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XG5cbiAgICAgICAgbG9hZFBhcmFtcy5zZWFyY2hUZXh0ID0gdGhhdC5zZWFyY2hUZXh0O1xuXG4gICAgICAgIGxvYWRQYXJhbXMuc2tpcCA9IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93O1xuXG4gICAgICAgIGxvYWRQYXJhbXMudGFrZSA9IHBhcmFtcy5yZXF1ZXN0LmVuZFJvdyAtIHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93O1xuXG4gICAgICAgIGxvYWRQYXJhbXMuc29ydCA9IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbC5tYXAoKGMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmllbGQ6IGMuY29sSWQsXG4gICAgICAgICAgICBkaXI6IGMuc29ydCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBsb2FkUGFyYW1zLmdyb3VwID0ge1xuICAgICAgICAgIGZpZWxkczogcGFyYW1zLnJlcXVlc3Qucm93R3JvdXBDb2xzLm1hcCgocikgPT4gci5maWVsZCksXG4gICAgICAgICAga2V5czogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLFxuICAgICAgICAgIHBhcmVudERhdGE6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGEsXG4gICAgICAgIH07XG5cbiAgICAgICAgbG9hZFBhcmFtcy5maWx0ZXIgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbDtcblxuICAgICAgICB0aGF0LmRhdGFTb3VyY2UuZmV0Y2gobG9hZFBhcmFtcyk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgZ2V0TWFpbk1lbnVJdGVtcyhlKSB7XG4gICAgcmV0dXJuIFsncGluU3ViTWVudScsICdzZXBhcmF0b3InXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXN0cm95KCk7XG4gIH1cblxuICBpc1NlcnZlclNpZGVHcm91cCA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5oYXNDaGlsZEZpZWxkXTtcbiAgfTtcblxuICBnZXRDb2x1bW5EZWZzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmcygpO1xuICB9O1xuXG4gIGdldEN1cnJlbnRQYWdlTnVtYmVyID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxLFxuICAgICAgdG90YWw6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpLFxuICAgIH07XG4gIH07XG5cbiAgcGFnaW5hdGlvbkdvVG9QYWdlKG51bWJlcikge1xuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UobnVtYmVyIC0gMSk7XG4gIH1cblxuICBnZXRTZXJ2ZXJTaWRlR3JvdXBLZXkgPSAoZSkgPT4ge1xuICAgIHJldHVybiBlW3RoaXMua2V5RmllbGRdO1xuICB9O1xuICBpbnRlcm5hbEdyaWRSZWFkeShncmlkT3B0aW9ucykge1xuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiAhdGhpcy5wYWdpbmF0aW9uQXV0b1BhZ2VTaXplKSB7XG4gICAgICB0aGlzLmhhbmRsZVBhZ2VTaXplKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FjaGVCbG9ja1NpemUgPVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA+IDIwID8gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgOiAxMDA7XG4gICAgfVxuXG4gICAgdGhpcy5ncmlkQXBpID0gZ3JpZE9wdGlvbnMuYXBpO1xuXG4gICAgdGhpcy5tYXBDb2x1bW5zKCk7XG4gICAgdGhpcy5jYWxjSGVpZ2h0KCk7XG5cbiAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCkge1xuICAgICAgdGhpcy5sb2FkT25Jbml0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlKSB7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yayA9IHRoaXMucm93VGVtcGxhdGUucmVuZGVyZXI7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMucm93VGVtcGxhdGUucGFyYW1zO1xuICAgIH1cbiAgICB0aGlzLmZyYW1ld29ya0NvbXBvbmVudHMuYWdEYXRlSW5wdXQgPSBBWERhdGVQaWNrZXJGaWx0ZXJDb21wb25lbnQ7XG5cbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMubWFzdGVyRGV0YWlsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucGFyYW1zO1xuICAgICAgdGhpcy5kZXRhaWxDZWxsUmVuZGVyZXIgPSAnZGV0YWlsUmVuZGVyZXJGcmFtZXdvcmsnO1xuICAgICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmRldGFpbFJlbmRlcmVyRnJhbWV3b3JrID1cbiAgICAgICAgdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucmVuZGVyZXI7XG5cbiAgICAgIHRoaXMuZGV0YWlsUm93SGVpZ2h0ID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUuaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLmlzRnVsbFdpZHRoQ2VsbCA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGF0LnJvd1RlbXBsYXRlICE9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmdyb3VwU2VsZWN0c0NoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUZpZWxkICE9PSAnbnVsbCcgJiYgdGhpcy5oYXNDaGlsZEZpZWxkICE9PSAnbnVsbCcpIHtcbiAgICAgIHRoaXMucm93R3JvdXBQYW5lbFNob3cgPSAnbmV2ZXInO1xuICAgICAgdGhpcy50cmVlRGF0YSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5yb3dNb2RlbFR5cGUgPSAnc2VydmVyU2lkZSc7XG4gICAgfVxuICAgIC8vXG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcbiAgICAgIHRoaXMucnRsID1cbiAgICAgICAgd2luZG93XG4gICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xuICAgIH1cbiAgICAvL1xuICB9XG5cbiAgZ3JpZFNlbGVjdFJvdygpIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0Um93ICYmXG4gICAgICAgIHRoaXMuc2VsZWN0Um93Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0Um93WzBdICE9ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvdy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RSb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5yb3dJbmRleCAhPSB1bmRlZmluZWQgJiYgaXRlbS5yb3dMZXZlbCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW0uZGF0YVt0aGlzLmtleUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlGaWVsZCAhPT0gJ251bGwnICYmIG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaXRlbVt0aGlzLmtleUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWJ1aWxkR3JpZCgpIHtcbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJlZURhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+IGMucmVuZGVyKCkpO1xuXG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKFxuICAgICAgICAoYykgPT4gYy5yb3dHcm91cEluZGV4ID09ICcwJyAmJiBjLmZpZWxkICE9PSAnJ1xuICAgICAgKTtcblxuICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXG4gICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IGNoZWNrYm94OiB0aGlzLnNob3dDaGVja0JveCB9LFxuICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgIGlmIChlbG0ucm93R3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZWxtLmhpZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5ncmlkVmlldyA9IHRydWU7XG5cbiAgICB0aGlzLmVuYWJlbFNlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5kYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkLnN1YnNjcmliZSgoX2RhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IF9kYXRhLmRhdGEucmVzdWx0O1xuICAgICAgdGhpcy5oaWRlTG9hZGluZygpO1xuICAgICAgbGV0IGl0ZW1zOiBhbnlbXTtcbiAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0O1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0Lml0ZW1zO1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKFtdLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soaXRlbXMsIHRvdGFsQ291bnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKFtdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdyaWRTZWxlY3RSb3coKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkZldGNoU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjLnZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG1hcENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jaGVja2JveFNlbGVjdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgICB0aGlzLmNvbHVtbkRlZnNbMF0uZmllbGQgPT09ICcnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzFdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jZWxsUmVuZGVyZXIgPSAnYWdHcm91cENlbGxSZW5kZXJlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKFxuICAgICAgICAoYykgPT4gYy5yb3dHcm91cEluZGV4ID09PSB1bmRlZmluZWQgJiYgYy5maWVsZCAhPT0gJydcbiAgICAgICk7XG4gICAgICBpZiAoZ3JvdXBDb2x1bW4gJiYgdGhpcy5ncm91cEhpZGVPcGVuUGFyZW50cyA9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBncm91cENvbHVtbi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgICAgZmllbGQ6IGdyb3VwQ29sdW1uLmZpZWxkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgIGlmIChlbG0ucm93R3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgIGVsbS5oaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRpc3BsYXllZENvbHVtbnNDaGFuZ2VkKGUpIHtcbiAgICBpZiAodGhpcy5oYXNDaGlsZEZpZWxkID09PSAnbnVsbCcpIHtcbiAgICAgIGNvbnN0IGVlID0gZS5jb2x1bW5BcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1uR3JvdXBzKCk7XG4gICAgICBjb25zdCBlZWUgPSBlZS5maW5kKFxuICAgICAgICAoYykgPT4gYy5jb2xJZCAhPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgJiYgYy5jb2xJZCAhPT0gJzAnXG4gICAgICApO1xuICAgICAgaWYgKGVlZSAmJiBlZWUuY29sSWQpIHtcbiAgICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgICAgaGVhZGVyTmFtZTogZWVlLmNvbERlZi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBlZWUuY29sRGVmLndpZHRoLFxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcbiAgICAgICAgICBmaWVsZDogZWVlLmNvbERlZi5maWVsZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWZyZXNoKHJvdXRlOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAgdGhpcy5ncmlkQXBpLnB1cmdlU2VydmVyU2lkZUNhY2hlKHJvdXRlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChudWxsKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbERiQ2xpY2suZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbEZvY3VzZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbEZvY3VzZS5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRSb3dDbGlja2VkKGU6IFJvd0NsaWNrZWRFdmVudCkge1xuICAgIGlmICghZS5ub2RlLmdyb3VwKSB7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgICBkYXRhOiB0aGlzLm1hcFJvd0V2ZW50KGUpLFxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkUm93RG91YmxlQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgaWYgKCFlLm5vZGUuZ3JvdXApIHtcbiAgICAgIHRoaXMucm93RGJDbGljay5lbWl0KHtcbiAgICAgICAgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSxcbiAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRpZmZlcmVuY2VPZjJBcnJheXMoYXJyYXkxOiBhbnksIGFycmF5MjogYW55KSB7XG4gICAgY29uc3QgdGVtcCA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBhcnJheTEpIHtcbiAgICAgIGlmIChhcnJheTIuaW5kZXhPZihhcnJheTFbaV0pID09PSAtMSkge1xuICAgICAgICB0ZW1wLnB1c2goYXJyYXkxW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIGluIGFycmF5Mikge1xuICAgICAgaWYgKGFycmF5MS5pbmRleE9mKGFycmF5MltpXSkgPT09IC0xKSB7XG4gICAgICAgIHRlbXAucHVzaChhcnJheTJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICByb3dTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgICBpZiAoZS5ub2RlLnNlbGVjdGVkID09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBlLmRhdGFbdGhpcy5rZXlGaWVsZF1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdFJvdy5wdXNoKGUuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBlLmRhdGFbdGhpcy5rZXlGaWVsZF1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgZGF0YTogZSxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgYXJnczogQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQgPSB7IGl0ZW1zOiBbXSB9O1xuICAgIGNvbnN0IG9sZE5vZGVzID0gdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgbm9kZXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgYXJncy5pdGVtcy5wdXNoKHtcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXG4gICAgICAgIHJvd0luZGV4OiBpLnJvd0luZGV4LFxuICAgICAgICBkYXRhOiBpLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICBkYXRhOiBhcmdzLFxuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gICAgbGV0IGFjdGlvbiA9IG5vZGVzLmxlbmd0aCA+IG9sZE5vZGVzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kaWZmZXJlbmNlT2YyQXJyYXlzKG5vZGVzLCBvbGROb2Rlcyk7XG4gICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBzZWxlY3RlZDogYWN0aW9uLFxuICAgICAgZGF0YTogbm9kZSxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICAgIHRoaXMub2xkU2VsZWN0aW9uTm9kZXMgPSBub2RlcztcbiAgfVxuXG4gIHByaXZhdGUgbWFwQ2VsbEV2ZW50KGU6IENlbGxFdmVudCk6IEFYR3JpZENlbGxFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgY29sdW1uOiBlLmNvbHVtbixcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICAgIHJvd0luZGV4OiBlLnJvd0luZGV4LFxuICAgICAgdmFsdWU6IGUudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUm93RXZlbnQoZTogUm93RXZlbnQpOiBBWEdyaWRSb3dFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdEJ5S2V5RmllbGQoa2V5RmllbGQpIHtcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGtleUZpZWxkKSB7XG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT0ga2V5RmllbGRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdldFJvd0NsYXNzID0gKHA6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLnJvd0NsYXNzKSB7XG4gICAgICBpZiAodGhpcy5yb3dDbGFzcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzKHtcbiAgICAgICAgICByb3dJbmRleDogcC5ub2RlLnJvd0luZGV4LFxuICAgICAgICAgIHJvd0xldmVsOiBwLm5vZGUubGV2ZWwsXG4gICAgICAgICAgZGF0YTogcC5kYXRhLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzaG93TG9hZGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuc2hvd0xvYWRpbmdPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZUxvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgdGhpcy5ncmlkQXBpLmhpZGVPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoZTogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5jbGllbnRXaWR0aCA+IDAgJiYgZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLnBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGUuYXBpKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZChlOiBGaXJzdERhdGFSZW5kZXJlZEV2ZW50KSB7XG4gICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gIH1cblxuICBwcml2YXRlIHBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGFwaTogR3JpZEFwaSkge1xuICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdlU2l6ZSgpIHtcbiAgICBjb25zdCBwYWdpbmdQYW5lbCA9XG4gICAgICB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1wYWdpbmctcGFuZWwnKTtcblxuICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uU2V0UGFnZVNpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0Q2FjaGVCbG9ja1NpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb24xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cbiAgICBvcHRpb24xLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMTAnKTtcblxuICAgIG9wdGlvbjEudGV4dENvbnRlbnQgPSAnMTAnO1xuXG4gICAgY29uc3Qgb3B0aW9uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXG4gICAgb3B0aW9uMi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJzIwJyk7XG5cbiAgICBvcHRpb24yLnRleHRDb250ZW50ID0gJzIwJztcblxuICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24xKTtcblxuICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24yKTtcblxuICAgIHNlbGVjdC52YWx1ZSA9ICcyMCc7XG5cbiAgICBzZWxlY3Quc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcblxuICAgIHNlbGVjdC5zdHlsZS5jb2xvciA9ICdncmF5JztcblxuICAgIHNlbGVjdC5zdHlsZS5wYWRkaW5nID0gJzJweCc7XG5cbiAgICBzZWxlY3Quc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBncmF5JztcblxuICAgIHNlbGVjdC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcblxuICAgIHBhZ2luZ1BhbmVsLmFwcGVuZENoaWxkKHNlbGVjdCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1ncmlkLXRvb2xiYXJcIiAqbmdJZj1cInRvb2xiYXJcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtdG9vbGJhclwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPCEtLSBbZW5hYmxlU29ydGluZ109XCJ0cnVlXCIgIFtlbmFibGVDb2xSZXNpemVdPVwidHJ1ZVwiIFtlbmFibGVGaWx0ZXJdPVwiYWxsb3dGaWx0ZXJpbmdcIiAgLS0+XG5cblxuPGFnLWdyaWQtYW5ndWxhciAqbmdJZj1cImdyaWRWaWV3XCIgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW1cIiBbZ2V0Um93Q2xhc3NdPVwiaW50ZXJuYWxHZXRSb3dDbGFzc1wiXG4gIFtzdXBwcmVzc0NvcHlSb3dzVG9DbGlwYm9hcmRdPVwidHJ1ZVwiIFtlbmFibGVSYW5nZVNlbGVjdGlvbl09XCJlbmFibGVSYW5nZVNlbGVjdGlvblwiIFtzZXJ2ZXJTaWRlU3RvcmVUeXBlXT1cIidwYXJ0aWFsJ1wiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaW50ZXJuYWxIZWlnaHRcIiBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2VuYWJsZVJ0bF09XCJydGxcIiBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgW3Jvd0dyb3VwUGFuZWxTaG93XT1cInJvd0dyb3VwUGFuZWxTaG93XCIgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIiBbZGV0YWlsUm93SGVpZ2h0XT1cImRldGFpbFJvd0hlaWdodFwiXG4gIFtwYWdpbmF0aW9uQXV0b1BhZ2VTaXplXT1cInBhZ2luYXRpb25BdXRvUGFnZVNpemVcIiBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiIFtzdXBwcmVzc01lbnVIaWRlXT1cInRydWVcIlxuICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCIgW2lzRnVsbFdpZHRoQ2VsbF09XCJpc0Z1bGxXaWR0aENlbGxcIiBbcm93U2VsZWN0aW9uXT1cInNlbGVjdGlvbk1vZGVcIlxuICBbcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tdPVwicm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tcIiBbZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrXT1cImZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29ya1wiXG4gIFtjYWNoZUJsb2NrU2l6ZV09XCJjYWNoZUJsb2NrU2l6ZVwiIFtmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zXCJcbiAgKGNlbGxDbGlja2VkKT1cImludGVybmFsR3JpZENlbGxDbGlja2VkKCRldmVudClcIiAoY2VsbERvdWJsZUNsaWNrZWQpPVwiaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXG4gIChjZWxsRm9jdXNlZCk9XCJpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZCgkZXZlbnQpXCIgKHJvd0NsaWNrZWQpPVwiaW50ZXJuYWxHcmlkUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgKHNlbGVjdGlvbkNoYW5nZWQpPVwiaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgKHJvd1NlbGVjdGVkKT1cInJvd1NlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIChyb3dEb3VibGVDbGlja2VkKT1cImludGVybmFsR3JpZFJvd0RvdWJsZUNsaWNrZWQoJGV2ZW50KVwiIChncmlkUmVhZHkpPVwiaW50ZXJuYWxHcmlkUmVhZHkoJGV2ZW50KVwiXG4gIFtncm91cFNlbGVjdHNDaGlsZHJlbl09XCJncm91cFNlbGVjdHNDaGlsZHJlblwiIFtzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXT1cInN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25cIlxuICBbZ3JvdXBTZWxlY3RzRmlsdGVyZWRdPVwidHJ1ZVwiIFtzdXBwcmVzc0NlbGxTZWxlY3Rpb25dPVwic3VwcHJlc3NDZWxsU2VsZWN0aW9uXCJcbiAgW2F1dG9Hcm91cENvbHVtbkRlZl09XCJhdXRvR3JvdXBDb2x1bW5EZWZcIiBbc3VwcHJlc3NBZ2dGdW5jSW5IZWFkZXJdPVwidHJ1ZVwiIFt0cmVlRGF0YV09XCJ0cmVlRGF0YVwiIFthbmltYXRlUm93c109XCJ0cnVlXCJcbiAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCIgW2dldFNlcnZlclNpZGVHcm91cEtleV09XCJnZXRTZXJ2ZXJTaWRlR3JvdXBLZXlcIiBbbWFzdGVyRGV0YWlsXT1cIm1hc3RlckRldGFpbFwiXG4gIFtkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zXCIgW2RldGFpbENlbGxSZW5kZXJlcl09XCJkZXRhaWxDZWxsUmVuZGVyZXJcIlxuICAoZ3JpZFNpemVDaGFuZ2VkKT1cImludGVybmFsR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIiAoZmlyc3REYXRhUmVuZGVyZWQpPVwiaW50ZXJuYWxHcmlkRmlyc3REYXRhUmVuZGVyZWQoJGV2ZW50KVwiXG4gIFtsb2NhbGVUZXh0XT1cImxvY2FsZVRleHRcIiBbZ3JvdXBIaWRlT3BlblBhcmVudHNdPVwiZ3JvdXBIaWRlT3BlblBhcmVudHNcIiBbYWxsb3dDb250ZXh0TWVudVdpdGhDb250cm9sS2V5XT1cImZhbHNlXCJcbiAgW2dldE1haW5NZW51SXRlbXNdPVwiZ2V0TWFpbk1lbnVJdGVtc1wiPlxuPC9hZy1ncmlkLWFuZ3VsYXI+XG5cblxuPCEtLSAoZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQpPVwiZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoJGV2ZW50KVwiICAtLT4iXX0=
|