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