@paperless/angular 0.1.0-alpha.39 → 0.1.0-alpha.390

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +9 -1
  2. package/esm2020/lib/animations/fade.mjs +22 -0
  3. package/esm2020/lib/animations/index.mjs +3 -0
  4. package/esm2020/lib/animations/slide.mjs +20 -0
  5. package/esm2020/lib/base/form.component.mjs +105 -0
  6. package/esm2020/lib/base/index.mjs +3 -1
  7. package/esm2020/lib/base/upload.component.mjs +57 -0
  8. package/esm2020/lib/base/value-accessor.mjs +8 -8
  9. package/esm2020/lib/directives/index.mjs +15 -4
  10. package/esm2020/lib/directives/p-datepicker.directive.mjs +37 -0
  11. package/esm2020/lib/directives/p-page-size-select.directive.mjs +42 -0
  12. package/esm2020/lib/directives/p-pagination.directive.mjs +42 -0
  13. package/esm2020/lib/directives/p-select.directive.mjs +37 -0
  14. package/esm2020/lib/modules/index.mjs +8 -0
  15. package/esm2020/lib/modules/overlay/index.mjs +4 -0
  16. package/esm2020/lib/modules/overlay/overlay.module.mjs +38 -0
  17. package/esm2020/lib/modules/overlay/overlay.ref.mjs +12 -0
  18. package/esm2020/lib/modules/overlay/services/index.mjs +4 -0
  19. package/esm2020/lib/modules/overlay/services/overlay.service.mjs +74 -0
  20. package/esm2020/lib/modules/table/base/index.mjs +2 -0
  21. package/esm2020/lib/modules/table/base/table.component.mjs +201 -0
  22. package/esm2020/lib/modules/table/components/index.mjs +8 -0
  23. package/esm2020/lib/modules/table/components/table/constants.mjs +3 -0
  24. package/esm2020/lib/modules/table/components/table/table.component.mjs +673 -0
  25. package/esm2020/lib/modules/table/components/table-cell/table-cell.component.mjs +167 -0
  26. package/esm2020/lib/modules/table/components/table-column/table-column.component.mjs +37 -0
  27. package/esm2020/lib/modules/table/directives/index.mjs +21 -0
  28. package/esm2020/lib/modules/table/directives/p-table-custom-filter.directive.mjs +13 -0
  29. package/esm2020/lib/modules/table/directives/p-table-filter-modal.directive.mjs +13 -0
  30. package/esm2020/lib/modules/table/directives/p-table-footer.directive.mjs +52 -0
  31. package/esm2020/lib/modules/table/directives/p-table-header.directive.mjs +60 -0
  32. package/esm2020/lib/modules/table/directives/p-table-ngx.directive.mjs +121 -0
  33. package/esm2020/lib/modules/table/directives/p-table.directive.mjs +78 -0
  34. package/esm2020/lib/modules/table/index.mjs +6 -0
  35. package/esm2020/lib/modules/table/table.module.mjs +29 -0
  36. package/esm2020/lib/modules/table/utils.mjs +25 -0
  37. package/esm2020/lib/modules/toast/components/index.mjs +4 -0
  38. package/esm2020/lib/modules/toast/components/toast-container/toast-container.component.mjs +36 -0
  39. package/esm2020/lib/modules/toast/directives/index.mjs +4 -0
  40. package/esm2020/lib/modules/toast/directives/toast.directive.mjs +51 -0
  41. package/esm2020/lib/modules/toast/index.mjs +6 -0
  42. package/esm2020/lib/modules/toast/services/index.mjs +4 -0
  43. package/esm2020/lib/modules/toast/services/toast.service.mjs +53 -0
  44. package/esm2020/lib/modules/toast/toast.module.mjs +22 -0
  45. package/esm2020/lib/modules/toast/types.mjs +10 -0
  46. package/esm2020/lib/paperless.module.mjs +32 -11
  47. package/esm2020/lib/pipes/currency.pipe.mjs +20 -0
  48. package/esm2020/lib/pipes/date.pipe.mjs +20 -0
  49. package/esm2020/lib/pipes/index.mjs +8 -0
  50. package/esm2020/lib/pipes/safe.pipe.mjs +33 -0
  51. package/esm2020/lib/stencil/angular-component-lib/utils.mjs +6 -8
  52. package/esm2020/lib/stencil/components.mjs +1012 -122
  53. package/esm2020/lib/stencil/index.mjs +36 -1
  54. package/esm2020/lib/stencil.module.mjs +17 -0
  55. package/esm2020/public-api.mjs +6 -1
  56. package/fesm2015/paperless-angular.mjs +3239 -279
  57. package/fesm2015/paperless-angular.mjs.map +1 -1
  58. package/fesm2020/paperless-angular.mjs +3252 -279
  59. package/fesm2020/paperless-angular.mjs.map +1 -1
  60. package/lib/animations/fade.d.ts +2 -0
  61. package/lib/animations/index.d.ts +2 -0
  62. package/lib/animations/slide.d.ts +2 -0
  63. package/lib/base/form.component.d.ts +15 -0
  64. package/lib/base/index.d.ts +2 -0
  65. package/lib/base/upload.component.d.ts +16 -0
  66. package/lib/base/value-accessor.d.ts +6 -6
  67. package/lib/directives/index.d.ts +6 -3
  68. package/lib/directives/p-datepicker.directive.d.ts +9 -0
  69. package/lib/directives/p-page-size-select.directive.d.ts +10 -0
  70. package/lib/directives/{pagination.directive.d.ts → p-pagination.directive.d.ts} +3 -3
  71. package/lib/directives/p-select.directive.d.ts +9 -0
  72. package/lib/modules/index.d.ts +5 -0
  73. package/lib/modules/overlay/index.d.ts +3 -0
  74. package/lib/modules/overlay/overlay.module.d.ts +12 -0
  75. package/lib/modules/overlay/overlay.ref.d.ts +9 -0
  76. package/lib/modules/overlay/services/index.d.ts +3 -0
  77. package/lib/modules/overlay/services/overlay.service.d.ts +24 -0
  78. package/lib/modules/table/base/index.d.ts +1 -0
  79. package/lib/modules/table/base/table.component.d.ts +58 -0
  80. package/lib/modules/table/components/index.d.ts +7 -0
  81. package/lib/modules/table/components/table/constants.d.ts +2 -0
  82. package/lib/modules/table/components/table/table.component.d.ts +247 -0
  83. package/lib/modules/table/components/table-cell/table-cell.component.d.ts +45 -0
  84. package/lib/modules/table/components/table-column/table-column.component.d.ts +17 -0
  85. package/lib/modules/table/directives/index.d.ts +12 -0
  86. package/lib/modules/table/directives/p-table-custom-filter.directive.d.ts +5 -0
  87. package/lib/modules/table/directives/p-table-filter-modal.directive.d.ts +5 -0
  88. package/lib/modules/table/directives/p-table-footer.directive.d.ts +11 -0
  89. package/lib/modules/table/directives/p-table-header.directive.d.ts +17 -0
  90. package/lib/modules/table/directives/p-table-ngx.directive.d.ts +27 -0
  91. package/lib/modules/table/directives/p-table.directive.d.ts +22 -0
  92. package/lib/modules/table/index.d.ts +5 -0
  93. package/lib/modules/table/table.module.d.ts +17 -0
  94. package/lib/modules/table/utils.d.ts +10 -0
  95. package/lib/modules/toast/components/index.d.ts +3 -0
  96. package/lib/modules/toast/components/toast-container/toast-container.component.d.ts +17 -0
  97. package/lib/modules/toast/directives/index.d.ts +3 -0
  98. package/lib/modules/toast/directives/toast.directive.d.ts +16 -0
  99. package/lib/modules/toast/index.d.ts +5 -0
  100. package/lib/modules/toast/services/index.d.ts +3 -0
  101. package/lib/modules/toast/services/toast.service.d.ts +12 -0
  102. package/lib/modules/toast/toast.module.d.ts +10 -0
  103. package/lib/modules/toast/types.d.ts +31 -0
  104. package/lib/paperless.module.d.ts +15 -3
  105. package/lib/pipes/currency.pipe.d.ts +10 -0
  106. package/lib/pipes/date.pipe.d.ts +10 -0
  107. package/lib/pipes/index.d.ts +7 -0
  108. package/lib/pipes/safe.pipe.d.ts +10 -0
  109. package/lib/stencil/components.d.ts +468 -49
  110. package/lib/stencil/index.d.ts +1 -1
  111. package/lib/stencil.module.d.ts +7 -0
  112. package/package.json +8 -6
  113. package/paperless.css +436 -0
  114. package/public-api.d.ts +5 -0
  115. package/esm2020/lib/directives/pagination.directive.mjs +0 -42
  116. /package/{paperless-angular.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,673 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, HostListener, Input, Output, TemplateRef, } from '@angular/core';
3
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
4
+ import { BehaviorSubject, distinctUntilChanged } from 'rxjs';
5
+ import { TableCustomFilterDirective, TableFilterModalDirective, } from '../../directives';
6
+ import { TableColumn } from '../table-column/table-column.component';
7
+ import { defaultSize, defaultSizeOptions } from './constants';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "../../../../stencil/components";
11
+ import * as i3 from "../table-cell/table-cell.component";
12
+ import * as i4 from "../../directives/p-table-footer.directive";
13
+ import * as i5 from "../../directives/p-table-header.directive";
14
+ let Table = class Table {
15
+ constructor() {
16
+ /**
17
+ * Wether data is loading
18
+ */
19
+ this.loading = false;
20
+ /**
21
+ * Wether the header should show loading state
22
+ */
23
+ this.headerLoading = false;
24
+ /**
25
+ * Wether the footer should show loading state
26
+ */
27
+ this.footerLoading = false;
28
+ /**
29
+ * The amount of loading rows to show
30
+ */
31
+ this.amountOfLoadingRows = 6;
32
+ /**
33
+ * Wether to enable selection
34
+ */
35
+ this.enableRowSelection = true;
36
+ /**
37
+ * Wether to enable row clicking
38
+ */
39
+ this.enableRowClick = true;
40
+ /**
41
+ * The current selection of items
42
+ */
43
+ this.selectedRows = [];
44
+ /**
45
+ * Event whenever the current selection changes
46
+ */
47
+ this.selectedRowsChange = new EventEmitter();
48
+ /**
49
+ * Event whenever a row is clicked
50
+ */
51
+ this.rowClick = new EventEmitter();
52
+ /**
53
+ * Event whenever a row is selected
54
+ */
55
+ this.rowSelected = new EventEmitter();
56
+ /**
57
+ * Event whenever a row is deselected
58
+ */
59
+ this.rowDeselected = new EventEmitter();
60
+ /** START HEADER */
61
+ /**
62
+ * Wether to show the header
63
+ */
64
+ this.enableHeader = true;
65
+ /**
66
+ * Quick filters to show
67
+ */
68
+ this.quickFilters = [];
69
+ /**
70
+ * Wether to show the search input
71
+ */
72
+ this.enableSearch = true;
73
+ /**
74
+ * Wether to show the filter button
75
+ */
76
+ this.enableFilter = true;
77
+ /**
78
+ * Wether to show the edit button
79
+ */
80
+ this.enableEdit = true;
81
+ /**
82
+ * Wether the edit button is loading
83
+ */
84
+ this.editButtonLoading = false;
85
+ /**
86
+ * The edit button icon
87
+ */
88
+ this.editButtonIcon = 'pencil';
89
+ /**
90
+ * Event when one of the quick filters is clicked
91
+ */
92
+ this.quickFilter = new EventEmitter();
93
+ /**
94
+ * Event when the query changes
95
+ */
96
+ this.queryChange = new EventEmitter();
97
+ /**
98
+ * Event when the filter button is clicked
99
+ */
100
+ this.filter = new EventEmitter();
101
+ /**
102
+ * Event when the edit button is clicked
103
+ */
104
+ this.edit = new EventEmitter();
105
+ /** START FOOTER */
106
+ /**
107
+ * Wether to show the footer
108
+ */
109
+ this.enableFooter = true;
110
+ /**
111
+ * Wether to enable page size select
112
+ */
113
+ this.enablePageSize = true;
114
+ /**
115
+ * Wether to enable pagination
116
+ */
117
+ this.enablePagination = true;
118
+ /**
119
+ * Wether to enable export
120
+ */
121
+ this.enableExport = true;
122
+ /**
123
+ * The current page
124
+ */
125
+ this.page = 1;
126
+ /**
127
+ * Event whenever the page changes
128
+ */
129
+ this.pageChange = new EventEmitter();
130
+ /**
131
+ * The amount of items per page
132
+ */
133
+ this.pageSize = defaultSize;
134
+ /**
135
+ * The options for the page size
136
+ */
137
+ this.pageSizeOptions = defaultSizeOptions;
138
+ /**
139
+ * Event whenever the page changes
140
+ */
141
+ this.pageSizeChange = new EventEmitter();
142
+ /**
143
+ * Event whenever the page changes
144
+ */
145
+ this.export = new EventEmitter();
146
+ /**
147
+ * Wether to hide when there is only 1 page available
148
+ */
149
+ this.hideOnSinglePage = true;
150
+ /* Empty state start */
151
+ this.emptyStateType = 'no_filter';
152
+ this.emptyStateIllustration = 'empty-state-add';
153
+ this.enableEmptyStateAction = true;
154
+ this.emptyStateFilteredIllustration = 'empty-state-search';
155
+ /**
156
+ * Event whenever the empty state is clicked
157
+ */
158
+ this.emptyStateActionClick = new EventEmitter();
159
+ /* Empty state end */
160
+ this.columns = [];
161
+ this.parsedItems = [];
162
+ this.loadingRows = Array.from({
163
+ length: this.amountOfLoadingRows,
164
+ });
165
+ this._ctrlDown = false;
166
+ this.filterModalShow$ = new BehaviorSubject(false);
167
+ this.filterModalHeaderText = 'Filters';
168
+ this.filterModalSaveText = 'Save';
169
+ this.filterModalCancelText = 'Cancel';
170
+ this.filterModalResetText = 'Reset filters';
171
+ this.filterModalShowReset = false;
172
+ this.filterModalShowResetMobile = false;
173
+ this.filterModalShow = new EventEmitter();
174
+ this.filterModalSave = new EventEmitter();
175
+ this.filterModalReset = new EventEmitter();
176
+ }
177
+ set columnDefinitions(v) {
178
+ this._columnDefinitions = v;
179
+ this._generateColumns();
180
+ }
181
+ get columnDefinitions() {
182
+ return this._columnDefinitions;
183
+ }
184
+ ngOnInit() {
185
+ this._parseItems(this.items);
186
+ this.loadingRows = Array.from({
187
+ length: this.amountOfLoadingRows,
188
+ });
189
+ this.filterModalShow$
190
+ .pipe(untilDestroyed(this), distinctUntilChanged())
191
+ .subscribe((value) => this.filterModalShow.next(value));
192
+ // this._generateColumns();
193
+ }
194
+ ngOnChanges(changes) {
195
+ if (changes['items']) {
196
+ this._parseItems(changes['items'].currentValue);
197
+ }
198
+ if (changes['amountOfLoadingRows']) {
199
+ this.loadingRows = Array.from({
200
+ length: changes['amountOfLoadingRows'].currentValue,
201
+ });
202
+ }
203
+ }
204
+ // @HostListener('body:tableDefinitionChanged', { target: 'body' })
205
+ // onTableDefinitionUpdated() {
206
+ // this._generateColumns();
207
+ // }
208
+ keyDown({ key }) {
209
+ if (key !== 'Control' || this._ctrlDown === true) {
210
+ return;
211
+ }
212
+ this._ctrlDown = true;
213
+ }
214
+ keyUp({ key }) {
215
+ if (key !== 'Control' || this._ctrlDown === false) {
216
+ return;
217
+ }
218
+ this._ctrlDown = false;
219
+ }
220
+ visibilityChange() {
221
+ if (document.visibilityState !== 'hidden' || this._ctrlDown === false) {
222
+ return;
223
+ }
224
+ this._ctrlDown = false;
225
+ }
226
+ onQueryChange({ detail }) {
227
+ this.queryChange.emit(detail);
228
+ }
229
+ onQuickFilter({ detail }) {
230
+ this.quickFilter.emit(detail);
231
+ }
232
+ onPageSizeChange({ detail }) {
233
+ this.pageSizeChange.emit(detail);
234
+ }
235
+ onPageChange({ detail }) {
236
+ this.pageChange.emit(detail);
237
+ }
238
+ onFilterModalSave() {
239
+ this.filterModalSave.next();
240
+ this.filterModalShow$.next(false);
241
+ }
242
+ onFilterModalReset(resetQuickFilter = false) {
243
+ this.filterModalReset.next(resetQuickFilter);
244
+ this.filterModalShow$.next(false);
245
+ }
246
+ _parseItems(items) {
247
+ if (!items) {
248
+ this.parsedItems = [];
249
+ return;
250
+ }
251
+ if (Array.isArray(items)) {
252
+ this.parsedItems = items;
253
+ return;
254
+ }
255
+ this.parsedItems = JSON.parse(items);
256
+ }
257
+ _generateColumns() {
258
+ // const definitions =
259
+ // this._el.nativeElement.querySelectorAll('p-table-definition');
260
+ this.columns = Array.from(this._columnDefinitions);
261
+ }
262
+ // private _getHeader() {
263
+ // return (
264
+ // <p-table-row variant="header">
265
+ // {this._columns.map((col: TableDefinition, index) => (
266
+ // <p-table-column
267
+ // definition={col}
268
+ // value={col.name}
269
+ // variant="header"
270
+ // checkbox={this._getCheckbox(index, null, 'header')}
271
+ // index={index}
272
+ // ></p-table-column>
273
+ // ))}
274
+ // </p-table-row>
275
+ // );
276
+ // }
277
+ // private _getRows() {
278
+ // if (this.loading) {
279
+ // return Array.from(
280
+ // {
281
+ // length: this.amountOfLoadingRows,
282
+ // },
283
+ // (_, i) => (
284
+ // <p-table-row
285
+ // enableHover={
286
+ // this.enableRowSelection || this.enableRowClick
287
+ // }
288
+ // >
289
+ // {this._getLoadingColumns(i)}
290
+ // </p-table-row>
291
+ // )
292
+ // );
293
+ // }
294
+ // return this._items.map((item, index) => (
295
+ // <p-table-row
296
+ // enableHover={this.enableRowSelection || this.enableRowClick}
297
+ // onClick={(ev) => this._rowClick(ev, index)}
298
+ // >
299
+ // {this._getRowColumns(item, index)}
300
+ // </p-table-row>
301
+ // ));
302
+ // }
303
+ // private _getRowColumns(item, index) {
304
+ // return this._columns.map((col: TableDefinition, colIndex) => {
305
+ // return (
306
+ // <p-table-column
307
+ // definition={col}
308
+ // item={item}
309
+ // checkbox={this._getCheckbox(colIndex, index)}
310
+ // index={colIndex}
311
+ // rowIndex={index}
312
+ // ></p-table-column>
313
+ // );
314
+ // });
315
+ // }
316
+ // private _getLoadingColumns(index) {
317
+ // return this._columns.map((col: TableDefinition, colIndex) => {
318
+ // return (
319
+ // <p-table-column
320
+ // definition={col}
321
+ // variant="loading"
322
+ // checkbox={this._getCheckbox(colIndex, index, 'loading')}
323
+ // index={colIndex}
324
+ // rowIndex={index}
325
+ // ></p-table-column>
326
+ // );
327
+ // });
328
+ // }
329
+ // private _getCheckbox(
330
+ // index,
331
+ // rowIndex,
332
+ // variant: 'header' | 'default' | 'loading' = 'default'
333
+ // ) {
334
+ // if (!this.enableRowSelection || !this.selectionKey || index !== 0) {
335
+ // return;
336
+ // }
337
+ // if (variant === 'loading') {
338
+ // return <p-loader variant="ghost" class="rounded w-6 h-6" />;
339
+ // }
340
+ // if (variant === 'header') {
341
+ // return (
342
+ // <input
343
+ // class="p-input"
344
+ // type="checkbox"
345
+ // onChange={(ev) => this._selectAllChange(ev)}
346
+ // checked={this._selectionContainsAll()}
347
+ // indeterminate={this._selectionIndeterminate()}
348
+ // />
349
+ // );
350
+ // }
351
+ // const item = this._items[rowIndex];
352
+ // return (
353
+ // <input
354
+ // class="p-input"
355
+ // type="checkbox"
356
+ // onChange={(ev) => this._checkboxChange(ev?.target, rowIndex)}
357
+ // disabled={this.canSelectKey && !item[this.canSelectKey]}
358
+ // checked={this._selectionContains(item, rowIndex)}
359
+ // />
360
+ // );
361
+ // }
362
+ _checkboxDisabled(item) {
363
+ return this.canSelectKey && !item[this.canSelectKey];
364
+ }
365
+ _selectAllChange($event) {
366
+ if (!this.enableRowSelection) {
367
+ return;
368
+ }
369
+ const value = this._getCheckedValue($event.target);
370
+ if (value) {
371
+ const toAdd = [];
372
+ for (let i = 0; i < this.parsedItems.length; i++) {
373
+ const row = this.parsedItems[i];
374
+ if (this.canSelectKey && !row[this.canSelectKey]) {
375
+ continue;
376
+ }
377
+ if (this._selectionContains(row, i)) {
378
+ continue;
379
+ }
380
+ toAdd.push(row);
381
+ this.rowSelected.emit(row);
382
+ }
383
+ this.selectedRows = [...this.selectedRows, ...toAdd];
384
+ this.selectedRowsChange.emit(this.selectedRows);
385
+ return;
386
+ }
387
+ for (let i = 0; i < this.selectedRows.length; i++) {
388
+ const value = this.selectedRows[i];
389
+ const row = this.parsedItems.find((d) => this._getSelectionValue(d, i) ===
390
+ this._getSelectionValue(value, i));
391
+ if (!row) {
392
+ continue;
393
+ }
394
+ this.rowDeselected.emit(row);
395
+ }
396
+ this.selectedRows = [];
397
+ this.selectedRowsChange.emit(this.selectedRows);
398
+ }
399
+ _checkboxChange(target, index) {
400
+ if (!this.enableRowSelection) {
401
+ return;
402
+ }
403
+ const row = this.parsedItems[index];
404
+ if (this.canSelectKey && !row[this.canSelectKey]) {
405
+ target.checked = false;
406
+ return;
407
+ }
408
+ const value = this._getCheckedValue(target);
409
+ if (value) {
410
+ this.selectedRows = [...this.selectedRows, row];
411
+ this.selectedRowsChange.emit(this.selectedRows);
412
+ this.rowSelected.emit(row);
413
+ return;
414
+ }
415
+ const indexOfToRemove = this._selectionContains(row, index, true);
416
+ // we need to do this, because splice does not trigger the selection setter.
417
+ const selection = [...this.selectedRows];
418
+ selection.splice(indexOfToRemove, 1);
419
+ this.selectedRows = selection;
420
+ this.selectedRowsChange.emit(this.selectedRows);
421
+ this.rowDeselected.emit(row);
422
+ }
423
+ _getCheckedValue(target) {
424
+ return target?.checked;
425
+ }
426
+ _getSelectionValue(row, index) {
427
+ return this.selectionKey ? row?.[this.selectionKey] || index : index;
428
+ }
429
+ _selectionContains(row, index, returnIndex = false) {
430
+ const returnValue = this.selectedRows.findIndex((item) => this._getSelectionValue(row, index) ===
431
+ this._getSelectionValue(item, index));
432
+ return !returnIndex ? returnValue >= 0 : returnValue;
433
+ }
434
+ _selectionContainsAll() {
435
+ let returnValue = true;
436
+ if (!this.parsedItems?.length) {
437
+ return false;
438
+ }
439
+ for (let i = 0; i < this.parsedItems?.length; i++) {
440
+ const item = this.parsedItems[i];
441
+ const contains = this._selectionContains(item, i);
442
+ if (!contains) {
443
+ returnValue = false;
444
+ break;
445
+ }
446
+ }
447
+ return returnValue;
448
+ }
449
+ _selectionIndeterminate() {
450
+ if (!this.parsedItems?.length || !this.selectedRows?.length) {
451
+ return false;
452
+ }
453
+ let containsCount = 0;
454
+ for (let i = 0; i < this.parsedItems?.length; i++) {
455
+ const item = this.parsedItems[i];
456
+ const contains = this._selectionContains(item, i);
457
+ if (contains) {
458
+ containsCount++;
459
+ }
460
+ }
461
+ return containsCount > 0 && containsCount !== this.parsedItems.length;
462
+ }
463
+ _rowClick($event, index) {
464
+ const target = $event.target;
465
+ if (target.tagName.toLowerCase() === 'input' ||
466
+ target.type === 'checkbox') {
467
+ return;
468
+ }
469
+ const row = this._findRow($event.target);
470
+ if (this.enableRowClick) {
471
+ const action = this._findRowAction($event.target);
472
+ if (action) {
473
+ return;
474
+ }
475
+ const item = this.parsedItems[index];
476
+ this.rowClick.emit({
477
+ item,
478
+ ctrlDown: this._ctrlDown,
479
+ });
480
+ return;
481
+ }
482
+ if (!this.enableRowSelection) {
483
+ return;
484
+ }
485
+ const checkbox = row?.querySelector('input[type="checkbox"]');
486
+ if (!checkbox) {
487
+ return;
488
+ }
489
+ checkbox.checked = !checkbox.checked;
490
+ this._checkboxChange(checkbox, index);
491
+ }
492
+ _findRow(el) {
493
+ if (!el) {
494
+ return el;
495
+ }
496
+ if (el?.tagName?.toLowerCase() === 'p-table-row') {
497
+ return el;
498
+ }
499
+ return this._findRow(el?.parentElement);
500
+ }
501
+ _findRowAction(el) {
502
+ if (!el) {
503
+ return null;
504
+ }
505
+ if (el.getAttribute('data-is-action') !== null &&
506
+ el.getAttribute('data-is-action') !== 'false') {
507
+ return el;
508
+ }
509
+ if (el?.tagName?.toLowerCase() === 'p-table-row') {
510
+ return null;
511
+ }
512
+ return this._findRowAction(el?.parentElement);
513
+ }
514
+ };
515
+ Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
516
+ Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableEdit: "enableEdit", editButtonLoading: "editButtonLoading", editButtonIcon: "editButtonIcon", editButtonText: "editButtonText", editButtonTemplate: "editButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", edit: "edit", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <div *ngIf=\"headerCustomFilterTemplate\" slot=\"custom-filter\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </div>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (close)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6 cursor-pointer\"\n (onClick)=\"emptyStateActionClick.emit()\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n (onClick)=\"emptyStateActionClick.emit()\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "variant"] }, { kind: "component", type: i2.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i2.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i2.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i2.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i2.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i2.PTableHeader, selector: "p-table-header", inputs: ["activeQuickFilterIdentifier", "canEdit", "editButtonTemplate", "editIcon", "editLoading", "editText", "enableEdit", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i2.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "checkbox", "template"] }, { kind: "directive", type: i4.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i5.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
517
+ Table = __decorate([
518
+ UntilDestroy({ checkProperties: true })
519
+ ], Table);
520
+ export { Table };
521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: Table, decorators: [{
522
+ type: Component,
523
+ args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n <p-table-header\n *ngIf=\"enableHeader\"\n [quickFilters]=\"quickFilters\"\n [activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n (quickFilter)=\"(onQuickFilter)\"\n [enableSearch]=\"enableSearch\"\n [query]=\"query\"\n (queryChange)=\"(onQueryChange)\"\n [enableFilter]=\"enableFilter\"\n [selectedFiltersAmount]=\"selectedFiltersAmount\"\n [filterButtonTemplate]=\"filterButtonTemplate\"\n (filter)=\"filterModalShow$.next(true)\"\n [enableEdit]=\"enableEdit\"\n [canEdit]=\"!!selectedRows.length\"\n [editButtonTemplate]=\"editButtonTemplate\"\n [editLoading]=\"editButtonLoading\"\n [editText]=\"editButtonText\"\n [editIcon]=\"editButtonIcon\"\n (edit)=\"edit.emit()\"\n [itemsSelectedAmount]=\"selectedRows.length\"\n [loading]=\"headerLoading\"\n >\n <div *ngIf=\"headerCustomFilterTemplate\" slot=\"custom-filter\">\n <ng-container\n *ngTemplateOutlet=\"headerCustomFilterTemplate\"\n ></ng-container>\n </div>\n </p-table-header>\n\n <p-table-row variant=\"header\">\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n [value]=\"col.name\"\n variant=\"header\"\n [index]=\"index\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"_selectAllChange($event)\"\n [checked]=\"_selectionContainsAll()\"\n [indeterminate]=\"_selectionIndeterminate()\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n\n <div class=\"flex flex-col\">\n <ng-container *ngIf=\"loading; else contentTemplate\">\n <p-table-row\n *ngFor=\"let r of loadingRows; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n >\n <ng-container *ngFor=\"let col of columns; let index = index\">\n <p-table-cell-ngx\n [definition]=\"col\"\n variant=\"loading\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n ></p-table-cell-ngx>\n <ng-template #checkboxTemplate>\n <p-loader\n variant=\"ghost\"\n class=\"h-6 w-6 rounded\"\n ></p-loader>\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"items?.length; else emptyStateTemplate\">\n <p-table-row\n *ngFor=\"let item of items; let rowIndex = index\"\n [enableHover]=\"enableRowSelection || enableRowClick\"\n (click)=\"_rowClick($event, rowIndex)\"\n >\n <ng-container\n *ngFor=\"let col of columns; let index = index\"\n >\n <p-table-cell-ngx\n [definition]=\"col\"\n [item]=\"item\"\n [checkbox]=\"\n index === 0 && enableRowSelection\n ? checkboxTemplate\n : undefined\n \"\n [index]=\"index\"\n [rowIndex]=\"rowIndex\"\n [template]=\"col.template\"\n ></p-table-cell-ngx>\n\n <ng-template #checkboxTemplate>\n <input\n class=\"p-input\"\n type=\"checkbox\"\n (change)=\"\n _checkboxChange($event.target, rowIndex)\n \"\n [disabled]=\"_checkboxDisabled(item)\"\n [checked]=\"_selectionContains(item, rowIndex)\"\n />\n </ng-template>\n </ng-container>\n </p-table-row>\n </ng-container>\n </ng-template>\n </div>\n\n <p-table-footer\n *ngIf=\"enableFooter\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [enablePageSize]=\"enablePageSize\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (pageSizeChange)=\"(pageSizeChange)\"\n [enablePagination]=\"enablePagination\"\n [page]=\"page\"\n [total]=\"total\"\n (pageChange)=\"(pageChange)\"\n [enableExport]=\"enableExport\"\n (export)=\"export.emit()\"\n [loading]=\"footerLoading\"\n ></p-table-footer>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n <p-modal\n [header]=\"filterModalHeaderText\"\n [show]=\"filterModalShow$ | async\"\n (close)=\"filterModalShow$.next(false)\"\n >\n <div slot=\"content\" class=\"flex flex-col gap-6\">\n <ng-container\n *ngTemplateOutlet=\"filterModalTemplate\"\n ></ng-container>\n </div>\n <div slot=\"footer\" class=\"flex w-full justify-between gap-4\">\n <p-button\n *ngIf=\"filterModalShowResetMobile\"\n class=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset(true)\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n *ngIf=\"filterModalShowReset\"\n class=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n variant=\"secondary\"\n (onClick)=\"onFilterModalReset()\"\n >\n {{ filterModalResetText }}\n </p-button>\n <p-button\n class=\"ml-auto w-full tablet:w-auto\"\n icon=\"checkmark\"\n (onClick)=\"onFilterModalSave()\"\n >\n {{ filterModalSaveText }}\n </p-button>\n </div>\n </p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n <div\n *ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateFilteredIllustration\"\n class=\"mb-6\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateFilteredHeader }}\n </p>\n <p class=\"mb-14 text-sm text-storm-medium\">\n {{ emptyStateFilteredContent }}\n </p>\n </div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n <div\n class=\"\n flex\n max-w-[20rem]\n flex-col\n items-center\n self-center\n py-24\n text-center\n \"\n >\n <p-illustration\n [variant]=\"emptyStateIllustration\"\n class=\"mb-6 cursor-pointer\"\n (onClick)=\"emptyStateActionClick.emit()\"\n ></p-illustration>\n <p class=\"text-storm-default font-semibold\">\n {{ emptyStateHeader }}\n </p>\n <p class=\"mb-6 text-sm text-storm-medium\">\n {{ emptyStateContent }}\n </p>\n <p-button\n *ngIf=\"enableEmptyStateAction\"\n variant=\"secondary\"\n icon=\"plus\"\n size=\"small\"\n (onClick)=\"emptyStateActionClick.emit()\"\n >\n {{ emptyStateAction }}\n </p-button>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
524
+ }], ctorParameters: function () { return []; }, propDecorators: { items: [{
525
+ type: Input
526
+ }], loading: [{
527
+ type: Input
528
+ }], headerLoading: [{
529
+ type: Input
530
+ }], footerLoading: [{
531
+ type: Input
532
+ }], amountOfLoadingRows: [{
533
+ type: Input
534
+ }], enableRowSelection: [{
535
+ type: Input
536
+ }], enableRowClick: [{
537
+ type: Input
538
+ }], selectedRows: [{
539
+ type: Input
540
+ }], selectedRowsChange: [{
541
+ type: Output
542
+ }], selectionKey: [{
543
+ type: Input
544
+ }], canSelectKey: [{
545
+ type: Input
546
+ }], rowClick: [{
547
+ type: Output
548
+ }], rowSelected: [{
549
+ type: Output
550
+ }], rowDeselected: [{
551
+ type: Output
552
+ }], enableHeader: [{
553
+ type: Input
554
+ }], quickFilters: [{
555
+ type: Input
556
+ }], activeQuickFilterIdentifier: [{
557
+ type: Input
558
+ }], enableSearch: [{
559
+ type: Input
560
+ }], query: [{
561
+ type: Input
562
+ }], enableFilter: [{
563
+ type: Input
564
+ }], selectedFiltersAmount: [{
565
+ type: Input
566
+ }], filterButtonTemplate: [{
567
+ type: Input
568
+ }], enableEdit: [{
569
+ type: Input
570
+ }], editButtonLoading: [{
571
+ type: Input
572
+ }], editButtonIcon: [{
573
+ type: Input
574
+ }], editButtonText: [{
575
+ type: Input
576
+ }], editButtonTemplate: [{
577
+ type: Input
578
+ }], quickFilter: [{
579
+ type: Output
580
+ }], queryChange: [{
581
+ type: Output
582
+ }], filter: [{
583
+ type: Output
584
+ }], edit: [{
585
+ type: Output
586
+ }], enableFooter: [{
587
+ type: Input
588
+ }], enablePageSize: [{
589
+ type: Input
590
+ }], enablePagination: [{
591
+ type: Input
592
+ }], enableExport: [{
593
+ type: Input
594
+ }], page: [{
595
+ type: Input
596
+ }], total: [{
597
+ type: Input
598
+ }], pageChange: [{
599
+ type: Output
600
+ }], pageSize: [{
601
+ type: Input
602
+ }], pageSizeOptions: [{
603
+ type: Input
604
+ }], pageSizeChange: [{
605
+ type: Output
606
+ }], export: [{
607
+ type: Output
608
+ }], hideOnSinglePage: [{
609
+ type: Input
610
+ }], emptyStateType: [{
611
+ type: Input
612
+ }], emptyStateIllustration: [{
613
+ type: Input
614
+ }], emptyStateHeader: [{
615
+ type: Input
616
+ }], emptyStateContent: [{
617
+ type: Input
618
+ }], emptyStateAction: [{
619
+ type: Input
620
+ }], enableEmptyStateAction: [{
621
+ type: Input
622
+ }], emptyStateFilteredIllustration: [{
623
+ type: Input
624
+ }], emptyStateFilteredHeader: [{
625
+ type: Input
626
+ }], emptyStateFilteredContent: [{
627
+ type: Input
628
+ }], emptyStateActionClick: [{
629
+ type: Output
630
+ }], headerCustomFilterTemplate: [{
631
+ type: ContentChild,
632
+ args: [TableCustomFilterDirective, {
633
+ read: TemplateRef,
634
+ static: true,
635
+ }]
636
+ }], columnDefinitions: [{
637
+ type: ContentChildren,
638
+ args: [TableColumn]
639
+ }], filterModalTemplate: [{
640
+ type: ContentChild,
641
+ args: [TableFilterModalDirective, {
642
+ read: TemplateRef,
643
+ static: true,
644
+ }]
645
+ }], filterModalHeaderText: [{
646
+ type: Input
647
+ }], filterModalSaveText: [{
648
+ type: Input
649
+ }], filterModalCancelText: [{
650
+ type: Input
651
+ }], filterModalResetText: [{
652
+ type: Input
653
+ }], filterModalShowReset: [{
654
+ type: Input
655
+ }], filterModalShowResetMobile: [{
656
+ type: Input
657
+ }], filterModalShow: [{
658
+ type: Output
659
+ }], filterModalSave: [{
660
+ type: Output
661
+ }], filterModalReset: [{
662
+ type: Output
663
+ }], keyDown: [{
664
+ type: HostListener,
665
+ args: ['document:keydown', ['$event']]
666
+ }], keyUp: [{
667
+ type: HostListener,
668
+ args: ['document:keyup', ['$event']]
669
+ }], visibilityChange: [{
670
+ type: HostListener,
671
+ args: ['document:visibilitychange', ['$event']]
672
+ }] } });
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQ0gsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUM1QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQWtTZDtRQTVSQTs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qzs7V0FFRztRQUNNLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXhDOztXQUVHO1FBQ00sd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ00sdUJBQWtCLEdB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WUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVNUMsS0FBSztzQkFESixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFF1aWNrRmlsdGVyLCBSb3dDbGlja0V2ZW50IH0gZnJvbSAnQHBhcGVybGVzcy9jb3JlJztcbmltcG9ydCB7XG4gICAgSWNvblZhcmlhbnQsXG4gICAgSWxsdXN0cmF0aW9uVmFyaWFudCxcbn0gZnJvbSAnQHBhcGVybGVzcy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLFxuICAgIFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0U2l6ZSwgZGVmYXVsdFNpemVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5AVW50aWxEZXN0cm95KHsgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlIH0pXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtdGFibGUtbmd4JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsndGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGl0ZW1zIHRvIGJlIGZlZCB0byB0aGUgdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpdGVtcyE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBkYXRhIGlzIGxvYWRpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgaGVhZGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBmb290ZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZvb3RlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgbG9hZGluZyByb3dzIHRvIHNob3dcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhbW91bnRPZkxvYWRpbmdSb3dzOiBudW1iZXIgPSA2O1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSb3dTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSByb3cgY2xpY2tpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSb3dDbGljazogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgaXRlbXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB0byBkZXRlcm1pbmUgaWYgYSByb3cgaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3Rpb25LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEEga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjYW5TZWxlY3RLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJvd1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIGRlc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogU1RBUlQgSEVBREVSICovXG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFF1aWNrIGZpbHRlcnMgdG8gc2hvd1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQWN0aXZlIHF1aWNrIGZpbHRlciBpZGVudGlmaWVyXG4gICAgICovXG4gICAgQElucHV0KCkgYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBxdWVyeSB0byBzaG93IGluIHRoZSBzZWFyY2ggYmFyXG4gICAgICovXG4gICAgQElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgZmlsdGVycyBiZWluZyBzZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIGZvciB0aGUgZmlsdGVyIGJ1dHRvbiB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBlZGl0IGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRoZSBlZGl0IGJ1dHRvbiBpcyBsb2FkaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgZWRpdEJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlZGl0IGJ1dHRvbiBpY29uXG4gICAgICovXG4gICAgQElucHV0KCkgZWRpdEJ1dHRvbkljb246IEljb25WYXJpYW50ID0gJ3BlbmNpbCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdCBidXR0b24gdGV4dCBpZiBjaGFuZ2VkXG4gICAgICovXG4gICAgQElucHV0KCkgZWRpdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBlZGl0IGJ1dHRvbiB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgZWRpdEJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuIG9uZSBvZiB0aGUgcXVpY2sgZmlsdGVycyBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHF1aWNrRmlsdGVyOiBFdmVudEVtaXR0ZXI8UXVpY2tGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbiB0aGUgcXVlcnkgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBxdWVyeUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuIHRoZSBmaWx0ZXIgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsdGVyOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGVkaXQ6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBTVEFSVCBGT09URVIgKi9cblxuICAgIC8qKlxuICAgICAqIFdldGhlciB0byBzaG93IHRoZSBmb290ZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBwYWdlIHNpemUgc2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUGFnZVNpemU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIHRvIGVuYWJsZSBwYWdpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gZW5hYmxlIGV4cG9ydFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUV4cG9ydDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBwYWdlXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnZTogbnVtYmVyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBhbW91bnQgb2YgaXRlbXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0b3RhbCE6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGl0ZW1zIHBlciBwYWdlXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IGRlZmF1bHRTaXplO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgZm9yIHRoZSBwYWdlIHNpemVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gZGVmYXVsdFNpemVPcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIGV4cG9ydDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBXZXRoZXIgdG8gaGlkZSB3aGVuIHRoZXJlIGlzIG9ubHkgMSBwYWdlIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhpZGVPblNpbmdsZVBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyogRW1wdHkgc3RhdGUgc3RhcnQgKi9cbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlVHlwZTogJ25vX2ZpbHRlcicgfCAnZmlsdGVyZWQnID0gJ25vX2ZpbHRlcic7XG5cbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gJ2VtcHR5LXN0YXRlLWFkZCc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUhlYWRlciE6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlQ29udGVudCE6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlQWN0aW9uITogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb246IElsbHVzdHJhdGlvblZhcmlhbnQgPVxuICAgICAgICAnZW1wdHktc3RhdGUtc2VhcmNoJztcbiAgICBASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRIZWFkZXIhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoZW5ldmVyIHRoZSBlbXB0eSBzdGF0ZSBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGVtcHR5U3RhdGVBY3Rpb25DbGljazogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyogRW1wdHkgc3RhdGUgZW5kICovXG5cbiAgICBwdWJsaWMgY29sdW1uczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgcGFyc2VkSXRlbXM6IGFueVtdID0gW107XG4gICAgcHVibGljIGxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgIGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuICAgIH0pO1xuICAgIHByaXZhdGUgX2N0cmxEb3duID0gZmFsc2U7XG5cbiAgICAvLyBBbmd1bGFyIHN0dWZmXG4gICAgLy8gY3VzdG9tIGZpbHRlciB0ZW1wbGF0ZVxuICAgIEBDb250ZW50Q2hpbGQoVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgICAgIHN0YXRpYzogdHJ1ZSxcbiAgICB9KVxuICAgIHB1YmxpYyBoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIC8vIGNvbHVtbiB0ZW1wbGF0ZXNcbiAgICBwcml2YXRlIF9jb2x1bW5EZWZpbml0aW9ucyE6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ29sdW1uKVxuICAgIHNldCBjb2x1bW5EZWZpbml0aW9ucyh2OiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+KSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zID0gdjtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgfVxuICAgIGdldCBjb2x1bW5EZWZpbml0aW9ucygpOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zO1xuICAgIH1cblxuICAgIC8vIGZpbHRlciBtb2RhbFxuICAgIEBDb250ZW50Q2hpbGQoVGFibGVGaWx0ZXJNb2RhbERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICAgICAgc3RhdGljOiB0cnVlLFxuICAgIH0pXG4gICAgcHVibGljIGZpbHRlck1vZGFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgZmlsdGVyTW9kYWxTaG93JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxIZWFkZXJUZXh0OiBzdHJpbmcgPSAnRmlsdGVycyc7XG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxTYXZlVGV4dDogc3RyaW5nID0gJ1NhdmUnO1xuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsQ2FuY2VsVGV4dDogc3RyaW5nID0gJ0NhbmNlbCc7XG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxSZXNldFRleHQ6IHN0cmluZyA9ICdSZXNldCBmaWx0ZXJzJztcblxuICAgIEBJbnB1dCgpIGZpbHRlck1vZGFsU2hvd1Jlc2V0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgZmlsdGVyTW9kYWxTaG93UmVzZXRNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNob3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyTW9kYWxTYXZlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGZpbHRlck1vZGFsUmVzZXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl9wYXJzZUl0ZW1zKHRoaXMuaXRlbXMpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyRcbiAgICAgICAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZmlsdGVyTW9kYWxTaG93Lm5leHQodmFsdWUpKTtcbiAgICAgICAgLy8gdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSkge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VJdGVtcyhjaGFuZ2VzWydpdGVtcyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBjaGFuZ2VzWydhbW91bnRPZkxvYWRpbmdSb3dzJ10uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAgQEhvc3RMaXN0ZW5lcignYm9keTp0YWJsZURlZmluaXRpb25DaGFuZ2VkJywgeyB0YXJnZXQ6ICdib2R5JyB9KVxuICAgIC8vICBvblRhYmxlRGVmaW5pdGlvblVwZGF0ZWQoKSB7XG4gICAgLy8gICAgICB0aGlzLl9nZW5lcmF0ZUNvbHVtbnMoKTtcbiAgICAvLyAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAga2V5RG93bih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdHJsRG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxuICAgIGtleVVwKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuICAgICAgICBpZiAoa2V5ICE9PSAnQ29udHJvbCcgfHwgdGhpcy5fY3RybERvd24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnZpc2liaWxpdHljaGFuZ2UnLCBbJyRldmVudCddKVxuICAgIHZpc2liaWxpdHlDaGFuZ2UoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3RybERvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblF1ZXJ5Q2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KGRldGFpbCk7XG4gICAgfVxuXG4gICAgb25RdWlja0ZpbHRlcih7IGRldGFpbCB9OiBDdXN0b21FdmVudDxhbnk+KSB7XG4gICAgICAgIHRoaXMucXVpY2tGaWx0ZXIuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uUGFnZVNpemVDaGFuZ2UoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8bnVtYmVyPikge1xuICAgICAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLmVtaXQoZGV0YWlsKTtcbiAgICB9XG5cbiAgICBvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8bnVtYmVyPikge1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChkZXRhaWwpO1xuICAgIH1cblxuICAgIG9uRmlsdGVyTW9kYWxTYXZlKCkge1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBvbkZpbHRlck1vZGFsUmVzZXQocmVzZXRRdWlja0ZpbHRlciA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VJdGVtcyhpdGVtczogc3RyaW5nKSB7XG4gICAgICAgIGlmICghaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IGl0ZW1zO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IEpTT04ucGFyc2UoaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlQ29sdW1ucygpIHtcbiAgICAgICAgLy8gY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgICAvLyBcdHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncC10YWJsZS1kZWZpbml0aW9uJyk7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IEFycmF5LmZyb20odGhpcy5fY29sdW1uRGVmaW5pdGlvbnMpO1xuICAgIH1cblxuICAgIC8vICBwcml2YXRlIF9nZXRIZWFkZXIoKSB7XG4gICAgLy8gICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgIDxwLXRhYmxlLXJvdyB2YXJpYW50PVwiaGVhZGVyXCI+XG4gICAgLy8gICAgICAgICAgICAgIHt0aGlzLl9jb2x1bW5zLm1hcCgoY29sOiBUYWJsZURlZmluaXRpb24sIGluZGV4KSA9PiAoXG4gICAgLy8gICAgICAgICAgICAgICAgICA8cC10YWJsZS1jb2x1bW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uPXtjb2x9XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbC5uYW1lfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoZWFkZXJcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94PXt0aGlzLl9nZXRDaGVja2JveChpbmRleCwgbnVsbCwgJ2hlYWRlcicpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICAgICApKX1cbiAgICAvLyAgICAgICAgICA8L3AtdGFibGUtcm93PlxuICAgIC8vICAgICAgKTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldFJvd3MoKSB7XG4gICAgLy8gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgLy8gICAgICAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuICAgIC8vICAgICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICAgICAoXywgaSkgPT4gKFxuICAgIC8vICAgICAgICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlSG92ZXI9e1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbiB8fCB0aGlzLmVuYWJsZVJvd0NsaWNrXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICAgPlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLl9nZXRMb2FkaW5nQ29sdW1ucyhpKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgLy8gICAgICAgICAgICAgIClcbiAgICAvLyAgICAgICAgICApO1xuICAgIC8vICAgICAgfVxuXG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5faXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgIC8vICAgICAgICAgIDxwLXRhYmxlLXJvd1xuICAgIC8vICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17dGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gfHwgdGhpcy5lbmFibGVSb3dDbGlja31cbiAgICAvLyAgICAgICAgICAgICAgb25DbGljaz17KGV2KSA9PiB0aGlzLl9yb3dDbGljayhldiwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgID5cbiAgICAvLyAgICAgICAgICAgICAge3RoaXMuX2dldFJvd0NvbHVtbnMoaXRlbSwgaW5kZXgpfVxuICAgIC8vICAgICAgICAgIDwvcC10YWJsZS1yb3c+XG4gICAgLy8gICAgICApKTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldFJvd0NvbHVtbnMoaXRlbSwgaW5kZXgpIHtcbiAgICAvLyAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLm1hcCgoY29sOiBUYWJsZURlZmluaXRpb24sIGNvbEluZGV4KSA9PiB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICAgPHAtdGFibGUtY29sdW1uXG4gICAgLy8gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uPXtjb2x9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tib3g9e3RoaXMuX2dldENoZWNrYm94KGNvbEluZGV4LCBpbmRleCl9XG4gICAgLy8gICAgICAgICAgICAgICAgICBpbmRleD17Y29sSW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgICAgICByb3dJbmRleD17aW5kZXh9XG4gICAgLy8gICAgICAgICAgICAgID48L3AtdGFibGUtY29sdW1uPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9KTtcbiAgICAvLyAgfVxuXG4gICAgLy8gIHByaXZhdGUgX2dldExvYWRpbmdDb2x1bW5zKGluZGV4KSB7XG4gICAgLy8gICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5tYXAoKGNvbDogVGFibGVEZWZpbml0aW9uLCBjb2xJbmRleCkgPT4ge1xuICAgIC8vICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgIDxwLXRhYmxlLWNvbHVtblxuICAgIC8vICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbj17Y29sfVxuICAgIC8vICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImxvYWRpbmdcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgY2hlY2tib3g9e3RoaXMuX2dldENoZWNrYm94KGNvbEluZGV4LCBpbmRleCwgJ2xvYWRpbmcnKX1cbiAgICAvLyAgICAgICAgICAgICAgICAgIGluZGV4PXtjb2xJbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgICAgIHJvd0luZGV4PXtpbmRleH1cbiAgICAvLyAgICAgICAgICAgICAgPjwvcC10YWJsZS1jb2x1bW4+XG4gICAgLy8gICAgICAgICAgKTtcbiAgICAvLyAgICAgIH0pO1xuICAgIC8vICB9XG5cbiAgICAvLyAgcHJpdmF0ZSBfZ2V0Q2hlY2tib3goXG4gICAgLy8gICAgICBpbmRleCxcbiAgICAvLyAgICAgIHJvd0luZGV4LFxuICAgIC8vICAgICAgdmFyaWFudDogJ2hlYWRlcicgfCAnZGVmYXVsdCcgfCAnbG9hZGluZycgPSAnZGVmYXVsdCdcbiAgICAvLyAgKSB7XG4gICAgLy8gICAgICBpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uIHx8ICF0aGlzLnNlbGVjdGlvbktleSB8fCBpbmRleCAhPT0gMCkge1xuICAgIC8vICAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgaWYgKHZhcmlhbnQgPT09ICdsb2FkaW5nJykge1xuICAgIC8vICAgICAgICAgIHJldHVybiA8cC1sb2FkZXIgdmFyaWFudD1cImdob3N0XCIgY2xhc3M9XCJyb3VuZGVkIHctNiBoLTZcIiAvPjtcbiAgICAvLyAgICAgIH1cblxuICAgIC8vICAgICAgaWYgKHZhcmlhbnQgPT09ICdoZWFkZXInKSB7XG4gICAgLy8gICAgICAgICAgcmV0dXJuIChcbiAgICAvLyAgICAgICAgICAgICAgPGlucHV0XG4gICAgLy8gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgIC8vICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAvLyAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHRoaXMuX3NlbGVjdEFsbENoYW5nZShldil9XG4gICAgLy8gICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLl9zZWxlY3Rpb25Db250YWluc0FsbCgpfVxuICAgIC8vICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17dGhpcy5fc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpfVxuICAgIC8vICAgICAgICAgICAgICAvPlxuICAgIC8vICAgICAgICAgICk7XG4gICAgLy8gICAgICB9XG5cbiAgICAvLyAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9pdGVtc1tyb3dJbmRleF07XG5cbiAgICAvLyAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgPGlucHV0XG4gICAgLy8gICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dFwiXG4gICAgLy8gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgLy8gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHRoaXMuX2NoZWNrYm94Q2hhbmdlKGV2Py50YXJnZXQsIHJvd0luZGV4KX1cbiAgICAvLyAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuY2FuU2VsZWN0S2V5ICYmICFpdGVtW3RoaXMuY2FuU2VsZWN0S2V5XX1cbiAgICAvLyAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpfVxuICAgIC8vICAgICAgICAgIC8+XG4gICAgLy8gICAgICApO1xuICAgIC8vICB9XG5cbiAgICBwdWJsaWMgX2NoZWNrYm94RGlzYWJsZWQoaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhblNlbGVjdEtleSAmJiAhaXRlbVt0aGlzLmNhblNlbGVjdEtleV07XG4gICAgfVxuXG4gICAgcHVibGljIF9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDaGVja2VkVmFsdWUoJGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdG9BZGQgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIC4uLnRvQWRkXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoZCwgaSkgPT09XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHZhbHVlLCBpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfY2hlY2tib3hDaGFuZ2UodGFyZ2V0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG4gICAgICAgICAgICB0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDaGVja2VkVmFsdWUodGFyZ2V0KTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLnNlbGVjdGVkUm93cywgcm93XTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleE9mVG9SZW1vdmUgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGluZGV4LCB0cnVlKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMsIGJlY2F1c2Ugc3BsaWNlIGRvZXMgbm90IHRyaWdnZXIgdGhlIHNlbGVjdGlvbiBzZXR0ZXIuXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG4gICAgICAgIHNlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZlRvUmVtb3ZlLCAxKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBzZWxlY3Rpb247XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgICB0aGlzLnJvd0Rlc2VsZWN0ZWQuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQ6IGFueSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNlbGVjdGlvblZhbHVlKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbktleSA/IHJvdz8uW3RoaXMuc2VsZWN0aW9uS2V5XSB8fCBpbmRleCA6IGluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMoXG4gICAgICAgIHJvdzogYW55LFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICByZXR1cm5JbmRleCA9IGZhbHNlXG4gICAgKTogYW55IHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShyb3csIGluZGV4KSA9PT1cbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShpdGVtLCBpbmRleClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICFyZXR1cm5JbmRleCA/IHJldHVyblZhbHVlID49IDAgOiByZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zQWxsKCkge1xuICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIGkpO1xuXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoIHx8ICF0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGFpbnNDb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbnNDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBfcm93Q2xpY2soJGV2ZW50OiB7IHRhcmdldDogYW55IH0sIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8XG4gICAgICAgICAgICB0YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94J1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX2ZpbmRSb3coJGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm93Q2xpY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2ZpbmRSb3dBY3Rpb24oJGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94ID0gcm93Py5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuICAgICAgICBpZiAoIWNoZWNrYm94KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrYm94Q2hhbmdlKGNoZWNrYm94LCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFJvdyhlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFJvdyhlbD8ucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gJ2ZhbHNlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFJvd0FjdGlvbihlbD8ucGFyZW50RWxlbWVudCk7XG4gICAgfVxufVxuIiwiPHAtdGFibGUtY29udGFpbmVyPlxuICAgIDxwLXRhYmxlLWhlYWRlclxuICAgICAgICAqbmdJZj1cImVuYWJsZUhlYWRlclwiXG4gICAgICAgIFtxdWlja0ZpbHRlcnNdPVwicXVpY2tGaWx0ZXJzXCJcbiAgICAgICAgW2FjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcl09XCJhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJcIlxuICAgICAgICAocXVpY2tGaWx0ZXIpPVwiKG9uUXVpY2tGaWx0ZXIpXCJcbiAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJlbmFibGVTZWFyY2hcIlxuICAgICAgICBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAocXVlcnlDaGFuZ2UpPVwiKG9uUXVlcnlDaGFuZ2UpXCJcbiAgICAgICAgW2VuYWJsZUZpbHRlcl09XCJlbmFibGVGaWx0ZXJcIlxuICAgICAgICBbc2VsZWN0ZWRGaWx0ZXJzQW1vdW50XT1cInNlbGVjdGVkRmlsdGVyc0Ftb3VudFwiXG4gICAgICAgIFtmaWx0ZXJCdXR0b25UZW1wbGF0ZV09XCJmaWx0ZXJCdXR0b25UZW1wbGF0ZVwiXG4gICAgICAgIChmaWx0ZXIpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KHRydWUpXCJcbiAgICAgICAgW2VuYWJsZUVkaXRdPVwiZW5hYmxlRWRpdFwiXG4gICAgICAgIFtjYW5FZGl0XT1cIiEhc2VsZWN0ZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgIFtlZGl0QnV0dG9uVGVtcGxhdGVdPVwiZWRpdEJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgW2VkaXRMb2FkaW5nXT1cImVkaXRCdXR0b25Mb2FkaW5nXCJcbiAgICAgICAgW2VkaXRUZXh0XT1cImVkaXRCdXR0b25UZXh0XCJcbiAgICAgICAgW2VkaXRJY29uXT1cImVkaXRCdXR0b25JY29uXCJcbiAgICAgICAgKGVkaXQpPVwiZWRpdC5lbWl0KClcIlxuICAgICAgICBbaXRlbXNTZWxlY3RlZEFtb3VudF09XCJzZWxlY3RlZFJvd3MubGVuZ3RoXCJcbiAgICAgICAgW2xvYWRpbmddPVwiaGVhZGVyTG9hZGluZ1wiXG4gICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIiBzbG90PVwiY3VzdG9tLWZpbHRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3AtdGFibGUtaGVhZGVyPlxuXG4gICAgPHAtdGFibGUtcm93IHZhcmlhbnQ9XCJoZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8cC10YWJsZS1jZWxsLW5neFxuICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbC5uYW1lXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDAgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrYm94VGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L3AtdGFibGUtY2VsbC1uZ3g+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJfc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wLXRhYmxlLXJvdz5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgbG9hZGluZ1Jvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGUtY2VsbC1uZ3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IDAgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2tib3hUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9wLXRhYmxlLWNlbGwtbmd4PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1sb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC02IHctNiByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZUhvdmVyXT1cImVuYWJsZVJvd1NlbGVjdGlvbiB8fCBlbmFibGVSb3dDbGlja1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfcm93Q2xpY2soJGV2ZW50LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlLWNlbGwtbmd4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGVja2JveFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJjb2wudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC10YWJsZS1jZWxsLW5neD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrYm94Q2hhbmdlKCRldmVudC50YXJnZXQsIHJvd0luZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2NoZWNrYm94RGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9wLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPHAtdGFibGUtZm9vdGVyXG4gICAgICAgICpuZ0lmPVwiZW5hYmxlRm9vdGVyXCJcbiAgICAgICAgW2hpZGVPblNpbmdsZVBhZ2VdPVwiaGlkZU9uU2luZ2xlUGFnZVwiXG4gICAgICAgIFtlbmFibGVQYWdlU2l6ZV09XCJlbmFibGVQYWdlU2l6ZVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIihwYWdlU2l6ZUNoYW5nZSlcIlxuICAgICAgICBbZW5hYmxlUGFnaW5hdGlvbl09XCJlbmFibGVQYWdpbmF0aW9uXCJcbiAgICAgICAgW3BhZ2VdPVwicGFnZVwiXG4gICAgICAgIFt0b3RhbF09XCJ0b3RhbFwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIihwYWdlQ2hhbmdlKVwiXG4gICAgICAgIFtlbmFibGVFeHBvcnRdPVwiZW5hYmxlRXhwb3J0XCJcbiAgICAgICAgKGV4cG9ydCk9XCJleHBvcnQuZW1pdCgpXCJcbiAgICAgICAgW2xvYWRpbmddPVwiZm9vdGVyTG9hZGluZ1wiXG4gICAgPjwvcC10YWJsZS1mb290ZXI+XG48L3AtdGFibGUtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyTW9kYWxUZW1wbGF0ZVwiPlxuICAgIDxwLW1vZGFsXG4gICAgICAgIFtoZWFkZXJdPVwiZmlsdGVyTW9kYWxIZWFkZXJUZXh0XCJcbiAgICAgICAgW3Nob3ddPVwiZmlsdGVyTW9kYWxTaG93JCB8IGFzeW5jXCJcbiAgICAgICAgKGNsb3NlKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSlcIlxuICAgID5cbiAgICAgICAgPGRpdiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyTW9kYWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCB0YWJsZXQ6dy1hdXRvIGRlc2t0b3AteHM6aGlkZGVuXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQodHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlck1vZGFsUmVzZXRUZXh0IH19XG4gICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4gdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpmbGV4XCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG8gdy1mdWxsIHRhYmxldDp3LWF1dG9cIlxuICAgICAgICAgICAgICAgIGljb249XCJjaGVja21hcmtcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxTYXZlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlck1vZGFsU2F2ZVRleHQgfX1cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvcC1tb2RhbD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZW1wdHlTdGF0ZVR5cGUgPT09ICdmaWx0ZXJlZCc7IGVsc2UgZW1wdHlTdGF0ZU5vbkZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgIG1heC13LVsyMHJlbV1cbiAgICAgICAgICAgIGZsZXgtY29sXG4gICAgICAgICAgICBpdGVtcy1jZW50ZXJcbiAgICAgICAgICAgIHNlbGYtY2VudGVyXG4gICAgICAgICAgICBweS0yNFxuICAgICAgICAgICAgdGV4dC1jZW50ZXJcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxwLWlsbHVzdHJhdGlvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNlwiXG4gICAgICAgID48L3AtaWxsdXN0cmF0aW9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVN0YXRlRmlsdGVyZWRIZWFkZXIgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTE0IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnQgfX1cbiAgICAgICAgPC9wPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgbWF4LXctWzIwcmVtXVxuICAgICAgICAgICAgZmxleC1jb2xcbiAgICAgICAgICAgIGl0ZW1zLWNlbnRlclxuICAgICAgICAgICAgc2VsZi1jZW50ZXJcbiAgICAgICAgICAgIHB5LTI0XG4gICAgICAgICAgICB0ZXh0LWNlbnRlclxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPHAtaWxsdXN0cmF0aW9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWItNiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAob25DbGljayk9XCJlbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpXCJcbiAgICAgICAgPjwvcC1pbGx1c3RyYXRpb24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGVtcHR5U3RhdGVIZWFkZXIgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTYgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUNvbnRlbnQgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlRW1wdHlTdGF0ZUFjdGlvblwiXG4gICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGljb249XCJwbHVzXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJlbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgZW1wdHlTdGF0ZUFjdGlvbiB9fVxuICAgICAgICA8L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==