@mozaic-ds/angular 0.24.0-beta.16 → 0.24.0-beta.17

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.
@@ -24,6 +24,12 @@ export declare class MozDatatableSelectionComponent implements OnChanges {
24
24
  private updateSelection;
25
25
  private updateSelectedValueOnRowData;
26
26
  private isSelectionIndeterminate;
27
+ /**
28
+ * if the value is an object so the resulted id == '[object Object]'
29
+ * @param row
30
+ * @private
31
+ */
32
+ private getId;
27
33
  static ɵfac: i0.ɵɵFactoryDeclaration<MozDatatableSelectionComponent, never>;
28
34
  static ɵcmp: i0.ɵɵComponentDeclaration<MozDatatableSelectionComponent, "moz-datatable-selection", never, { "selectionSettings": "selectionSettings"; "paginationEnabled": "paginationEnabled"; "allowAllSelected": "allowAllSelected"; "rowData": "rowData"; }, { "updateSelectionAllEmitter": "updateSelectionAllEmitter"; }, never, never, false, never>;
29
35
  }
@@ -52,7 +52,7 @@ export class MozDatatableSelectionComponent {
52
52
  if (row.selected) {
53
53
  this.selectionSettings.excludedIds = [
54
54
  ...this.selectionSettings.excludedIds.filter((deselectedId) => {
55
- return deselectedId !== '' + row[selectionIdentifierFieldKey];
55
+ return deselectedId !== this.getId(row);
56
56
  }),
57
57
  ];
58
58
  }
@@ -60,12 +60,12 @@ export class MozDatatableSelectionComponent {
60
60
  if (this.paginationEnabled) {
61
61
  this.selectionSettings.excludedIds = [
62
62
  ...this.selectionSettings.excludedIds,
63
- '' + row[selectionIdentifierFieldKey],
63
+ this.getId(row),
64
64
  ];
65
65
  }
66
66
  else {
67
67
  this.selectionSettings.selectedIds = [
68
- ...this.selectionSettings.selectedIds.filter((selectedId) => selectedId !== '' + row[selectionIdentifierFieldKey]),
68
+ ...this.selectionSettings.selectedIds.filter((selectedId) => selectedId !== this.getId(row)),
69
69
  ];
70
70
  this.selectionSettings.allSelected = false;
71
71
  }
@@ -80,7 +80,7 @@ export class MozDatatableSelectionComponent {
80
80
  if (row.selected) {
81
81
  this.selectionSettings.selectedIds = [
82
82
  ...this.selectionSettings.selectedIds,
83
- '' + row[selectionIdentifierFieldKey],
83
+ this.getId(row),
84
84
  ];
85
85
  if (this.canSwitchtoAllSelectedMode()) {
86
86
  this.switchtoAllSelectedMode();
@@ -89,7 +89,7 @@ export class MozDatatableSelectionComponent {
89
89
  else {
90
90
  this.selectionSettings.selectedIds = [
91
91
  ...this.selectionSettings.selectedIds.filter((selectedId) => {
92
- return selectedId !== '' + row[selectionIdentifierFieldKey];
92
+ return selectedId !== this.getId(row);
93
93
  }),
94
94
  ];
95
95
  }
@@ -122,7 +122,7 @@ export class MozDatatableSelectionComponent {
122
122
  .filter((row) => !row.disableSelection)
123
123
  .forEach((row) => {
124
124
  if (this.selectionSettings) {
125
- const index = this.selectionSettings.excludedIds.indexOf('' + row[selectionIdentifierFieldKey], 0);
125
+ const index = this.selectionSettings.excludedIds.indexOf(this.getId(row), 0);
126
126
  if (index > -1) {
127
127
  this.selectionSettings.excludedIds.splice(index, 1);
128
128
  this.selectionSettings.excludedIds = [...this.selectionSettings.excludedIds];
@@ -143,9 +143,7 @@ export class MozDatatableSelectionComponent {
143
143
  if (this.rowData) {
144
144
  this.selectionSettings.excludedIds = [
145
145
  ...this.selectionSettings.excludedIds,
146
- ...this.rowData
147
- .filter((row) => !row.disableSelection)
148
- .map((row) => '' + row[selectionIdentifierFieldKey]),
146
+ ...this.rowData.filter((row) => !row.disableSelection).map((row) => this.getId(row)),
149
147
  ];
150
148
  if (this.selectionSettings.excludedIds.length ===
151
149
  this.selectionSettings.totalSelectableItems) {
@@ -170,12 +168,12 @@ export class MozDatatableSelectionComponent {
170
168
  if (allPageRowsSelected && this.rowData) {
171
169
  this.rowData
172
170
  .filter((row) => !row.disableSelection)
173
- .filter((row) => !(this.selectionSettings?.selectedIds || []).includes('' + row[selectionIdentifierFieldKey]))
171
+ .filter((row) => !(this.selectionSettings?.selectedIds || []).includes(this.getId(row)))
174
172
  .forEach((row) => {
175
173
  if (this.selectionSettings) {
176
174
  this.selectionSettings.selectedIds = [
177
175
  ...this.selectionSettings.selectedIds,
178
- '' + row[selectionIdentifierFieldKey],
176
+ this.getId(row),
179
177
  ];
180
178
  }
181
179
  });
@@ -187,10 +185,10 @@ export class MozDatatableSelectionComponent {
187
185
  if (this.rowData) {
188
186
  const allRowOnPage = this.rowData
189
187
  .filter((row) => !row.disableSelection)
190
- .map((row) => '' + row[selectionIdentifierFieldKey]);
188
+ .map((row) => this.getId(row));
191
189
  const allRowSelectedOnPage = this.rowData
192
190
  .filter((row) => !row.disableSelection && row.selected)
193
- .map((row) => '' + row[selectionIdentifierFieldKey]);
191
+ .map((row) => this.getId(row));
194
192
  const rowSelectedOnOtherPages = this.selectionSettings.selectedIds.filter((element) => !allRowOnPage.includes(element));
195
193
  this.selectionSettings.selectedIds = [
196
194
  ...rowSelectedOnOtherPages,
@@ -265,6 +263,21 @@ export class MozDatatableSelectionComponent {
265
263
  }
266
264
  return false;
267
265
  }
266
+ /**
267
+ * if the value is an object so the resulted id == '[object Object]'
268
+ * @param row
269
+ * @private
270
+ */
271
+ getId(row) {
272
+ if (!this.selectionSettings?.selectionIdentifierFieldKey) {
273
+ return '';
274
+ }
275
+ const rowElement = row[this.selectionSettings?.selectionIdentifierFieldKey];
276
+ if (typeof rowElement === 'object') {
277
+ return rowElement;
278
+ }
279
+ return '' + rowElement;
280
+ }
268
281
  }
269
282
  MozDatatableSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MozDatatableSelectionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
270
283
  MozDatatableSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MozDatatableSelectionComponent, selector: "moz-datatable-selection", inputs: { selectionSettings: "selectionSettings", paginationEnabled: "paginationEnabled", allowAllSelected: "allowAllSelected", rowData: "rowData" }, outputs: { updateSelectionAllEmitter: "updateSelectionAllEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"mc-datatable__selection\">\n <ng-container *ngIf=\"selectionSettings && selectionSettings.labels && paginationEnabled\">\n <div class=\"mc-datatable__topbar-selection\">\n <ng-container *ngIf=\"selectionSettings.selectedIds.length || selectionSettings.allSelected\">\n <div class=\"center-selection-label\">\n <div *ngIf=\"selectionSettings.allSelected; else notAllSelected\">\n <ng-container *ngIf=\"selectionSettings.excludedIds.length > 0; else exludedIdsEmpty\">\n <span>\n <b\n >{{\n selectionSettings.totalSelectableItems - selectionSettings.excludedIds.length\n }}\n {{ selectionSettings.labels.selectedLabel || 'selected' }}</b\n >\n <ng-container\n *ngIf=\"\n selectionSettings.totalSelectableItems -\n selectionSettings.excludedIds.length ===\n 1;\n else plurialAllSelected\n \"\n >\n {{ selectionSettings.labels.rowOnPageLabel || 'row on the page. ' }}-\n </ng-container>\n <ng-template #plurialAllSelected>\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n </ng-template>\n\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n <a href=\"/\" (click)=\"selectAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.selectAllLabel || 'Select all' }}\n {{ selectionSettings.totalSelectableItems }}\n {{ selectionSettings.labels.rowsOfTableLabel || 'rows of the table' }}\n </a>\n </span>\n </ng-container>\n <ng-template #exludedIdsEmpty>\n <span>\n {{\n selectionSettings.labels.rowsSelectedLabel ||\n 'All rows are selected in the table.'\n }}\n -\n <a href=\"/\" (click)=\"clearAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.clearSelectionLabel || 'Clear selection' }}\n </a>\n </span>\n </ng-template>\n </div>\n <ng-template #notAllSelected>\n <span>\n <b\n >{{ selectionSettings.selectedIds.length }}\n {{ selectionSettings.labels.selectedLabel || 'selected' }}</b\n >\n <ng-container\n *ngIf=\"selectionSettings.selectedIds && selectionSettings.selectedIds.length > 0\"\n >\n <ng-container\n *ngIf=\"\n selectionSettings.selectedIds && selectionSettings.selectedIds.length === 1;\n else plurialNotAllSelected\n \"\n >\n {{ selectionSettings.labels.rowOnPageLabel || 'row on the page. ' }}-\n </ng-container>\n <ng-template #plurialNotAllSelected>\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n </ng-template>\n <a href=\"/\" (click)=\"selectAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.selectAllLabel || 'Select all' }}\n {{ selectionSettings.totalSelectableItems }}\n {{ selectionSettings.labels.rowsOfTableLabel || 'rows of the table' }}\n </a>\n </ng-container>\n </span>\n </ng-template>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n", styles: [".center-selection-label{margin-bottom:1rem;background-color:#fff;height:34px;text-align:center;align-items:center;display:flex;justify-content:center;border-radius:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -282,4 +295,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
282
295
  }], updateSelectionAllEmitter: [{
283
296
  type: Output
284
297
  }] } });
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW96LWRhdGF0YWJsZS1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbXBvbmVudHMvc2VsZWN0aW9uL21vei1kYXRhdGFibGUtc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2RhdGF0YWJsZS9jb21wb25lbnRzL3NlbGVjdGlvbi9tb3otZGF0YXRhYmxlLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQzs7O0FBVXZCLE1BQU0sT0FBTyw4QkFBOEI7SUFTekMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFOMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRXZCLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRTVFLG9CQUFlLEdBQVksS0FBSyxDQUFDO0lBRUssQ0FBQztJQUU5QyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFB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QkFDdEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUN4RixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO29CQUNqQyxJQUFJLENBQUMsT0FBTztvQkFDWixDQUFDLElBQUksQ0FBQyxPQUFPO3lCQUNWLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNYLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOzRCQUMxQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCLENBQUMsQ0FBQzt5QkFDaEU7b0JBQ0gsQ0FBQyxDQUFDO3lCQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakYsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQ2pDO2dCQUNBLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs0SEFoVFUsOEJBQThCO2dIQUE5Qiw4QkFBOEIsK1NDbkIzQyxvdUhBa0ZBOzRGRC9EYSw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUcvQixpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNXLHlCQUF5QjtzQkFBekMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3dEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvcm93LWRhdGEnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3Rpb24tc2V0dGluZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtb3otZGF0YXRhYmxlLXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb3otZGF0YXRhYmxlLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vei1kYXRhdGFibGUtc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNb3pEYXRhdGFibGVTZWxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uU2V0dGluZ3M/OiBTZWxlY3Rpb25TZXR0aW5ncztcbiAgQElucHV0KCkgcHVibGljIHBhZ2luYXRpb25FbmFibGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGFsbG93QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgcm93RGF0YT86IFJvd0RhdGFbXTtcbiAgQE91dHB1dCgpIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25BbGxFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25TZXR0aW5ncz4oKTtcblxuICBwdWJsaWMgaXNJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncm93RGF0YSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZU9uUm93RGF0YSh0cnVlKTtcbiAgICAgIHRoaXMuaXNJbmRldGVybWluYXRlID0gdGhpcy5pc1NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25BbGxFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyk7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZU9uUm93RGF0YShmYWxzZSk7XG4gICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkFsbEVtaXR0ZXIuZW1pdCh0aGlzLnNlbGVjdGlvblNldHRpbmdzKTtcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0FsbFBhZ2VSb3dBcmVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpIHx8ICh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5hbGxTZWxlY3RlZCA/PyBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25VZHBhdGVTZWxlY3Rpb25Sb3cocm93OiBSb3dEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVDb3VudEl0ZW1TZWxlY3Rpb24ocm93KTtcbiAgfVxuXG4gIHB1YmxpYyBvblVkcGF0ZVNlbGVjdGlvbkFsbFBhZ2VSb3dzKCRldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlT25Sb3dEYXRhKCRldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgdGhpcy5oYW5kbGVDb3VudEFsbFNlbGVjdGlvbih0aGlzLmlzQWxsUGFnZVJvd0FyZVNlbGVjdGVkKCkpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvdW50SXRlbVNlbGVjdGlvbihyb3c6IFJvd0RhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXkgPSB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkKSB7XG4gICAgICAgIGlmIChyb3cuc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcy5maWx0ZXIoKGRlc2VsZWN0ZWRJZCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZGVzZWxlY3RlZElkICE9PSAnJyArIHJvd1tzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyxcbiAgICAgICAgICAgICAgJycgKyByb3dbc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChzZWxlY3RlZElkKSA9PiBzZWxlY3RlZElkICE9PSAnJyArIHJvd1tzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMubGVuZ3RoID09PVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocm93LnNlbGVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMsXG4gICAgICAgICAgICAnJyArIHJvd1tzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldLFxuICAgICAgICAgIF07XG4gICAgICAgICAgaWYgKHRoaXMuY2FuU3dpdGNodG9BbGxTZWxlY3RlZE1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcy5maWx0ZXIoKHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSWQgIT09ICcnICsgcm93W3NlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoID09PSB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnRvdGFsU2VsZWN0YWJsZUl0ZW1zICYmXG4gICAgICAgIHRoaXMuYWxsb3dBbGxTZWxlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAhPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uRW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW107XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ291bnRBbGxTZWxlY3Rpb24oYWxsUGFnZVJvd3NTZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXkgPSB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5hbGxTZWxlY3RlZCkge1xuICAgICAgICBpZiAodGhpcy5pc0luZGV0ZXJtaW5hdGUgJiYgdGhpcy5yb3dEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgIC5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICcnICsgcm93W3NlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFsuLi50aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNodG9BbGxTZWxlY3RlZE1vZGUoKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAgID8uZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMucm93RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgLm1hcCgocm93KSA9PiAnJyArIHJvd1tzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMubGVuZ3RoID09PVxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnRvdGFsU2VsZWN0YWJsZUl0ZW1zXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW107XG4gICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMucm93RGF0YVxuICAgICAgICAgICAgICAgID8uZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJvdy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbGxQYWdlUm93c1NlbGVjdGVkICYmIHRoaXMucm93RGF0YSkge1xuICAgICAgICAgIHRoaXMucm93RGF0YVxuICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAocm93KSA9PlxuICAgICAgICAgICAgICAgICEodGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uc2VsZWN0ZWRJZHMgfHwgW10pLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgJycgKyByb3dbc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyxcbiAgICAgICAgICAgICAgICAgICcnICsgcm93W3NlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2FuU3dpdGNodG9BbGxTZWxlY3RlZE1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5yb3dEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxSb3dPblBhZ2UgPSB0aGlzLnJvd0RhdGFcbiAgICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAgIC5tYXAoKHJvdykgPT4gJycgKyByb3dbc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XSk7XG4gICAgICAgICAgICBjb25zdCBhbGxSb3dTZWxlY3RlZE9uUGFnZSA9IHRoaXMucm93RGF0YVxuICAgICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbiAmJiByb3cuc2VsZWN0ZWQpXG4gICAgICAgICAgICAgIC5tYXAoKHJvdykgPT4gJycgKyByb3dbc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XSk7XG4gICAgICAgICAgICBjb25zdCByb3dTZWxlY3RlZE9uT3RoZXJQYWdlcyA9IHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudCkgPT4gIWFsbFJvd09uUGFnZS5pbmNsdWRlcyhlbGVtZW50KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXG4gICAgICAgICAgICAgIC4uLnJvd1NlbGVjdGVkT25PdGhlclBhZ2VzLFxuICAgICAgICAgICAgICAuLi5hbGxSb3dTZWxlY3RlZE9uUGFnZSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAmJiB0aGlzLnJvd0RhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5zZWxlY3RlZElkcykge1xuICAgICAgICB0aGlzLnJvd0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RJblNlbGVjdGVkSWRzID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LnNlbGVjdGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAnJyArIHJvd1t0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV1cbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZXhpc3RJbkV4Y2x1ZGVkSWRzID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LmV4Y2x1ZGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAnJyArIHJvd1t0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV1cbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LmFsbFNlbGVjdGVkIHx8IGV4aXN0SW5TZWxlY3RlZElkcykgJiYgIWV4aXN0SW5FeGNsdWRlZElkcykge1xuICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsUGFnZVJvd0FyZVNlbGVjdGVkKCk7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkVmFsdWVPblJvd0RhdGEoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLnJvd0RhdGFcbiAgICAgID8uZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICByb3cuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCF0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkICYmXG4gICAgICAgICAgdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICA/LmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93W3RoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ldmVyeSgoaXRlbSkgPT4gKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LnNlbGVjdGVkSWRzIHx8IFtdKS5pbmNsdWRlcygnJyArIGl0ZW0pKSkgfHxcbiAgICAgICAgKCF0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5hbGxTZWxlY3RlZCAmJlxuICAgICAgICAgIHRoaXMucm93RGF0YSAmJlxuICAgICAgICAgICF0aGlzLnJvd0RhdGFcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dbdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNvbWUoKGlkKSA9PiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uZXhjbHVkZWRJZHMgfHwgW10pLmluY2x1ZGVzKCcnICsgaWQpKSkgfHxcbiAgICAgICAgdGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWRhdGF0YWJsZV9fc2VsZWN0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TZXR0aW5ncyAmJiBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMgJiYgcGFnaW5hdGlvbkVuYWJsZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWMtZGF0YXRhYmxlX190b3BiYXItc2VsZWN0aW9uXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoIHx8IHNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItc2VsZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkOyBlbHNlIG5vdEFsbFNlbGVjdGVkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMubGVuZ3RoID4gMDsgZWxzZSBleGx1ZGVkSWRzRW1wdHlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtcyAtIHNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5zZWxlY3RlZExhYmVsIHx8ICdzZWxlY3RlZCcgfX08L2JcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU2V0dGluZ3MudG90YWxTZWxlY3RhYmxlSXRlbXMgLVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLmxlbmd0aCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHBsdXJpYWxBbGxTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93T25QYWdlTGFiZWwgfHwgJ3JvdyBvbiB0aGUgcGFnZS4gJyB9fS1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXJpYWxBbGxTZWxlY3RlZD5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9cIiAoY2xpY2spPVwic2VsZWN0QWxsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMuc2VsZWN0QWxsTGFiZWwgfHwgJ1NlbGVjdCBhbGwnIH19XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtcyB9fVxuICAgICAgICAgICAgICAgICAge3sgc2VsZWN0aW9uU2V0dGluZ3MubGFiZWxzLnJvd3NPZlRhYmxlTGFiZWwgfHwgJ3Jvd3Mgb2YgdGhlIHRhYmxlJyB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4bHVkZWRJZHNFbXB0eT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzU2VsZWN0ZWRMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAnQWxsIHJvd3MgYXJlIHNlbGVjdGVkIGluIHRoZSB0YWJsZS4nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9cIiAoY2xpY2spPVwiY2xlYXJBbGwoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5jbGVhclNlbGVjdGlvbkxhYmVsIHx8ICdDbGVhciBzZWxlY3Rpb24nIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90QWxsU2VsZWN0ZWQ+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICA+e3sgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0aW9uU2V0dGluZ3MubGFiZWxzLnNlbGVjdGVkTGFiZWwgfHwgJ3NlbGVjdGVkJyB9fTwvYlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzICYmIHNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgJiYgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHBsdXJpYWxOb3RBbGxTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93T25QYWdlTGFiZWwgfHwgJ3JvdyBvbiB0aGUgcGFnZS4gJyB9fS1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXJpYWxOb3RBbGxTZWxlY3RlZD5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiL1wiIChjbGljayk9XCJzZWxlY3RBbGwoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5zZWxlY3RBbGxMYWJlbCB8fCAnU2VsZWN0IGFsbCcgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLnRvdGFsU2VsZWN0YWJsZUl0ZW1zIH19XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93c09mVGFibGVMYWJlbCB8fCAncm93cyBvZiB0aGUgdGFibGUnIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW96LWRhdGF0YWJsZS1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbXBvbmVudHMvc2VsZWN0aW9uL21vei1kYXRhdGFibGUtc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2RhdGF0YWJsZS9jb21wb25lbnRzL3NlbGVjdGlvbi9tb3otZGF0YXRhYmxlLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQzs7O0FBVXZCLE1BQU0sT0FBTyw4QkFBOEI7SUFTekMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFOMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRXZCLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRTVFLG9CQUFlLEdBQVksS0FBSyxDQUFDO0lBRUssQ0FBQztJQUU5QyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFB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OEI7a0JBTjFDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUcvQixpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNXLHlCQUF5QjtzQkFBekMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3dEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvcm93LWRhdGEnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3Rpb24tc2V0dGluZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtb3otZGF0YXRhYmxlLXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb3otZGF0YXRhYmxlLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vei1kYXRhdGFibGUtc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNb3pEYXRhdGFibGVTZWxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uU2V0dGluZ3M/OiBTZWxlY3Rpb25TZXR0aW5ncztcbiAgQElucHV0KCkgcHVibGljIHBhZ2luYXRpb25FbmFibGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGFsbG93QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgcm93RGF0YT86IFJvd0RhdGFbXTtcbiAgQE91dHB1dCgpIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25BbGxFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25TZXR0aW5ncz4oKTtcblxuICBwdWJsaWMgaXNJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncm93RGF0YSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZU9uUm93RGF0YSh0cnVlKTtcbiAgICAgIHRoaXMuaXNJbmRldGVybWluYXRlID0gdGhpcy5pc1NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25BbGxFbWl0dGVyLmVtaXQodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyk7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZU9uUm93RGF0YShmYWxzZSk7XG4gICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkFsbEVtaXR0ZXIuZW1pdCh0aGlzLnNlbGVjdGlvblNldHRpbmdzKTtcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0FsbFBhZ2VSb3dBcmVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpIHx8ICh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5hbGxTZWxlY3RlZCA/PyBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25VZHBhdGVTZWxlY3Rpb25Sb3cocm93OiBSb3dEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVDb3VudEl0ZW1TZWxlY3Rpb24ocm93KTtcbiAgfVxuXG4gIHB1YmxpYyBvblVkcGF0ZVNlbGVjdGlvbkFsbFBhZ2VSb3dzKCRldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlT25Sb3dEYXRhKCRldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgdGhpcy5oYW5kbGVDb3VudEFsbFNlbGVjdGlvbih0aGlzLmlzQWxsUGFnZVJvd0FyZVNlbGVjdGVkKCkpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvdW50SXRlbVNlbGVjdGlvbihyb3c6IFJvd0RhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXkgPSB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkKSB7XG4gICAgICAgIGlmIChyb3cuc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcy5maWx0ZXIoKGRlc2VsZWN0ZWRJZCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZGVzZWxlY3RlZElkICE9PSB0aGlzLmdldElkKHJvdyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25FbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW1xuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLFxuICAgICAgICAgICAgICB0aGlzLmdldElkKHJvdyksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW1xuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJZCkgPT4gc2VsZWN0ZWRJZCAhPT0gdGhpcy5nZXRJZChyb3cpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMubGVuZ3RoID09PVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocm93LnNlbGVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMsXG4gICAgICAgICAgICB0aGlzLmdldElkKHJvdyksXG4gICAgICAgICAgXTtcbiAgICAgICAgICBpZiAodGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzLmZpbHRlcigoc2VsZWN0ZWRJZCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJZCAhPT0gdGhpcy5nZXRJZChyb3cpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSB0aGlzLmlzU2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpO1xuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtcyAmJlxuICAgICAgICB0aGlzLmFsbG93QWxsU2VsZWN0ZWRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3dpdGNodG9BbGxTZWxlY3RlZE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvdW50QWxsU2VsZWN0aW9uKGFsbFBhZ2VSb3dzU2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncykge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5ID0gdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXk7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uYWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRldGVybWluYXRlICYmIHRoaXMucm93RGF0YSkge1xuICAgICAgICAgIHRoaXMucm93RGF0YVxuICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLmluZGV4T2YodGhpcy5nZXRJZChyb3cpLCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFsuLi50aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNodG9BbGxTZWxlY3RlZE1vZGUoKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAgID8uZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMucm93RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyA9IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5yb3dEYXRhLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pLm1hcCgocm93KSA9PiB0aGlzLmdldElkKHJvdykpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5leGNsdWRlZElkcy5sZW5ndGggPT09XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MudG90YWxTZWxlY3RhYmxlSXRlbXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW107XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW107XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gIXJvdy5kaXNhYmxlU2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFsbFBhZ2VSb3dzU2VsZWN0ZWQgJiYgdGhpcy5yb3dEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgIC5maWx0ZXIoKHJvdykgPT4gISh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5zZWxlY3RlZElkcyB8fCBbXSkuaW5jbHVkZXModGhpcy5nZXRJZChyb3cpKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzID0gW1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3RlZElkcyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0SWQocm93KSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnJvd0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFJvd09uUGFnZSA9IHRoaXMucm93RGF0YVxuICAgICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgICAgICAgICAgLm1hcCgocm93KSA9PiB0aGlzLmdldElkKHJvdykpO1xuICAgICAgICAgICAgY29uc3QgYWxsUm93U2VsZWN0ZWRPblBhZ2UgPSB0aGlzLnJvd0RhdGFcbiAgICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24gJiYgcm93LnNlbGVjdGVkKVxuICAgICAgICAgICAgICAubWFwKChyb3cpID0+IHRoaXMuZ2V0SWQocm93KSk7XG4gICAgICAgICAgICBjb25zdCByb3dTZWxlY3RlZE9uT3RoZXJQYWdlcyA9IHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZWxlbWVudCkgPT4gIWFsbFJvd09uUGFnZS5pbmNsdWRlcyhlbGVtZW50KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgPSBbXG4gICAgICAgICAgICAgIC4uLnJvd1NlbGVjdGVkT25PdGhlclBhZ2VzLFxuICAgICAgICAgICAgICAuLi5hbGxSb3dTZWxlY3RlZE9uUGFnZSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncyAmJiB0aGlzLnJvd0RhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNldHRpbmdzPy5zZWxlY3RlZElkcykge1xuICAgICAgICB0aGlzLnJvd0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RJblNlbGVjdGVkSWRzID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LnNlbGVjdGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAnJyArIHJvd1t0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV1cbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZXhpc3RJbkV4Y2x1ZGVkSWRzID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LmV4Y2x1ZGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAnJyArIHJvd1t0aGlzLnNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGlvbklkZW50aWZpZXJGaWVsZEtleV1cbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LmFsbFNlbGVjdGVkIHx8IGV4aXN0SW5TZWxlY3RlZElkcykgJiYgIWV4aXN0SW5FeGNsdWRlZElkcykge1xuICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhblN3aXRjaHRvQWxsU2VsZWN0ZWRNb2RlKCkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IHRoaXMuaXNTZWxlY3Rpb25JbmRldGVybWluYXRlKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MuYWxsU2VsZWN0ZWQgPSB0aGlzLmlzQWxsUGFnZVJvd0FyZVNlbGVjdGVkKCk7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkVmFsdWVPblJvd0RhdGEoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLnJvd0RhdGFcbiAgICAgID8uZmlsdGVyKChyb3cpID0+ICFyb3cuZGlzYWJsZVNlbGVjdGlvbilcbiAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICByb3cuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCF0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkICYmXG4gICAgICAgICAgdGhpcy5yb3dEYXRhXG4gICAgICAgICAgICA/LmZpbHRlcigocm93KSA9PiAhcm93LmRpc2FibGVTZWxlY3Rpb24pXG4gICAgICAgICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93W3RoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ldmVyeSgoaXRlbSkgPT4gKHRoaXMuc2VsZWN0aW9uU2V0dGluZ3M/LnNlbGVjdGVkSWRzIHx8IFtdKS5pbmNsdWRlcygnJyArIGl0ZW0pKSkgfHxcbiAgICAgICAgKCF0aGlzLnNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5hbGxTZWxlY3RlZCAmJlxuICAgICAgICAgIHRoaXMucm93RGF0YSAmJlxuICAgICAgICAgICF0aGlzLnJvd0RhdGFcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dbdGhpcy5zZWxlY3Rpb25TZXR0aW5ncy5zZWxlY3Rpb25JZGVudGlmaWVyRmllbGRLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNvbWUoKGlkKSA9PiAodGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uZXhjbHVkZWRJZHMgfHwgW10pLmluY2x1ZGVzKCcnICsgaWQpKSkgfHxcbiAgICAgICAgdGhpcy5jYW5Td2l0Y2h0b0FsbFNlbGVjdGVkTW9kZSgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IHNvIHRoZSByZXN1bHRlZCBpZCA9PSAnW29iamVjdCBPYmplY3RdJ1xuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldElkKHJvdzogUm93RGF0YSkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHJvd0VsZW1lbnQgPSByb3dbdGhpcy5zZWxlY3Rpb25TZXR0aW5ncz8uc2VsZWN0aW9uSWRlbnRpZmllckZpZWxkS2V5XTtcbiAgICBpZiAodHlwZW9mIHJvd0VsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcm93RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuICcnICsgcm93RWxlbWVudDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWRhdGF0YWJsZV9fc2VsZWN0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TZXR0aW5ncyAmJiBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMgJiYgcGFnaW5hdGlvbkVuYWJsZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWMtZGF0YXRhYmxlX190b3BiYXItc2VsZWN0aW9uXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoIHx8IHNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItc2VsZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvblNldHRpbmdzLmFsbFNlbGVjdGVkOyBlbHNlIG5vdEFsbFNlbGVjdGVkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU2V0dGluZ3MuZXhjbHVkZWRJZHMubGVuZ3RoID4gMDsgZWxzZSBleGx1ZGVkSWRzRW1wdHlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtcyAtIHNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5zZWxlY3RlZExhYmVsIHx8ICdzZWxlY3RlZCcgfX08L2JcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU2V0dGluZ3MudG90YWxTZWxlY3RhYmxlSXRlbXMgLVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblNldHRpbmdzLmV4Y2x1ZGVkSWRzLmxlbmd0aCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHBsdXJpYWxBbGxTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93T25QYWdlTGFiZWwgfHwgJ3JvdyBvbiB0aGUgcGFnZS4gJyB9fS1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXJpYWxBbGxTZWxlY3RlZD5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9cIiAoY2xpY2spPVwic2VsZWN0QWxsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMuc2VsZWN0QWxsTGFiZWwgfHwgJ1NlbGVjdCBhbGwnIH19XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy50b3RhbFNlbGVjdGFibGVJdGVtcyB9fVxuICAgICAgICAgICAgICAgICAge3sgc2VsZWN0aW9uU2V0dGluZ3MubGFiZWxzLnJvd3NPZlRhYmxlTGFiZWwgfHwgJ3Jvd3Mgb2YgdGhlIHRhYmxlJyB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4bHVkZWRJZHNFbXB0eT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzU2VsZWN0ZWRMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAnQWxsIHJvd3MgYXJlIHNlbGVjdGVkIGluIHRoZSB0YWJsZS4nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9cIiAoY2xpY2spPVwiY2xlYXJBbGwoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5jbGVhclNlbGVjdGlvbkxhYmVsIHx8ICdDbGVhciBzZWxlY3Rpb24nIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90QWxsU2VsZWN0ZWQ+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICA+e3sgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0aW9uU2V0dGluZ3MubGFiZWxzLnNlbGVjdGVkTGFiZWwgfHwgJ3NlbGVjdGVkJyB9fTwvYlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzICYmIHNlbGVjdGlvblNldHRpbmdzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMgJiYgc2VsZWN0aW9uU2V0dGluZ3Muc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHBsdXJpYWxOb3RBbGxTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93T25QYWdlTGFiZWwgfHwgJ3JvdyBvbiB0aGUgcGFnZS4gJyB9fS1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXJpYWxOb3RBbGxTZWxlY3RlZD5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5yb3dzT25QYWdlTGFiZWwgfHwgJ3Jvd3Mgb24gdGhlIHBhZ2UuICcgfX0tXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiL1wiIChjbGljayk9XCJzZWxlY3RBbGwoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLmxhYmVscy5zZWxlY3RBbGxMYWJlbCB8fCAnU2VsZWN0IGFsbCcgfX1cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGlvblNldHRpbmdzLnRvdGFsU2VsZWN0YWJsZUl0ZW1zIH19XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25TZXR0aW5ncy5sYWJlbHMucm93c09mVGFibGVMYWJlbCB8fCAncm93cyBvZiB0aGUgdGFibGUnIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
@@ -2479,7 +2479,7 @@ class MozDatatableSelectionComponent {
2479
2479
  if (row.selected) {
2480
2480
  this.selectionSettings.excludedIds = [
2481
2481
  ...this.selectionSettings.excludedIds.filter((deselectedId) => {
2482
- return deselectedId !== '' + row[selectionIdentifierFieldKey];
2482
+ return deselectedId !== this.getId(row);
2483
2483
  }),
2484
2484
  ];
2485
2485
  }
@@ -2487,12 +2487,12 @@ class MozDatatableSelectionComponent {
2487
2487
  if (this.paginationEnabled) {
2488
2488
  this.selectionSettings.excludedIds = [
2489
2489
  ...this.selectionSettings.excludedIds,
2490
- '' + row[selectionIdentifierFieldKey],
2490
+ this.getId(row),
2491
2491
  ];
2492
2492
  }
2493
2493
  else {
2494
2494
  this.selectionSettings.selectedIds = [
2495
- ...this.selectionSettings.selectedIds.filter((selectedId) => selectedId !== '' + row[selectionIdentifierFieldKey]),
2495
+ ...this.selectionSettings.selectedIds.filter((selectedId) => selectedId !== this.getId(row)),
2496
2496
  ];
2497
2497
  this.selectionSettings.allSelected = false;
2498
2498
  }
@@ -2507,7 +2507,7 @@ class MozDatatableSelectionComponent {
2507
2507
  if (row.selected) {
2508
2508
  this.selectionSettings.selectedIds = [
2509
2509
  ...this.selectionSettings.selectedIds,
2510
- '' + row[selectionIdentifierFieldKey],
2510
+ this.getId(row),
2511
2511
  ];
2512
2512
  if (this.canSwitchtoAllSelectedMode()) {
2513
2513
  this.switchtoAllSelectedMode();
@@ -2516,7 +2516,7 @@ class MozDatatableSelectionComponent {
2516
2516
  else {
2517
2517
  this.selectionSettings.selectedIds = [
2518
2518
  ...this.selectionSettings.selectedIds.filter((selectedId) => {
2519
- return selectedId !== '' + row[selectionIdentifierFieldKey];
2519
+ return selectedId !== this.getId(row);
2520
2520
  }),
2521
2521
  ];
2522
2522
  }
@@ -2550,7 +2550,7 @@ class MozDatatableSelectionComponent {
2550
2550
  .filter((row) => !row.disableSelection)
2551
2551
  .forEach((row) => {
2552
2552
  if (this.selectionSettings) {
2553
- const index = this.selectionSettings.excludedIds.indexOf('' + row[selectionIdentifierFieldKey], 0);
2553
+ const index = this.selectionSettings.excludedIds.indexOf(this.getId(row), 0);
2554
2554
  if (index > -1) {
2555
2555
  this.selectionSettings.excludedIds.splice(index, 1);
2556
2556
  this.selectionSettings.excludedIds = [...this.selectionSettings.excludedIds];
@@ -2569,9 +2569,7 @@ class MozDatatableSelectionComponent {
2569
2569
  if (this.rowData) {
2570
2570
  this.selectionSettings.excludedIds = [
2571
2571
  ...this.selectionSettings.excludedIds,
2572
- ...this.rowData
2573
- .filter((row) => !row.disableSelection)
2574
- .map((row) => '' + row[selectionIdentifierFieldKey]),
2572
+ ...this.rowData.filter((row) => !row.disableSelection).map((row) => this.getId(row)),
2575
2573
  ];
2576
2574
  if (this.selectionSettings.excludedIds.length ===
2577
2575
  this.selectionSettings.totalSelectableItems) {
@@ -2594,12 +2592,12 @@ class MozDatatableSelectionComponent {
2594
2592
  if (allPageRowsSelected && this.rowData) {
2595
2593
  this.rowData
2596
2594
  .filter((row) => !row.disableSelection)
2597
- .filter((row) => { var _a; return !(((_a = this.selectionSettings) === null || _a === void 0 ? void 0 : _a.selectedIds) || []).includes('' + row[selectionIdentifierFieldKey]); })
2595
+ .filter((row) => { var _a; return !(((_a = this.selectionSettings) === null || _a === void 0 ? void 0 : _a.selectedIds) || []).includes(this.getId(row)); })
2598
2596
  .forEach((row) => {
2599
2597
  if (this.selectionSettings) {
2600
2598
  this.selectionSettings.selectedIds = [
2601
2599
  ...this.selectionSettings.selectedIds,
2602
- '' + row[selectionIdentifierFieldKey],
2600
+ this.getId(row),
2603
2601
  ];
2604
2602
  }
2605
2603
  });
@@ -2611,10 +2609,10 @@ class MozDatatableSelectionComponent {
2611
2609
  if (this.rowData) {
2612
2610
  const allRowOnPage = this.rowData
2613
2611
  .filter((row) => !row.disableSelection)
2614
- .map((row) => '' + row[selectionIdentifierFieldKey]);
2612
+ .map((row) => this.getId(row));
2615
2613
  const allRowSelectedOnPage = this.rowData
2616
2614
  .filter((row) => !row.disableSelection && row.selected)
2617
- .map((row) => '' + row[selectionIdentifierFieldKey]);
2615
+ .map((row) => this.getId(row));
2618
2616
  const rowSelectedOnOtherPages = this.selectionSettings.selectedIds.filter((element) => !allRowOnPage.includes(element));
2619
2617
  this.selectionSettings.selectedIds = [
2620
2618
  ...rowSelectedOnOtherPages,
@@ -2688,6 +2686,22 @@ class MozDatatableSelectionComponent {
2688
2686
  }
2689
2687
  return false;
2690
2688
  }
2689
+ /**
2690
+ * if the value is an object so the resulted id == '[object Object]'
2691
+ * @param row
2692
+ * @private
2693
+ */
2694
+ getId(row) {
2695
+ var _a, _b;
2696
+ if (!((_a = this.selectionSettings) === null || _a === void 0 ? void 0 : _a.selectionIdentifierFieldKey)) {
2697
+ return '';
2698
+ }
2699
+ const rowElement = row[(_b = this.selectionSettings) === null || _b === void 0 ? void 0 : _b.selectionIdentifierFieldKey];
2700
+ if (typeof rowElement === 'object') {
2701
+ return rowElement;
2702
+ }
2703
+ return '' + rowElement;
2704
+ }
2691
2705
  }
2692
2706
  MozDatatableSelectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MozDatatableSelectionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2693
2707
  MozDatatableSelectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MozDatatableSelectionComponent, selector: "moz-datatable-selection", inputs: { selectionSettings: "selectionSettings", paginationEnabled: "paginationEnabled", allowAllSelected: "allowAllSelected", rowData: "rowData" }, outputs: { updateSelectionAllEmitter: "updateSelectionAllEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"mc-datatable__selection\">\n <ng-container *ngIf=\"selectionSettings && selectionSettings.labels && paginationEnabled\">\n <div class=\"mc-datatable__topbar-selection\">\n <ng-container *ngIf=\"selectionSettings.selectedIds.length || selectionSettings.allSelected\">\n <div class=\"center-selection-label\">\n <div *ngIf=\"selectionSettings.allSelected; else notAllSelected\">\n <ng-container *ngIf=\"selectionSettings.excludedIds.length > 0; else exludedIdsEmpty\">\n <span>\n <b\n >{{\n selectionSettings.totalSelectableItems - selectionSettings.excludedIds.length\n }}\n {{ selectionSettings.labels.selectedLabel || 'selected' }}</b\n >\n <ng-container\n *ngIf=\"\n selectionSettings.totalSelectableItems -\n selectionSettings.excludedIds.length ===\n 1;\n else plurialAllSelected\n \"\n >\n {{ selectionSettings.labels.rowOnPageLabel || 'row on the page. ' }}-\n </ng-container>\n <ng-template #plurialAllSelected>\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n </ng-template>\n\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n <a href=\"/\" (click)=\"selectAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.selectAllLabel || 'Select all' }}\n {{ selectionSettings.totalSelectableItems }}\n {{ selectionSettings.labels.rowsOfTableLabel || 'rows of the table' }}\n </a>\n </span>\n </ng-container>\n <ng-template #exludedIdsEmpty>\n <span>\n {{\n selectionSettings.labels.rowsSelectedLabel ||\n 'All rows are selected in the table.'\n }}\n -\n <a href=\"/\" (click)=\"clearAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.clearSelectionLabel || 'Clear selection' }}\n </a>\n </span>\n </ng-template>\n </div>\n <ng-template #notAllSelected>\n <span>\n <b\n >{{ selectionSettings.selectedIds.length }}\n {{ selectionSettings.labels.selectedLabel || 'selected' }}</b\n >\n <ng-container\n *ngIf=\"selectionSettings.selectedIds && selectionSettings.selectedIds.length > 0\"\n >\n <ng-container\n *ngIf=\"\n selectionSettings.selectedIds && selectionSettings.selectedIds.length === 1;\n else plurialNotAllSelected\n \"\n >\n {{ selectionSettings.labels.rowOnPageLabel || 'row on the page. ' }}-\n </ng-container>\n <ng-template #plurialNotAllSelected>\n {{ selectionSettings.labels.rowsOnPageLabel || 'rows on the page. ' }}-\n </ng-template>\n <a href=\"/\" (click)=\"selectAll(); $event.preventDefault()\">\n {{ selectionSettings.labels.selectAllLabel || 'Select all' }}\n {{ selectionSettings.totalSelectableItems }}\n {{ selectionSettings.labels.rowsOfTableLabel || 'rows of the table' }}\n </a>\n </ng-container>\n </span>\n </ng-template>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n", styles: [".center-selection-label{margin-bottom:1rem;background-color:#fff;height:34px;text-align:center;align-items:center;display:flex;justify-content:center;border-radius:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });