ngx-material-entity 15.2.1 → 15.2.2

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 (49) hide show
  1. package/README.md +3 -3
  2. package/components/confirm-dialog/confirm-dialog.component.d.ts +1 -1
  3. package/components/input/input.component.d.ts +8 -1
  4. package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +1 -1
  5. package/components/table/create-dialog/create-entity-dialog.component.d.ts +1 -1
  6. package/components/table/default.actions.d.ts +8 -0
  7. package/components/table/display-column-value/base-display-column-value.component.d.ts +15 -0
  8. package/components/table/display-column-value/display-column-value.component.d.ts +17 -0
  9. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +1 -1
  10. package/components/table/table-data.d.ts +13 -1
  11. package/components/table/table.component.d.ts +3 -2
  12. package/decorators/object/object-decorator-internal.data.d.ts +1 -0
  13. package/decorators/object/object-decorator.data.d.ts +4 -0
  14. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +18 -8
  15. package/esm2020/components/edit-page/edit-page.component.mjs +11 -4
  16. package/esm2020/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +3 -5
  17. package/esm2020/components/input/date/date-range-input/date-range-input.component.mjs +3 -3
  18. package/esm2020/components/input/date/date-time-input/date-time-input.component.mjs +4 -3
  19. package/esm2020/components/input/input.component.mjs +14 -4
  20. package/esm2020/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +3 -4
  21. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +21 -9
  22. package/esm2020/components/table/default.actions.mjs +22 -1
  23. package/esm2020/components/table/display-column-value/base-display-column-value.component.mjs +27 -0
  24. package/esm2020/components/table/display-column-value/display-column-value.component.mjs +33 -0
  25. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +22 -9
  26. package/esm2020/components/table/table-data.mjs +1 -1
  27. package/esm2020/components/table/table.component.mjs +44 -16
  28. package/esm2020/decorators/object/object-decorator-internal.data.mjs +2 -1
  29. package/esm2020/decorators/object/object-decorator.data.mjs +1 -1
  30. package/esm2020/public-api.mjs +5 -8
  31. package/esm2020/services/entity.service.mjs +7 -3
  32. package/esm2020/utilities/date.utilities.mjs +1 -1
  33. package/esm2020/utilities/entity.utilities.mjs +19 -10
  34. package/fesm2015/ngx-material-entity.mjs +330 -311
  35. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  36. package/fesm2020/ngx-material-entity.mjs +327 -310
  37. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  38. package/package.json +1 -1
  39. package/public-api.d.ts +4 -7
  40. package/services/entity.service.d.ts +7 -3
  41. package/utilities/entity.utilities.d.ts +2 -1
  42. package/components/confirm-dialog/confirm-dialog.module.d.ts +0 -12
  43. package/components/table/create-dialog/create-entity-dialog.module.d.ts +0 -13
  44. package/components/table/edit-dialog/edit-entity-dialog.module.d.ts +0 -14
  45. package/components/table/table.module.d.ts +0 -20
  46. package/esm2020/components/confirm-dialog/confirm-dialog.module.mjs +0 -22
  47. package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +0 -40
  48. package/esm2020/components/table/edit-dialog/edit-entity-dialog.module.mjs +0 -44
  49. package/esm2020/components/table/table.module.mjs +0 -68
@@ -1,9 +1,17 @@
1
1
  import { SelectionModel } from '@angular/cdk/collections';
2
+ import { NgFor, NgIf } from '@angular/common';
2
3
  import { Component, EnvironmentInjector, Input, ViewChild, inject } from '@angular/core';
3
- import { MatDialog } from '@angular/material/dialog';
4
- import { MatPaginator } from '@angular/material/paginator';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { MatCheckboxModule } from '@angular/material/checkbox';
7
+ import { MatDialog, MatDialogModule } from '@angular/material/dialog';
8
+ import { MatFormFieldModule } from '@angular/material/form-field';
9
+ import { MatInputModule } from '@angular/material/input';
10
+ import { MatMenuModule } from '@angular/material/menu';
11
+ import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
12
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
5
13
  import { MatSort } from '@angular/material/sort';
6
- import { MatTableDataSource } from '@angular/material/table';
14
+ import { MatTableDataSource, MatTableModule } from '@angular/material/table';
7
15
  import { Router } from '@angular/router';
8
16
  import { Subject, firstValueFrom, takeUntil } from 'rxjs';
9
17
  import { SelectionUtilities } from '../../utilities/selection.utilities';
@@ -11,21 +19,21 @@ import { ConfirmDialogDataBuilder } from '../confirm-dialog/confirm-dialog-data.
11
19
  import { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
12
20
  import { CreateEntityDialogDataBuilder } from './create-dialog/create-entity-dialog-data.builder';
13
21
  import { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';
22
+ import { DisplayColumnValueComponent } from './display-column-value/display-column-value.component';
14
23
  import { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';
15
24
  import { EditEntityDataBuilder } from './edit-dialog/edit-entity.builder';
16
25
  import { TableDataBuilder } from './table-data.builder';
17
26
  import * as i0 from "@angular/core";
18
27
  import * as i1 from "@angular/material/dialog";
19
28
  import * as i2 from "@angular/router";
20
- import * as i3 from "@angular/common";
21
- import * as i4 from "@angular/material/input";
22
- import * as i5 from "@angular/material/form-field";
23
- import * as i6 from "@angular/material/checkbox";
24
- import * as i7 from "@angular/material/table";
25
- import * as i8 from "@angular/material/paginator";
26
- import * as i9 from "@angular/material/button";
27
- import * as i10 from "@angular/material/menu";
28
- import * as i11 from "@angular/material/progress-spinner";
29
+ import * as i3 from "@angular/material/input";
30
+ import * as i4 from "@angular/material/form-field";
31
+ import * as i5 from "@angular/material/checkbox";
32
+ import * as i6 from "@angular/material/table";
33
+ import * as i7 from "@angular/material/paginator";
34
+ import * as i8 from "@angular/material/button";
35
+ import * as i9 from "@angular/material/menu";
36
+ import * as i10 from "@angular/material/progress-spinner";
29
37
  /**
30
38
  * Generates a fully functional table for displaying, creating, updating and deleting entities
31
39
  * based on the configuration passed in the @Input "tableData".
@@ -128,9 +136,13 @@ export class NgxMatEntityTableComponent {
128
136
  * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.
129
137
  *
130
138
  * @param entity - The entity that should be updated.
139
+ * @param dCol - The display column. Is needed if a custom component was used that handles the click event differently.
131
140
  * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.
132
141
  */
133
- editEntity(entity) {
142
+ editEntity(entity, dCol) {
143
+ if (dCol.disableClick == true) {
144
+ return;
145
+ }
134
146
  if (!(this.data.baseData.allowUpdate(entity) || this.data.baseData.allowRead(entity))) {
135
147
  return;
136
148
  }
@@ -259,10 +271,26 @@ export class NgxMatEntityTableComponent {
259
271
  }
260
272
  }
261
273
  NgxMatEntityTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgxMatEntityTableComponent, deps: [{ token: i1.MatDialog }, { token: i0.EnvironmentInjector }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
262
- NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgxMatEntityTableComponent, selector: "ngx-mat-entity-table", inputs: { tableData: "tableData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.tableActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button type=\"button\" class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"data.baseData.allowJsonImport\" type=\"button\" [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\" mat-menu-item>\n {{importAction.displayName}}\n </button>\n <button type=\"button\" *ngFor=\"let action of data.baseData.tableActions\" [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell class=\"entity\" *matCellDef=\"let entity\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\" [checked]=\"selection.isSelected(entity)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"isLoading && data.baseData.displayLoadingSpinner\" style=\"margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;\">\n </mat-spinner>\n\n <mat-paginator [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}button{width:100%}.title{text-align:center}.actions-button,.create-button{height:56px;line-height:24px;font-size:16px}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
274
+ NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgxMatEntityTableComponent, isStandalone: true, selector: "ngx-mat-entity-table", inputs: { tableData: "tableData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.tableActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button type=\"button\" class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"data.baseData.allowJsonImport\" type=\"button\" [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\" mat-menu-item>\n {{importAction.displayName}}\n </button>\n <button type=\"button\" *ngFor=\"let action of data.baseData.tableActions\" [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell class=\"entity\" *matCellDef=\"let entity\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\" [checked]=\"selection.isSelected(entity)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"!dCol.disableClick && (data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity))\" (click)=\"editEntity(entity, dCol)\" *matCellDef=\"let entity\">\n <ng-container *ngIf=\"dCol.Component\">\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n </ng-container>\n <ng-container *ngIf=\"!dCol.Component\">\n {{getDisplayColumnValue(entity, dCol)}}\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"isLoading && data.baseData.displayLoadingSpinner\" style=\"margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;\">\n </mat-spinner>\n\n <mat-paginator [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}button{width:100%}.title{text-align:center}.actions-button,.create-button{height:56px;line-height:24px;font-size:16px}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: DisplayColumnValueComponent, selector: "display-column-value", inputs: ["entity", "ComponentClass"] }] });
263
275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgxMatEntityTableComponent, decorators: [{
264
276
  type: Component,
265
- args: [{ selector: 'ngx-mat-entity-table', template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.tableActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button type=\"button\" class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"data.baseData.allowJsonImport\" type=\"button\" [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\" mat-menu-item>\n {{importAction.displayName}}\n </button>\n <button type=\"button\" *ngFor=\"let action of data.baseData.tableActions\" [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell class=\"entity\" *matCellDef=\"let entity\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\" [checked]=\"selection.isSelected(entity)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{getDisplayColumnValue(entity, dCol)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"isLoading && data.baseData.displayLoadingSpinner\" style=\"margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;\">\n </mat-spinner>\n\n <mat-paginator [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}button{width:100%}.title{text-align:center}.actions-button,.create-button{height:56px;line-height:24px;font-size:16px}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"] }]
277
+ args: [{ selector: 'ngx-mat-entity-table', standalone: true, imports: [
278
+ NgIf,
279
+ NgFor,
280
+ MatInputModule,
281
+ FormsModule,
282
+ MatFormFieldModule,
283
+ MatCheckboxModule,
284
+ MatTableModule,
285
+ MatPaginatorModule,
286
+ MatButtonModule,
287
+ MatMenuModule,
288
+ MatDialogModule,
289
+ MatProgressSpinnerModule,
290
+ NgxMatEntityCreateDialogComponent,
291
+ NgxMatEntityEditDialogComponent,
292
+ DisplayColumnValueComponent
293
+ ], template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\">\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.tableActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate()\"\n [class.col-lg-4]=\"!data.baseData.allowCreate()\"\n [class.col-md-3]=\"data.baseData.allowCreate()\"\n [class.col-md-6]=\"!data.baseData.allowCreate()\"\n [class.col-sm-6]=\"data.baseData.allowCreate()\"\n [class.col-sm-12]=\"!data.baseData.allowCreate()\"\n >\n <button type=\"button\" class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.tableActionsLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngIf=\"data.baseData.allowJsonImport\" type=\"button\" [disabled]=\"tableActionDisabled(importAction)\" (click)=\"runTableAction(importAction)\" mat-menu-item>\n {{importAction.displayName}}\n </button>\n <button type=\"button\" *ngFor=\"let action of data.baseData.tableActions\" [disabled]=\"tableActionDisabled(action)\" (click)=\"runTableAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate()\"\n [class.col-lg-2]=\"data.baseData.tableActions.length\"\n [class.col-lg-4]=\"!data.baseData.tableActions.length\"\n [class.col-md-3]=\"data.baseData.tableActions.length\"\n [class.col-md-6]=\"!data.baseData.tableActions.length\"\n [class.col-sm-6]=\"data.baseData.tableActions.length\"\n [class.col-sm-12]=\"!data.baseData.tableActions.length\"\n >\n <button type=\"button\" class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? SelectionUtilities.masterToggle(selection, dataSource) : null\" [checked]=\"selection.hasValue() && SelectionUtilities.isAllSelected(selection, dataSource)\" [indeterminate]=\"selection.hasValue() && !SelectionUtilities.isAllSelected(selection, dataSource)\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell class=\"entity\" *matCellDef=\"let entity\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(entity) : null\" [checked]=\"selection.isSelected(entity)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"!dCol.disableClick && (data.baseData.allowUpdate(entity) || data.baseData.allowRead(entity))\" (click)=\"editEntity(entity, dCol)\" *matCellDef=\"let entity\">\n <ng-container *ngIf=\"dCol.Component\">\n <display-column-value [entity]=\"entity\" [ComponentClass]=\"dCol.Component\"></display-column-value>\n </ng-container>\n <ng-container *ngIf=\"!dCol.Component\">\n {{getDisplayColumnValue(entity, dCol)}}\n </ng-container>\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-spinner *ngIf=\"isLoading && data.baseData.displayLoadingSpinner\" style=\"margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;\">\n </mat-spinner>\n\n <mat-paginator [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"></mat-paginator>\n</div>", styles: [".mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:1px solid rgba(0,0,0,.12)}button{width:100%}.title{text-align:center}.actions-button,.create-button{height:56px;line-height:24px;font-size:16px}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"] }]
266
294
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.EnvironmentInjector }, { type: i2.Router }]; }, propDecorators: { tableData: [{
267
295
  type: Input
268
296
  }], paginator: [{
@@ -275,4 +303,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
275
303
  type: ViewChild,
276
304
  args: ['filter', { static: true }]
277
305
  }] } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0sK0NBQStDLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEcsT0FBTyxFQUFFLDZCQUE2QixFQUFrQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FB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RztJQUNILFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFZLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7dUhBM1FRLDBCQUEwQjsyR0FBMUIsMEJBQTBCLDJJQWN4QixZQUFZLHFGQUNaLE9BQU8sK0pDL0N0QixzNkhBeUVNOzJGRHpDTywwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksc0JBQXNCO3VKQVVoQyxTQUFTO3NCQURSLEtBQUs7Z0JBU3FDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIGZpcnN0VmFsdWVGcm9tLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlLCBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3NlbGVjdGlvbi51dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyLCBDb25maXJtRGlhbG9nRGF0YUludGVybmFsIH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2ctZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3JlYXRlRW50aXR5RGlhbG9nRGF0YUJ1aWxkZXIsIENyZWF0ZUVudGl0eURpYWxvZ0RhdGFJbnRlcm5hbCB9IGZyb20gJy4vY3JlYXRlLWRpYWxvZy9jcmVhdGUtZW50aXR5LWRpYWxvZy1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGF0YSB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGF0YSc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9lZGl0LWRpYWxvZy9lZGl0LWVudGl0eS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRFbnRpdHlEYXRhQnVpbGRlciwgRWRpdEVudGl0eURhdGFJbnRlcm5hbCB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHkuYnVpbGRlcic7XG5pbXBvcnQgeyBEaXNwbGF5Q29sdW1uLCBUYWJsZURhdGEgfSBmcm9tICcuL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgQmFzZVRhYmxlQWN0aW9uSW50ZXJuYWwsIFRhYmxlQWN0aW9uSW50ZXJuYWwsIFRhYmxlRGF0YUJ1aWxkZXIsIFRhYmxlRGF0YUludGVybmFsIH0gZnJvbSAnLi90YWJsZS1kYXRhLmJ1aWxkZXInO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZ1bGx5IGZ1bmN0aW9uYWwgdGFibGUgZm9yIGRpc3BsYXlpbmcsIGNyZWF0aW5nLCB1cGRhdGluZyBhbmQgZGVsZXRpbmcgZW50aXRpZXNcbiAqIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHBhc3NlZCBpbiB0aGUgQElucHV0IFwidGFibGVEYXRhXCIuXG4gKlxuICogSXQgb2ZmZXJzIGEgbG90IG9mIGN1c3RvbWl6YXRpb24gb3B0aW9ucyB3aGljaCBjYW4gYmUgZm91bmQgaW4gXCJUYWJsZURhdGFcIi5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtbWF0LWVudGl0eS10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hdEVudGl0eVRhYmxlQ29tcG9uZW50PEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFibGVEYXRhITogVGFibGVEYXRhPEVudGl0eVR5cGU+O1xuXG4gICAgZGF0YSE6IFRhYmxlRGF0YUludGVybmFsPEVudGl0eVR5cGU+O1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZSE6IEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0ITogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWx0ZXIhOiBzdHJpbmc7XG4gICAgZGlzcGxheWVkQ29sdW1ucyE6IHN0cmluZ1tdO1xuICAgIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxFbnRpdHlUeXBlPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+KHRydWUsIFtdKTtcblxuICAgIFNlbGVjdGlvblV0aWxpdGllczogdHlwZW9mIFNlbGVjdGlvblV0aWxpdGllcyA9IFNlbGVjdGlvblV0aWxpdGllcztcblxuICAgIGltcG9ydEFjdGlvbiE6IEJhc2VUYWJsZUFjdGlvbkludGVybmFsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYmxlIGFuZCB0aGUgRW50aXR5U2VydmljZS5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFRhYmxlRGF0YUJ1aWxkZXIodGhpcy50YWJsZURhdGEpLmdldFJlc3VsdCgpO1xuXG4gICAgICAgIHRoaXMuaW1wb3J0QWN0aW9uID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kYXRhLmJhc2VEYXRhLmltcG9ydEFjdGlvbkRhdGEsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc3RhcnRJbXBvcnRKc29uKClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UgPSBpbmplY3Q8RW50aXR5U2VydmljZTxFbnRpdHlUeXBlPj4odGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gdGhpcy5kYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zLm1hcCgodikgPT4gdi5kaXNwbGF5TmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmZpbHRlcih0QSA9PiB0QS50eXBlID09PSAnbXVsdGktc2VsZWN0JykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IGdpdmVuRGlzcGxheUNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnMuZmluZCgoZHApID0+IGRwLmRpc3BsYXlOYW1lID09PSBoZWFkZXIpPy52YWx1ZShlbnRpdHkpIGFzIHN0cmluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hTdHI6IHN0cmluZyA9IHRoaXMuZGF0YS5iYXNlRGF0YS5zZWFyY2hTdHJpbmcoZW50aXR5KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNlYXJjaFN0cmluZzogc3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRGaWx0ZXJTdHJpbmc6IHN0cmluZyA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2b2lkIHRoaXMuZW50aXR5U2VydmljZS5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4uXG4gICAgICogUnVucyBpbiBlbnZpcm9ubWVudCBjb250ZXh0IHRvIGVuYWJsZSBpbmplY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byBnZXQgdGhlIHZhbHVlIGZyb20uXG4gICAgICogQHBhcmFtIGRpc3BsYXlDb2x1bW4gLSBUaGUgZGlzcGxheSBjb2x1bW4gdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZGlzcGxheSBjb2x1bW4uXG4gICAgICovXG4gICAgZ2V0RGlzcGxheUNvbHVtblZhbHVlKGVudGl0eTogRW50aXR5VHlwZSwgZGlzcGxheUNvbHVtbjogRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPik6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlDb2x1bW4udmFsdWUoZW50aXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEltcG9ydEpzb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5maWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1wb3J0SnNvbihpbnB1dC5maWxlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbXBvcnRKc29uKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5pbXBvcnRBY3Rpb24uY29uZmlybURpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RleHQnLCB0aGlzLmRhdGEuYmFzZURhdGEuaW1wb3J0QWN0aW9uRGF0YS5jb25maXJtRGlhbG9nRGF0YS50ZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuaW1wb3J0QWN0aW9uLmRpc3BsYXlOYW1lKVxuICAgICAgICAgICAgLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5lbnRpdHlTZXJ2aWNlLmltcG9ydChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5LiBUaGlzIGVpdGhlciBjYWxscyB0aGUgZWRpdC1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgZWRpdC1kaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgZWRpdEVudGl0eShlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEodGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93VXBkYXRlKGVudGl0eSkgfHwgdGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93UmVhZChlbnRpdHkpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiRW50aXR5Q2xhc3NcIiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmJhc2VEYXRhLmVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5iYXNlRGF0YS5lZGl0KG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5kZWZhdWx0RWRpdCA9PSAncGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdERlZmF1bHRQYWdlKG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCB0aGlzLmVkaXREZWZhdWx0RGlhbG9nKG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlZGl0RGVmYXVsdFBhZ2UoZW50aXR5OiBFbnRpdHlUeXBlKTogdm9pZCB7XG4gICAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnLCB0aGlzLmVudGl0eVNlcnZpY2UuZWRpdEJhc2VSb3V0ZSwgZW50aXR5LmlkXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlZGl0RGVmYXVsdERpYWxvZyhlbnRpdHk6IEVudGl0eVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgaW5wdXREaWFsb2dEYXRhOiBFZGl0RW50aXR5RGF0YTxFbnRpdHlUeXBlPiA9IHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgRW50aXR5U2VydmljZUNsYXNzOiB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzLFxuICAgICAgICAgICAgYWxsb3dVcGRhdGU6IHRoaXMuZGF0YS5iYXNlRGF0YS5hbGxvd1VwZGF0ZSxcbiAgICAgICAgICAgIGFsbG93RGVsZXRlOiB0aGlzLmRhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUsXG4gICAgICAgICAgICBlZGl0RGF0YTogdGhpcy5kYXRhLmVkaXREYXRhXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IEVkaXRFbnRpdHlEYXRhSW50ZXJuYWw8RW50aXR5VHlwZT4gPSBuZXcgRWRpdEVudGl0eURhdGFCdWlsZGVyKGlucHV0RGlhbG9nRGF0YSkuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IHJlczogbnVtYmVyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUVkaXREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnNjAlJyxcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH0pLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IEVudGl0eVR5cGVbXSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgZGF0YVt0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGVbdGhpcy5lbnRpdHlTZXJ2aWNlLmlkS2V5XSA9PT0gZW50aXR5W3RoaXMuZW50aXR5U2VydmljZS5pZEtleV0pXSA9IGVudGl0eTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eS4gVGhpcyBlaXRoZXIgY2FsbHMgdGhlIGNyZWF0ZS1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgY3JlYXRlLWRpYWxvZy5cbiAgICAgKlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgY3JlYXRlRW50aXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkVudGl0eUNsYXNzXCIgc3BlY2lmaWVkIGZvciB0aGlzIHRhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmJhc2VEYXRhLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5iYXNlRGF0YS5jcmVhdGUobmV3IHRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdChuZXcgdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0KGVudGl0eTogRW50aXR5VHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDcmVhdGVFbnRpdHlEaWFsb2dEYXRhSW50ZXJuYWw8RW50aXR5VHlwZT4gPSBuZXcgQ3JlYXRlRW50aXR5RGlhbG9nRGF0YUJ1aWxkZXIoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgICAgICAgICAgICAgRW50aXR5U2VydmljZUNsYXNzOiB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0RhdGE6IHRoaXMuZGF0YS5jcmVhdGVEaWFsb2dEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICkuZ2V0UmVzdWx0KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgICAgICAgbWluV2lkdGg6ICc2MCUnLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgVGFibGVBY3Rpb24gZm9yIGFsbCBzZWxlY3RlZCBlbnRyaWVzLlxuICAgICAqIEFsc28gaGFuZGxlcyBjb25maXJtYXRpb24gd2l0aCBhbiBhZGRpdGlvbmFsIGRpYWxvZyBpZiBjb25maWd1cmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBUYWJsZUFjdGlvbiB0byBydW4uXG4gICAgICovXG4gICAgcnVuVGFibGVBY3Rpb24oYWN0aW9uOiBUYWJsZUFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVDb25maXJtRGlhbG9nOiBib29sZWFuID0gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5yZXF1aXJlQ29uZmlybURpYWxvZyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVxdWlyZUNvbmZpcm1EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybVJ1blRhYmxlQWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Tmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwgYm9vbGVhbj4gPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybVJ1blRhYmxlQWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlybVJ1blRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IHZvaWQge1xuICAgICAgICB0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBhY3Rpb24uYWN0aW9uKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIFRhYmxlQWN0aW9uIGlzIGRpc2FibGVkIChlLmcuIEJlY2F1c2Ugbm8gZW50cmllcyBoYXZlIGJlZW4gc2VsZWN0ZWQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIFRoZSBUYWJsZUFjdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgQWN0aW9uIGNhbiBiZSB1c2VkLlxuICAgICAqL1xuICAgIHRhYmxlQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBUYWJsZUFjdGlvbkludGVybmFsPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWFjdGlvbi5lbmFibGVkKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzZWFyY2ggaW5wdXQgdG8gZmlsdGVyIHRoZSB0YWJsZSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleXVwLWV2ZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBzZWFyY2gtc3RyaW5nIG9mIHRoZSB1c2VyLlxuICAgICAqL1xuICAgIGFwcGx5RmlsdGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlclZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbn0iLCI8aDEgY2xhc3M9XCJ0aXRsZVwiPnt7ZGF0YS5iYXNlRGF0YS50aXRsZX19PC9oMT5cblxuPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1sZy04IGNvbC1tZC02IGNvbC1zbS0xMlwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7ZGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCAoa2V5dXApPVwiYXBwbHlGaWx0ZXIoJGV2ZW50KVwiPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cImRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtbGctMl09XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKClcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTRdPVwiIWRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgICAgIFtjbGFzcy5jb2wtbWQtM109XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKClcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTZdPVwiIWRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgICAgIFtjbGFzcy5jb2wtc20tNl09XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKClcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTEyXT1cIiFkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKClcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2RhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zTGFiZWx9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmJhc2VEYXRhLmFsbG93SnNvbkltcG9ydFwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwidGFibGVBY3Rpb25EaXNhYmxlZChpbXBvcnRBY3Rpb24pXCIgKGNsaWNrKT1cInJ1blRhYmxlQWN0aW9uKGltcG9ydEFjdGlvbilcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICAgICAge3tpbXBvcnRBY3Rpb24uZGlzcGxheU5hbWV9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBkYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9uc1wiIFtkaXNhYmxlZF09XCJ0YWJsZUFjdGlvbkRpc2FibGVkKGFjdGlvbilcIiAoY2xpY2spPVwicnVuVGFibGVBY3Rpb24oYWN0aW9uKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgICAgICB7e2FjdGlvbi5kaXNwbGF5TmFtZX19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy0yXT1cImRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtbGctNF09XCIhZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC0zXT1cImRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtbWQtNl09XCIhZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS02XT1cImRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtc20tMTJdPVwiIWRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmxlbmd0aFwiXG4gICAgPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNyZWF0ZS1idXR0b25cIiAoY2xpY2spPVwiY3JlYXRlRW50aXR5KClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICAgIHt7ZGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4XCI+XG4gICAgPG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydD5cbiAgICAgICAgPCEtLSBzZWxlY3QgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiPlxuICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gU2VsZWN0aW9uVXRpbGl0aWVzLm1hc3RlclRvZ2dsZShzZWxlY3Rpb24sIGRhdGFTb3VyY2UpIDogbnVsbFwiIFtjaGVja2VkXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIFNlbGVjdGlvblV0aWxpdGllcy5pc0FsbFNlbGVjdGVkKHNlbGVjdGlvbiwgZGF0YVNvdXJjZSlcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhU2VsZWN0aW9uVXRpbGl0aWVzLmlzQWxsU2VsZWN0ZWQoc2VsZWN0aW9uLCBkYXRhU291cmNlKVwiPiA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgPG1hdC1jZWxsIGNsYXNzPVwiZW50aXR5XCIgKm1hdENlbGxEZWY9XCJsZXQgZW50aXR5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGVudGl0eSkgOiBudWxsXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZW50aXR5KVwiPiA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRDb2wgb2YgZGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiZENvbC5kaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgICAgICAge3tkQ29sLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgPG1hdC1jZWxsIGNsYXNzPVwiZW50aXR5XCIgW2NsYXNzLmVuYWJsZWRdPVwiZGF0YS5iYXNlRGF0YS5hbGxvd1VwZGF0ZShlbnRpdHkpIHx8IGRhdGEuYmFzZURhdGEuYWxsb3dSZWFkKGVudGl0eSlcIiAoY2xpY2spPVwiZWRpdEVudGl0eShlbnRpdHkpXCIgKm1hdENlbGxEZWY9XCJsZXQgZW50aXR5XCI+XG4gICAgICAgICAgICAgICAge3tnZXREaXNwbGF5Q29sdW1uVmFsdWUoZW50aXR5LCBkQ29sKX19XG4gICAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LXJvdz5cbiAgICA8L21hdC10YWJsZT5cblxuICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZyAmJiBkYXRhLmJhc2VEYXRhLmRpc3BsYXlMb2FkaW5nU3Bpbm5lclwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgbWFyZ2luLXRvcDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTBweDtcIj5cbiAgICA8L21hdC1zcGlubmVyPlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgW2xlbmd0aF09XCJkYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGhcIiBbcGFnZUluZGV4XT1cIjBcIiBbcGFnZVNpemVdPVwiMTBcIiBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMjUsIDUwXVwiPjwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PiJdfQ==
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixD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LDBCQUEwQjtrQkF2QnRDLFNBQVM7K0JBQ0ksc0JBQXNCLGNBR3BCLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixpQ0FBaUM7d0JBQ2pDLCtCQUErQjt3QkFDL0IsMkJBQTJCO3FCQUM5Qjt1SkFRRCxTQUFTO3NCQURSLEtBQUs7Z0JBU3FDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbnZpcm9ubWVudEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlLCBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlRW50aXR5VHlwZSwgRW50aXR5IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRW50aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblV0aWxpdGllcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zZWxlY3Rpb24udXRpbGl0aWVzJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dEYXRhQnVpbGRlciwgQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0ZUVudGl0eURpYWxvZ0RhdGFCdWlsZGVyLCBDcmVhdGVFbnRpdHlEaWFsb2dEYXRhSW50ZXJuYWwgfSBmcm9tICcuL2NyZWF0ZS1kaWFsb2cvY3JlYXRlLWVudGl0eS1kaWFsb2ctZGF0YS5idWlsZGVyJztcbmltcG9ydCB7IE5neE1hdEVudGl0eUNyZWF0ZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRlLWRpYWxvZy9jcmVhdGUtZW50aXR5LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbHVtblZhbHVlQ29tcG9uZW50IH0gZnJvbSAnLi9kaXNwbGF5LWNvbHVtbi12YWx1ZS9kaXNwbGF5LWNvbHVtbi12YWx1ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdEVudGl0eURhdGEgfSBmcm9tICcuL2VkaXQtZGlhbG9nL2VkaXQtZW50aXR5LWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5RWRpdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGF0YUJ1aWxkZXIsIEVkaXRFbnRpdHlEYXRhSW50ZXJuYWwgfSBmcm9tICcuL2VkaXQtZGlhbG9nL2VkaXQtZW50aXR5LmJ1aWxkZXInO1xuaW1wb3J0IHsgRGlzcGxheUNvbHVtbiwgVGFibGVEYXRhIH0gZnJvbSAnLi90YWJsZS1kYXRhJztcbmltcG9ydCB7IEJhc2VUYWJsZUFjdGlvbkludGVybmFsLCBUYWJsZUFjdGlvbkludGVybmFsLCBUYWJsZURhdGFCdWlsZGVyLCBUYWJsZURhdGFJbnRlcm5hbCB9IGZyb20gJy4vdGFibGUtZGF0YS5idWlsZGVyJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmdWxseSBmdW5jdGlvbmFsIHRhYmxlIGZvciBkaXNwbGF5aW5nLCBjcmVhdGluZywgdXBkYXRpbmcgYW5kIGRlbGV0aW5nIGVudGl0aWVzXG4gKiBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXNzZWQgaW4gdGhlIEBJbnB1dCBcInRhYmxlRGF0YVwiLlxuICpcbiAqIEl0IG9mZmVycyBhIGxvdCBvZiBjdXN0b21pemF0aW9uIG9wdGlvbnMgd2hpY2ggY2FuIGJlIGZvdW5kIGluIFwiVGFibGVEYXRhXCIuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LW1hdC1lbnRpdHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBEaXNwbGF5Q29sdW1uVmFsdWVDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hdEVudGl0eVRhYmxlQ29tcG9uZW50PEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFibGVEYXRhITogVGFibGVEYXRhPEVudGl0eVR5cGU+O1xuXG4gICAgZGF0YSE6IFRhYmxlRGF0YUludGVybmFsPEVudGl0eVR5cGU+O1xuXG4gICAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZSE6IEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0ITogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWx0ZXIhOiBzdHJpbmc7XG4gICAgZGlzcGxheWVkQ29sdW1ucyE6IHN0cmluZ1tdO1xuICAgIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxFbnRpdHlUeXBlPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+KHRydWUsIFtdKTtcblxuICAgIFNlbGVjdGlvblV0aWxpdGllczogdHlwZW9mIFNlbGVjdGlvblV0aWxpdGllcyA9IFNlbGVjdGlvblV0aWxpdGllcztcblxuICAgIGltcG9ydEFjdGlvbiE6IEJhc2VUYWJsZUFjdGlvbkludGVybmFsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYmxlIGFuZCB0aGUgRW50aXR5U2VydmljZS5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFRhYmxlRGF0YUJ1aWxkZXIodGhpcy50YWJsZURhdGEpLmdldFJlc3VsdCgpO1xuXG4gICAgICAgIHRoaXMuaW1wb3J0QWN0aW9uID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kYXRhLmJhc2VEYXRhLmltcG9ydEFjdGlvbkRhdGEsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc3RhcnRJbXBvcnRKc29uKClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UgPSBpbmplY3Q8RW50aXR5U2VydmljZTxFbnRpdHlUeXBlPj4odGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gdGhpcy5kYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zLm1hcCgodikgPT4gdi5kaXNwbGF5TmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zLmZpbHRlcih0QSA9PiB0QS50eXBlID09PSAnbXVsdGktc2VsZWN0JykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IGdpdmVuRGlzcGxheUNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnMuZmluZCgoZHApID0+IGRwLmRpc3BsYXlOYW1lID09PSBoZWFkZXIpPy52YWx1ZShlbnRpdHkpIGFzIHN0cmluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hTdHI6IHN0cmluZyA9IHRoaXMuZGF0YS5iYXNlRGF0YS5zZWFyY2hTdHJpbmcoZW50aXR5KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNlYXJjaFN0cmluZzogc3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRGaWx0ZXJTdHJpbmc6IHN0cmluZyA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2b2lkIHRoaXMuZW50aXR5U2VydmljZS5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4uXG4gICAgICogUnVucyBpbiBlbnZpcm9ubWVudCBjb250ZXh0IHRvIGVuYWJsZSBpbmplY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byBnZXQgdGhlIHZhbHVlIGZyb20uXG4gICAgICogQHBhcmFtIGRpc3BsYXlDb2x1bW4gLSBUaGUgZGlzcGxheSBjb2x1bW4gdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZGlzcGxheSBjb2x1bW4uXG4gICAgICovXG4gICAgZ2V0RGlzcGxheUNvbHVtblZhbHVlKGVudGl0eTogRW50aXR5VHlwZSwgZGlzcGxheUNvbHVtbjogRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPik6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlDb2x1bW4udmFsdWUoZW50aXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEltcG9ydEpzb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5maWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1wb3J0SnNvbihpbnB1dC5maWxlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbXBvcnRKc29uKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ29uZmlybURpYWxvZ0RhdGFJbnRlcm5hbCA9IG5ldyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIodGhpcy5pbXBvcnRBY3Rpb24uY29uZmlybURpYWxvZ0RhdGEpXG4gICAgICAgICAgICAud2l0aERlZmF1bHQoJ3RleHQnLCB0aGlzLmRhdGEuYmFzZURhdGEuaW1wb3J0QWN0aW9uRGF0YS5jb25maXJtRGlhbG9nRGF0YS50ZXh0KVxuICAgICAgICAgICAgLndpdGhEZWZhdWx0KCd0aXRsZScsIHRoaXMuaW1wb3J0QWN0aW9uLmRpc3BsYXlOYW1lKVxuICAgICAgICAgICAgLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5lbnRpdHlTZXJ2aWNlLmltcG9ydChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5LiBUaGlzIGVpdGhlciBjYWxscyB0aGUgZWRpdC1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgZWRpdC1kaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICAqIEBwYXJhbSBkQ29sIC0gVGhlIGRpc3BsYXkgY29sdW1uLiBJcyBuZWVkZWQgaWYgYSBjdXN0b20gY29tcG9uZW50IHdhcyB1c2VkIHRoYXQgaGFuZGxlcyB0aGUgY2xpY2sgZXZlbnQgZGlmZmVyZW50bHkuXG4gICAgICogQHRocm93cyBXaGVuIG5vIEVudGl0eUNsYXNzIHdhcyBwcm92aWRlZCwgYXMgYSBuZXcgY2FsbCBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBtZXRhZGF0YS5cbiAgICAgKi9cbiAgICBlZGl0RW50aXR5KGVudGl0eTogRW50aXR5VHlwZSwgZENvbDogRGlzcGxheUNvbHVtbjxFbnRpdHlUeXBlPik6IHZvaWQge1xuICAgICAgICBpZiAoZENvbC5kaXNhYmxlQ2xpY2sgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMuZGF0YS5iYXNlRGF0YS5hbGxvd1VwZGF0ZShlbnRpdHkpIHx8IHRoaXMuZGF0YS5iYXNlRGF0YS5hbGxvd1JlYWQoZW50aXR5KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkVudGl0eUNsYXNzXCIgc3BlY2lmaWVkIGZvciB0aGlzIHRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5lZGl0KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYmFzZURhdGEuZWRpdChuZXcgdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEuYmFzZURhdGEuZGVmYXVsdEVkaXQgPT0gJ3BhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXREZWZhdWx0UGFnZShuZXcgdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgdGhpcy5lZGl0RGVmYXVsdERpYWxvZyhuZXcgdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZWRpdERlZmF1bHRQYWdlKGVudGl0eTogRW50aXR5VHlwZSk6IHZvaWQge1xuICAgICAgICB2b2lkIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJywgdGhpcy5lbnRpdHlTZXJ2aWNlLmVkaXRCYXNlUm91dGUsIGVudGl0eS5pZF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZWRpdERlZmF1bHREaWFsb2coZW50aXR5OiBFbnRpdHlUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGlucHV0RGlhbG9nRGF0YTogRWRpdEVudGl0eURhdGE8RW50aXR5VHlwZT4gPSB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyxcbiAgICAgICAgICAgIGFsbG93VXBkYXRlOiB0aGlzLmRhdGEuYmFzZURhdGEuYWxsb3dVcGRhdGUsXG4gICAgICAgICAgICBhbGxvd0RlbGV0ZTogdGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlLFxuICAgICAgICAgICAgZWRpdERhdGE6IHRoaXMuZGF0YS5lZGl0RGF0YVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBFZGl0RW50aXR5RGF0YUludGVybmFsPEVudGl0eVR5cGU+ID0gbmV3IEVkaXRFbnRpdHlEYXRhQnVpbGRlcihpbnB1dERpYWxvZ0RhdGEpLmdldFJlc3VsdCgpO1xuICAgICAgICBjb25zdCByZXM6IG51bWJlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9KS5hZnRlckNsb3NlZCgpXG4gICAgICAgICkgYXMgbnVtYmVyO1xuICAgICAgICBpZiAocmVzID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhOiBFbnRpdHlUeXBlW10gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcbiAgICAgICAgICAgIGRhdGFbdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChlKSA9PiBlW3RoaXMuZW50aXR5U2VydmljZS5pZEtleV0gPT09IGVudGl0eVt0aGlzLmVudGl0eVNlcnZpY2UuaWRLZXldKV0gPSBlbnRpdHk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBFbnRpdHkuIFRoaXMgZWl0aGVyIGNhbGxzIHRoZSBjcmVhdGUtTWV0aG9kIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9yIHVzZXMgYSBkZWZhdWx0IGNyZWF0ZS1kaWFsb2cuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIFdoZW4gbm8gRW50aXR5Q2xhc3Mgd2FzIHByb3ZpZGVkLCBhcyBhIG5ldyBjYWxsIGlzIG5lZWRlZCB0byBpbml0aWFsaXplIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIGNyZWF0ZUVudGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJFbnRpdHlDbGFzc1wiIHNwZWNpZmllZCBmb3IgdGhpcyB0YWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5jcmVhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYmFzZURhdGEuY3JlYXRlKG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHQobmV3IHRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ3JlYXRlRW50aXR5RGlhbG9nRGF0YUludGVybmFsPEVudGl0eVR5cGU+ID0gbmV3IENyZWF0ZUVudGl0eURpYWxvZ0RhdGFCdWlsZGVyKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaWFsb2dEYXRhOiB0aGlzLmRhdGEuY3JlYXRlRGlhbG9nRGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICApLmdldFJlc3VsdCgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNyZWF0ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnNjAlJyxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIFRhYmxlQWN0aW9uIGZvciBhbGwgc2VsZWN0ZWQgZW50cmllcy5cbiAgICAgKiBBbHNvIGhhbmRsZXMgY29uZmlybWF0aW9uIHdpdGggYW4gYWRkaXRpb25hbCBkaWFsb2cgaWYgY29uZmlndXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gLSBUaGUgVGFibGVBY3Rpb24gdG8gcnVuLlxuICAgICAqL1xuICAgIHJ1blRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IHZvaWQge1xuICAgICAgICBjb25zdCByZXF1aXJlQ29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlcXVpcmVDb25maXJtRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1SdW5UYWJsZUFjdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5neE1hdEVudGl0eUNvbmZpcm1EaWFsb2dDb21wb25lbnQsIGJvb2xlYW4+ID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGEsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1SdW5UYWJsZUFjdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpcm1SdW5UYWJsZUFjdGlvbihhY3Rpb246IFRhYmxlQWN0aW9uSW50ZXJuYWw8RW50aXR5VHlwZT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbiBUYWJsZUFjdGlvbiBpcyBkaXNhYmxlZCAoZS5nLiBCZWNhdXNlIG5vIGVudHJpZXMgaGF2ZSBiZWVuIHNlbGVjdGVkKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gLSBUaGUgVGFibGVBY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIEFjdGlvbiBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICB0YWJsZUFjdGlvbkRpc2FibGVkKGFjdGlvbjogVGFibGVBY3Rpb25JbnRlcm5hbDxFbnRpdHlUeXBlPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFhY3Rpb24uZW5hYmxlZCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRGVzdHJveS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc2VhcmNoIGlucHV0IHRvIGZpbHRlciB0aGUgdGFibGUgZW50cmllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBrZXl1cC1ldmVudCB3aGljaCBjb250YWlucyB0aGUgc2VhcmNoLXN0cmluZyBvZiB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBhcHBseUZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWU6IHN0cmluZyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cblxufSIsIjxoMSBjbGFzcz1cInRpdGxlXCI+e3tkYXRhLmJhc2VEYXRhLnRpdGxlfX08L2gxPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLWxnLTggY29sLW1kLTYgY29sLXNtLTEyXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tkYXRhLmJhc2VEYXRhLnNlYXJjaExhYmVsfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy0yXT1cImRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgICAgIFtjbGFzcy5jb2wtbGctNF09XCIhZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC0zXT1cImRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgICAgIFtjbGFzcy5jb2wtbWQtNl09XCIhZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSgpXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS02XT1cImRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgICAgIFtjbGFzcy5jb2wtc20tMTJdPVwiIWRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUoKVwiXG4gICAgPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbnMtYnV0dG9uXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICAgIHt7ZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnNMYWJlbH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuYmFzZURhdGEuYWxsb3dKc29uSW1wb3J0XCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJ0YWJsZUFjdGlvbkRpc2FibGVkKGltcG9ydEFjdGlvbilcIiAoY2xpY2spPVwicnVuVGFibGVBY3Rpb24oaW1wb3J0QWN0aW9uKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgICAgICB7e2ltcG9ydEFjdGlvbi5kaXNwbGF5TmFtZX19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGRhdGEuYmFzZURhdGEudGFibGVBY3Rpb25zXCIgW2Rpc2FibGVkXT1cInRhYmxlQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5UYWJsZUFjdGlvbihhY3Rpb24pXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKClcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFkYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFkYXRhLmJhc2VEYXRhLnRhYmxlQWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZGF0YS5iYXNlRGF0YS50YWJsZUFjdGlvbnMubGVuZ3RoXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3JlYXRlLWJ1dHRvblwiIChjbGljayk9XCJjcmVhdGVFbnRpdHkoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICAgICAge3tkYXRhLmJhc2VEYXRhLmNyZWF0ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8bWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBTZWxlY3Rpb25VdGlsaXRpZXMubWFzdGVyVG9nZ2xlKHNlbGVjdGlvbiwgZGF0YVNvdXJjZSkgOiBudWxsXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgU2VsZWN0aW9uVXRpbGl0aWVzLmlzQWxsU2VsZWN0ZWQoc2VsZWN0aW9uLCBkYXRhU291cmNlKVwiIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmICFTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChzZWxlY3Rpb24sIGRhdGFTb3VyY2UpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgY2xhc3M9XCJlbnRpdHlcIiAqbWF0Q2VsbERlZj1cImxldCBlbnRpdHlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUoZW50aXR5KSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbnRpdHkpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZENvbCBvZiBkYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJkQ29sLmRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICB7e2RDb2wuZGlzcGxheU5hbWV9fVxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgY2xhc3M9XCJlbnRpdHlcIiBbY2xhc3MuZW5hYmxlZF09XCIhZENvbC5kaXNhYmxlQ2xpY2sgJiYgKGRhdGEuYmFzZURhdGEuYWxsb3dVcGRhdGUoZW50aXR5KSB8fCBkYXRhLmJhc2VEYXRhLmFsbG93UmVhZChlbnRpdHkpKVwiIChjbGljayk9XCJlZGl0RW50aXR5KGVudGl0eSwgZENvbClcIiAqbWF0Q2VsbERlZj1cImxldCBlbnRpdHlcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZENvbC5Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpc3BsYXktY29sdW1uLXZhbHVlIFtlbnRpdHldPVwiZW50aXR5XCIgW0NvbXBvbmVudENsYXNzXT1cImRDb2wuQ29tcG9uZW50XCI+PC9kaXNwbGF5LWNvbHVtbi12YWx1ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRDb2wuQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0RGlzcGxheUNvbHVtblZhbHVlKGVudGl0eSwgZENvbCl9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L21hdC1yb3c+XG4gICAgPC9tYXQtdGFibGU+XG5cbiAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc0xvYWRpbmcgJiYgZGF0YS5iYXNlRGF0YS5kaXNwbGF5TG9hZGluZ1NwaW5uZXJcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG87IG1hcmdpbi10b3A6IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7XCI+XG4gICAgPC9tYXQtc3Bpbm5lcj5cblxuICAgIDxtYXQtcGFnaW5hdG9yIFtsZW5ndGhdPVwiZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoXCIgW3BhZ2VJbmRleF09XCIwXCIgW3BhZ2VTaXplXT1cIjEwXCIgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDI1LCA1MF1cIj48L21hdC1wYWdpbmF0b3I+XG48L2Rpdj4iXX0=
@@ -7,6 +7,7 @@ export class DefaultObjectDecoratorConfigInternal extends PropertyDecoratorConfi
7
7
  super(data);
8
8
  this.displayStyle = data.displayStyle;
9
9
  this.EntityClass = data.EntityClass;
10
+ this.omit = data.omit ?? [];
10
11
  }
11
12
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzNGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUNULFNBQVEsK0JBQStCO0lBUXZDLFlBQVksSUFBOEM7UUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRW50aXR5VHlwZSwgRW50aXR5Q2xhc3NOZXdhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZyB9IGZyb20gJy4vb2JqZWN0LWRlY29yYXRvci5kYXRhJztcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZy4gU2V0cyBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+XG4gICAgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB7XG5cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnaW5saW5lJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIEVudGl0eUNsYXNzOiBFbnRpdHlDbGFzc05ld2FibGU8RW50aXR5VHlwZT47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGU+KSB7XG4gICAgICAgIHN1cGVyKGRhdGEpO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IGRhdGEuZGlzcGxheVN0eWxlO1xuICAgICAgICB0aGlzLkVudGl0eUNsYXNzID0gZGF0YS5FbnRpdHlDbGFzcztcbiAgICB9XG59Il19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzNGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUNULFNBQVEsK0JBQStCO0lBU3ZDLFlBQVksSUFBOEM7UUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFbnRpdHlUeXBlLCBFbnRpdHlDbGFzc05ld2FibGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi9vYmplY3QtZGVjb3JhdG9yLmRhdGEnO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnLiBTZXRzIGRlZmF1bHQgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj5cbiAgICBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgaW1wbGVtZW50cyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGU+IHtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnaW5saW5lJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIEVudGl0eUNsYXNzOiBFbnRpdHlDbGFzc05ld2FibGU8RW50aXR5VHlwZT47XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBvbWl0OiAoa2V5b2YgRW50aXR5VHlwZSlbXTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMuZGlzcGxheVN0eWxlID0gZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuRW50aXR5Q2xhc3MgPSBkYXRhLkVudGl0eUNsYXNzO1xuICAgICAgICB0aGlzLm9taXQgPSBkYXRhLm9taXQgPz8gW107XG4gICAgfVxufSJdfQ==
@@ -4,4 +4,4 @@ import { PropertyDecoratorConfig } from '../base/property-decorator.data';
4
4
  */
5
5
  class ObjectDecoratorConfig extends PropertyDecoratorConfig {
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlY29yYXRvci5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFOztHQUVHO0FBQ0gsTUFBZSxxQkFBcUUsU0FBUSx1QkFBdUI7Q0FhbEgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRW50aXR5VHlwZSwgRW50aXR5Q2xhc3NOZXdhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWcgfSBmcm9tICcuLi9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci5kYXRhJztcblxuLyoqXG4gKiBEZWZpbml0aW9uIGZvciB0aGUgQG9iamVjdCBtZXRhZGF0YS5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgT2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4gZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG9mIHRoZSBvYmplY3QuIElzIHVzZWQgdG8gY2FsbCB0aGUgY29uc3RydWN0b3Igc28gdGhhdCBhbGwgbWV0YWRhdGEgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICovXG4gICAgRW50aXR5Q2xhc3MhOiBFbnRpdHlDbGFzc05ld2FibGU8RW50aXR5VHlwZT47XG5cbiAgICAvKipcbiAgICAgKiBIb3cgdG8gZGlzcGxheSB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogVGhlIG9iamVjdHMgcHJvcGVydGllcyBhcmUgYWRkZWQgYXMgaW5wdXQgZmllbGRzIGluIGFuIHNlY3Rpb24gb2YgdGhlIGVudGl0eS5cbiAgICAgKiBVc2VmdWwgaWYgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5zIGEgZmV3IHByb3BlcnRpZXMgKGUuZy4gQSBhZGRyZXNzIG9uIGEgdXNlcikuXG4gICAgICovXG4gICAgZGlzcGxheVN0eWxlITogJ2lubGluZSc7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBvYmplY3QgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGV4dGVuZHMgT2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGU+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2lubGluZSdcbn0iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlY29yYXRvci5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFOztHQUVHO0FBQ0gsTUFBZSxxQkFBcUUsU0FBUSx1QkFBdUI7Q0FrQmxIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUsIEVudGl0eUNsYXNzTmV3YWJsZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnIH0gZnJvbSAnLi4vYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3IuZGF0YSc7XG5cbi8qKlxuICogRGVmaW5pdGlvbiBmb3IgdGhlIEBvYmplY3QgbWV0YWRhdGEuXG4gKi9cbmFic3RyYWN0IGNsYXNzIE9iamVjdERlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+IGV4dGVuZHMgUHJvcGVydHlEZWNvcmF0b3JDb25maWcge1xuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBvZiB0aGUgb2JqZWN0LiBJcyB1c2VkIHRvIGNhbGwgdGhlIGNvbnN0cnVjdG9yIHNvIHRoYXQgYWxsIG1ldGFkYXRhIGlzIGluaXRpYWxpemVkLlxuICAgICAqL1xuICAgIEVudGl0eUNsYXNzITogRW50aXR5Q2xhc3NOZXdhYmxlPEVudGl0eVR5cGU+O1xuXG4gICAgLyoqXG4gICAgICogSG93IHRvIGRpc3BsYXkgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFRoZSBvYmplY3RzIHByb3BlcnRpZXMgYXJlIGFkZGVkIGFzIGlucHV0IGZpZWxkcyBpbiBhbiBzZWN0aW9uIG9mIHRoZSBlbnRpdHkuXG4gICAgICogVXNlZnVsIGlmIHRoZSBvYmplY3Qgb25seSBjb250YWlucyBhIGZldyBwcm9wZXJ0aWVzIChlLmcuIEEgYWRkcmVzcyBvbiBhIHVzZXIpLlxuICAgICAqL1xuICAgIGRpc3BsYXlTdHlsZSE6ICdpbmxpbmUnO1xuXG4gICAgLyoqXG4gICAgICogU29tZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3RzIGVudGl0eSBjbGFzcyB0aGF0IHNob3VsZCBiZSBvbWl0dGVkLlxuICAgICAqL1xuICAgIG9taXQ/OiAoa2V5b2YgRW50aXR5VHlwZSlbXTtcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG9iamVjdCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4gZXh0ZW5kcyBPYmplY3REZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnaW5saW5lJ1xufSJdfQ==
@@ -7,7 +7,6 @@ export * from './classes/entity.model';
7
7
  // components
8
8
  export * from './components/confirm-dialog/confirm-dialog-data';
9
9
  export * from './components/confirm-dialog/confirm-dialog.component';
10
- export * from './components/confirm-dialog/confirm-dialog.module';
11
10
  export * from './components/edit-page/edit-page.component';
12
11
  export * from './components/get-validation-error-message.function';
13
12
  export * from './components/input/base-input.component';
@@ -15,14 +14,12 @@ export * from './components/input/input.component';
15
14
  export * from './components/input/input.module';
16
15
  export * from './components/table/create-dialog/create-entity-dialog-data';
17
16
  export * from './components/table/create-dialog/create-entity-dialog.component';
18
- export * from './components/table/create-dialog/create-entity-dialog.module';
17
+ export * from './components/table/default.actions';
18
+ export * from './components/table/display-column-value/base-display-column-value.component';
19
19
  export * from './components/table/edit-dialog/edit-entity-data';
20
20
  export * from './components/table/edit-dialog/edit-entity-dialog.component';
21
- export * from './components/table/edit-dialog/edit-entity-dialog.module';
22
21
  export * from './components/table/table-data';
23
22
  export * from './components/table/table.component';
24
- export * from './components/table/table.module';
25
- export * from './components/table/default.actions';
26
23
  // decorators
27
24
  export * from './decorators/array/array-decorator.data';
28
25
  export * from './decorators/array/array.decorator';
@@ -36,14 +33,14 @@ export * from './decorators/date/date-decorator.data';
36
33
  export * from './decorators/date/date.decorator';
37
34
  export * from './decorators/file/file-decorator.data';
38
35
  export * from './decorators/file/file.decorator';
36
+ export * from './decorators/has-many/has-many-decorator.data';
37
+ export * from './decorators/has-many/has-many.decorator';
39
38
  export * from './decorators/number/number-decorator.data';
40
39
  export * from './decorators/number/number.decorator';
41
40
  export * from './decorators/object/object-decorator.data';
42
41
  export * from './decorators/object/object.decorator';
43
42
  export * from './decorators/references-many/references-many-decorator.data';
44
43
  export * from './decorators/references-many/references-many.decorator';
45
- export * from './decorators/has-many/has-many-decorator.data';
46
- export * from './decorators/has-many/has-many.decorator';
47
44
  export * from './decorators/string/string-decorator.data';
48
45
  export * from './decorators/string/string.decorator';
49
46
  // services
@@ -53,4 +50,4 @@ export * from './services/unsaved-changes.guard';
53
50
  export * from './utilities/date.utilities';
54
51
  export * from './utilities/entity.utilities';
55
52
  export * from './utilities/file.utilities';
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLGtCQUFrQixDQUFDO0FBRTFCLFVBQVU7QUFDVixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGFBQWE7QUFDYixjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxhQUFhO0FBQ2IsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUUzRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxXQUFXO0FBQ1gsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELFdBQVc7QUFDWCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1tYXRlcmlhbC1lbnRpdHkuXG4gKi9cbmltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSc7XG5cbi8vIGNsYXNzZXNcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuLy8gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9lZGl0LXBhZ2UvZWRpdC1wYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZ2V0LXZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZS5mdW5jdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXQvYmFzZS1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL2NyZWF0ZS1kaWFsb2cvY3JlYXRlLWVudGl0eS1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS90YWJsZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL2RlZmF1bHQuYWN0aW9ucyc7XG4vLyBkZWNvcmF0b3JzXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYXJyYXkvYXJyYXktZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2FycmF5L2FycmF5LmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYmFzZS9kcm9wZG93bi12YWx1ZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgQ29sLCBQb3NpdGlvbiB9IGZyb20gJy4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci5kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9ib29sZWFuL2Jvb2xlYW4tZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2Jvb2xlYW4vYm9vbGVhbi5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2N1c3RvbS9jdXN0b20tZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2N1c3RvbS9jdXN0b20uZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9kYXRlL2RhdGUtZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvZmlsZS9maWxlLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvbnVtYmVyL251bWJlci1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvbnVtYmVyL251bWJlci5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL29iamVjdC9vYmplY3QtZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL29iamVjdC9vYmplY3QuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9yZWZlcmVuY2VzLW1hbnkvcmVmZXJlbmNlcy1tYW55LWRlY29yYXRvci5kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9yZWZlcmVuY2VzLW1hbnkvcmVmZXJlbmNlcy1tYW55LmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvaGFzLW1hbnkvaGFzLW1hbnktZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2hhcy1tYW55L2hhcy1tYW55LmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvc3RyaW5nL3N0cmluZy5kZWNvcmF0b3InO1xuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy91bnNhdmVkLWNoYW5nZXMuZ3VhcmQnO1xuLy91dGlsaXRpZXNcbmV4cG9ydCAqIGZyb20gJy4vdXRpbGl0aWVzL2RhdGUudXRpbGl0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbGl0aWVzL2VudGl0eS51dGlsaXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMvZmlsZS51dGlsaXRpZXMnOyJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLGtCQUFrQixDQUFDO0FBRTFCLFVBQVU7QUFDVixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGFBQWE7QUFDYixjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNkVBQTZFLENBQUM7QUFDNUYsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxhQUFhO0FBQ2IsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUUzRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxXQUFXO0FBQ1gsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELFdBQVc7QUFDWCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1tYXRlcmlhbC1lbnRpdHkuXG4gKi9cbmltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSc7XG5cbi8vIGNsYXNzZXNcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuLy8gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZWRpdC1wYWdlL2VkaXQtcGFnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2dldC12YWxpZGF0aW9uLWVycm9yLW1lc3NhZ2UuZnVuY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2Jhc2UtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvY3JlYXRlLWRpYWxvZy9jcmVhdGUtZW50aXR5LWRpYWxvZy1kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZGVmYXVsdC5hY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9kaXNwbGF5LWNvbHVtbi12YWx1ZS9iYXNlLWRpc3BsYXktY29sdW1uLXZhbHVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Jztcbi8vIGRlY29yYXRvcnNcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYXJyYXkvYXJyYXkuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9iYXNlL2Ryb3Bkb3duLXZhbHVlLmludGVyZmFjZSc7XG5leHBvcnQgeyBDb2wsIFBvc2l0aW9uIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2Jhc2UvcHJvcGVydHktZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2Jvb2xlYW4vYm9vbGVhbi1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvY3VzdG9tL2N1c3RvbS1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvY3VzdG9tL2N1c3RvbS5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvZGF0ZS9kYXRlLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvZmlsZS9maWxlLWRlY29yYXRvci5kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9maWxlL2ZpbGUuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9oYXMtbWFueS9oYXMtbWFueS1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvaGFzLW1hbnkvaGFzLW1hbnkuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9udW1iZXIvbnVtYmVyLWRlY29yYXRvci5kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9udW1iZXIvbnVtYmVyLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvb2JqZWN0L29iamVjdC1kZWNvcmF0b3IuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvb2JqZWN0L29iamVjdC5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL3JlZmVyZW5jZXMtbWFueS9yZWZlcmVuY2VzLW1hbnktZGVjb3JhdG9yLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL3JlZmVyZW5jZXMtbWFueS9yZWZlcmVuY2VzLW1hbnkuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci5kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLmRlY29yYXRvcic7XG4vLyBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3Vuc2F2ZWQtY2hhbmdlcy5ndWFyZCc7XG4vL3V0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMvZGF0ZS51dGlsaXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMvZW50aXR5LnV0aWxpdGllcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdGllcy9maWxlLnV0aWxpdGllcyc7Il19
@@ -28,8 +28,12 @@ export class EntityService {
28
28
  */
29
29
  this.entitiesSubject = new BehaviorSubject([]);
30
30
  /**
31
- * A subject of all the entity values.
32
- * Can be subscribed to when you want to do a specific thing whenever the entities change.
31
+ * When frequently trying to find a single entity by an id (eg. When nesting relations)
32
+ * you might send a lot of unnecessary requests.
33
+ * Therefore the findById method tries to look in the already existing entities first,
34
+ * IF the entities have been requested in the last READ_EXPIRATION_IN_MS milliseconds.
35
+ *
36
+ * @default 900000 (5 minutes)
33
37
  */
34
38
  this.READ_EXPIRATION_IN_MS = 900000;
35
39
  }
@@ -267,4 +271,4 @@ export class EntityService {
267
271
  this.entitiesSubject.next(this.entities);
268
272
  }
269
273
  }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUFtRC9CLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFwQzdDOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFFNUM7Ozs7V0FJRztRQUNNLFVBQUssR0FBcUIsSUFBd0IsQ0FBQztRQUU1RDs7O1dBR0c7UUFDTSxvQkFBZSxHQUFrQyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUdoRzs7O1dBR0c7UUFDZ0IsMEJBQXFCLEdBQVcsTUFBTSxDQUFDO0lBYVYsQ0FBQztJQVhqRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBTUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWtCLEVBQUUsVUFBa0IsSUFBSSxDQUFDLE9BQU87UUFDM0QsTUFBTSxJQUFJLEdBQXdCLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRixNQUFNLGdCQUFnQixHQUF5QixlQUFl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QUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBGaWxlRGF0YSB9IGZyb20gJy4uL2RlY29yYXRvcnMvZmlsZS9maWxlLWRlY29yYXRvci5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuLi91dGlsaXRpZXMvZW50aXR5LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBGaWxlVXRpbGl0aWVzIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2ZpbGUudXRpbGl0aWVzJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgRW50aXR5U2VydmljZSBjbGFzcy5cbiAqIE9mZmVycyBiYXNpYyBDUlVELWZ1bmN0aW9uYWxpdHkuXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBhIHNlcnZpY2UgZm9yIGV2ZXJ5IEVudGl0eSB5b3UgaGF2ZS5cbiAqIElmIHlvdSBleHRlbmQgZnJvbSB0aGlzIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBleHRlbmRlZCBTZXJ2aWNlIGNhbiBiZSBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHVzZWQgZm9yIGFwaSByZXF1ZXN0cy4gSWYgdSB3YW50IHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhpcyxcbiAgICAgKiB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjcmVhdGUsIHJlYWQsIHVwZGF0ZSBhbmQgZGVsZXRlIG1ldGhvZHMuXG4gICAgICpcbiAgICAgKiBDcmVhdGUgU2VuZHMgYSBQT1NULVJlcXVlc3QgdG8gYmFzZVVybC5cbiAgICAgKlxuICAgICAqIFJlYWQgU2VuZHMgYSBHRVQtUmVxdWVzdCB0byBiYXNlVXJsLlxuICAgICAqXG4gICAgICogVXBkYXRlIFNlbmRzIGEgUEFUQ0gtUmVxdWVzdCB0byBiYXNlVXJsL3tpZH0uXG4gICAgICpcbiAgICAgKiBEZWxldGUgU2VuZHMgYSBERUwtUmVxdWVzdCB0byBiYXNlVXJsL3tpZH0uXG4gICAgICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdXRlIHNlZ21lbnQgdGhhdCBjb21lcyBiZWZvcmUgdGhlIGlkIHdoZW4gZWRpdGluZyBhbiBlbnRpdHkgaW4gYSBzZXBhcmF0ZSBwYWdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVkaXRCYXNlUm91dGU6IHN0cmluZyA9ICdlbnRpdGllcyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHdoaWNoIGhvbGRzIHRoZSBpZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICdpZCdcbiAgICAgKi9cbiAgICByZWFkb25seSBpZEtleToga2V5b2YgRW50aXR5VHlwZSA9ICdpZCcgYXMga2V5b2YgRW50aXR5VHlwZTtcblxuICAgIC8qKlxuICAgICAqIEEgc3ViamVjdCBvZiBhbGwgdGhlIGVudGl0eSB2YWx1ZXMuXG4gICAgICogQ2FuIGJlIHN1YnNjcmliZWQgdG8gd2hlbiB5b3Ugd2FudCB0byBkbyBhIHNwZWNpZmljIHRoaW5nIHdoZW5ldmVyIHRoZSBlbnRpdGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW50aXRpZXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RW50aXR5VHlwZVtdPihbXSk7XG5cblxuICAgIC8qKlxuICAgICAqIEEgc3ViamVjdCBvZiBhbGwgdGhlIGVudGl0eSB2YWx1ZXMuXG4gICAgICogQ2FuIGJlIHN1YnNjcmliZWQgdG8gd2hlbiB5b3Ugd2FudCB0byBkbyBhIHNwZWNpZmljIHRoaW5nIHdoZW5ldmVyIHRoZSBlbnRpdGllcyBjaGFuZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IFJFQURfRVhQSVJBVElPTl9JTl9NUzogbnVtYmVyID0gOTAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZW50aXRpZXMgaW4gYW4gYXJyYXkgZnJvbSB0aGUgaW50ZXJuYWwgZW50aXRpZXNTdWJqZWN0LlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgZW50aXRpZXMgaW4gZm9ybSBvZiBhbiBhcnJheS5cbiAgICAgKi9cbiAgICBnZXQgZW50aXRpZXMoKTogRW50aXR5VHlwZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50aXRpZXNTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIGxhc3RSZWFkPzogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCkge31cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRW50aXR5IGFuZCBwdXNoZXMgaXQgdG8gdGhlIGVudGl0aWVzIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBkYXRhIG9mIHRoZSBlbnRpdHkgdG8gY3JlYXRlLlxuICAgICAqIEFsbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb21pdHRlZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBpbnNpZGUgdGhpcyBtZXRob2QuXG4gICAgICogQHBhcmFtIGJhc2VVcmwgLSBUaGUgYmFzZSB1cmwgdG8gc2VuZCB0aGUgcG9zdCByZXF1ZXN0IHRvLlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGVudGl0eSBiZWxvbmdpbmcgdG8gYW5vdGhlciwgbGlrZSBcImN1c3RvbWVycy97aWR9L2ludm9pY2VzXCIuXG4gICAgICogQHJldHVybnMgQSBQcm9taXNlIG9mIHRoZSBjcmVhdGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoZW50aXR5OiBFbnRpdHlUeXBlLCBiYXNlVXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VVcmwpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcbiAgICAgICAgY29uc3QgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPiA9IEVudGl0eVV0aWxpdGllcy5nZXRXaXRob3V0T21pdENyZWF0ZVZhbHVlcyhlbnRpdHkpO1xuICAgICAgICBjb25zdCBmaWxlUHJvcGVydHlLZXlzOiAoa2V5b2YgRW50aXR5VHlwZSlbXSA9IEVudGl0eVV0aWxpdGllcy5nZXRGaWxlUHJvcGVydGllcyhlbnRpdHkpO1xuICAgICAgICBpZiAoIWZpbGVQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVXaXRoSnNvbihib2R5LCBiYXNlVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVdpdGhGb3JtRGF0YShib2R5LCBmaWxlUHJvcGVydHlLZXlzLCBlbnRpdHksIGJhc2VVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBJbXBvcnRzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcHJvdmlkZWQganNvbiBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGUgLSBUaGUganNvbiBmaWxlIHRvIGltcG9ydCBmcm9tLlxuICAgICAqIEByZXR1cm5zIEFsbCBlbnRpdGllcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBpbXBvcnQoZmlsZTogRmlsZSk6IFByb21pc2U8RW50aXR5VHlwZVtdPiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ltcG9ydCcsIGZpbGUpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEVudGl0eVR5cGVbXSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PEVudGl0eVR5cGVbXT4oYCR7dGhpcy5iYXNlVXJsfS9pbXBvcnRgLCBmb3JtRGF0YSkpO1xuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goLi4ucmVzdWx0KTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGVudGl0eSB3aXRoIGZvcm0gZGF0YSB3aGVuIHRoZSBlbnRpdHkgY29udGFpbnMgZmlsZXMgaW4gY29udHJhc3QgdG8gY3JlYXRpbmcgaXQgd2l0aCBhIG5vcm1hbCBqc29uIGJvZHkuXG4gICAgICogQWxsIGZpbGUgdmFsdWVzIGFyZSBzdG9yZWQgaW5zaWRlIHRoZWlyIHJlc3BlY3RpdmUgcHJvcGVydHkga2V5IGFuZCB0aGVpciBuYW1lLlxuICAgICAqIEZvcm0gZGF0YSBpcyBhYmxlIHRvIGhhbmRsZSBzZXR0aW5nIG11bHRpcGxlIGZpbGVzIHRvIHRoZSBzYW1lIGtleS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgT2YgdGhlIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIGZpbGVQcm9wZXJ0eUtleXMgLSBBbGwgcHJvcGVydHkga2V5cyB0aGF0IGFyZSBmaWxlcyBhbmQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgZm9ybSBkYXRhLlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGNyZWF0ZS4gVGhpcyBpcyBuZWVkZWQgaW4gYWRkaXRpb24gdG8gdGhlIGJvZHkgYmVjYXVzZSB0aGUgYm9keSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgdXJsIHRvIHNlbmQgdGhlIHBvc3QgcmVxdWVzdCB0by5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBlbnRpdHkgYmVsb25naW5nIHRvIGFub3RoZXIsIGxpa2UgXCJjdXN0b21lcnMve2lkfS9pbnZvaWNlc1wiLlxuICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudGl0eSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVdpdGhGb3JtRGF0YShcbiAgICAgICAgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPixcbiAgICAgICAgZmlsZVByb3BlcnR5S2V5czogKGtleW9mIEVudGl0eVR5cGUpW10sXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nID0gdGhpcy5iYXNlVXJsXG4gICAgKTogUHJvbWlzZTxFbnRpdHlUeXBlPiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2JvZHknLCBKU09OLnN0cmluZ2lmeShMb2Rhc2hVdGlsaXRpZXMub21pdChib2R5LCBmaWxlUHJvcGVydHlLZXlzKSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWxlUHJvcGVydHlLZXlzKSB7XG4gICAgICAgICAgICBpZiAoRW50aXR5VXRpbGl0aWVzLmdldFByb3BlcnR5TWV0YWRhdGEoZW50aXR5LCBrZXksIERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVCkubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRGF0YVZhbHVlczogRmlsZURhdGFbXSA9IGJvZHlba2V5XSBhcyBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZmlsZURhdGFWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSBhcyBzdHJpbmcsIChhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKHZhbHVlKSkuZmlsZSwgdmFsdWUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGE6IEZpbGVEYXRhID0gYm9keVtrZXldIGFzIEZpbGVEYXRhO1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXkgYXMgc3RyaW5nLCAoYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YShmaWxlRGF0YSkpLmZpbGUsIGZpbGVEYXRhLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGU6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdDxFbnRpdHlUeXBlIHwgdW5kZWZpbmVkPihiYXNlVXJsLCBmb3JtRGF0YSkpO1xuICAgICAgICBpZiAoIWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXG4gICAgICAgICAgICAgICAgVGhlIGNyZWF0ZWQgZW50aXR5IHdhcyBub3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBsb2dpYyB0aGF0IGFsbG93cyB0aGF0XG4gICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBtZXRob2RzIG9mIHRoaXMgY2xhc3MuXG4gICAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goZSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGVudGl0eSB3aXRoIGEgbm9ybWFsIGpzb24gYm9keSBpbiBjb250cmFzdCB0byBjcmVhdGluZyBpdCB3aXRoIGZvcm0gZGF0YSB3aGVuIHRoZSBlbnRpdHkgY29udGFpbnMgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IE9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgdXJsIHRvIHNlbmQgdGhlIHBvc3QgcmVxdWVzdCB0by5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBlbnRpdHkgYmVsb25naW5nIHRvIGFub3RoZXIsIGxpa2UgXCJjdXN0b21lcnMve2lkfS9pbnZvaWNlc1wiLlxuICAgICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudGl0eSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVdpdGhKc29uKGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4sIGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuYmFzZVVybCk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuICAgICAgICBjb25zdCBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oYmFzZVVybCwgYm9keSkpO1xuICAgICAgICBpZiAoIWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXG4gICAgICAgICAgICAgICAgVGhlIGNyZWF0ZWQgZW50aXR5IHdhcyBub3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBsb2dpYyB0aGF0IGFsbG93cyB0aGF0XG4gICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBtZXRob2RzIG9mIHRoaXMgY2xhc3MuXG4gICAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0aWVzLnB1c2goZSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGV4aXN0aW5nIGVudGl0aWVzIGFuZCBwdXNoZXMgdGhlbSB0byB0aGUgZW50aXRpZXMgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmFzZVVybCAtIFRoZSBiYXNlIHVybCBmb3IgdGhlIHJlcXVlc3QuIERlZmF1bHRzIHRvIHRoZSBiYXNlVXJsIG9uIHRoZSBzZXJ2aWNlLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSBvZiBhbGwgcmVjZWl2ZWQgRW50aXRpZXMuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZChiYXNlVXJsID0gdGhpcy5iYXNlVXJsKTogUHJvbWlzZTxFbnRpdHlUeXBlW10+IHtcbiAgICAgICAgY29uc3QgZTogRW50aXR5VHlwZVtdID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxFbnRpdHlUeXBlW10+KGJhc2VVcmwpKTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dChlKTtcbiAgICAgICAgdGhpcy5sYXN0UmVhZCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIGZpbmQgYW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdHkgdG8gZmluZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgZm91bmQgZW50aXR5LlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCeUlkKGlkOiBFbnRpdHlUeXBlW2tleW9mIEVudGl0eVR5cGVdKTogUHJvbWlzZTxFbnRpdHlUeXBlPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubGFzdFJlYWQgPT0gbnVsbFxuICAgICAgICAgICAgfHwgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5sYXN0UmVhZC5nZXRUaW1lKCkpID4gdGhpcy5SRUFEX0VYUElSQVRJT05fSU5fTVNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxFbnRpdHlUeXBlPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzLmZpbmQoZSA9PiBlW3RoaXMuaWRLZXldID09PSBpZCkgPz8gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxFbnRpdHlUeXBlPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYSBzcGVjaWZpYyBFbnRpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIHVwZGF0ZWQgRW50aXR5XG4gICAgICogQWxsIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBvbWl0dGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGluc2lkZSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gZW50aXR5UHJpb3JDaGFuZ2VzIC0gVGhlIGN1cnJlbnQgRW50aXR5LlxuICAgICAqIEl0IElzIHVzZWQgdG8gZ2V0IGNoYW5nZWQgdmFsdWVzIGFuZCBvbmx5IHVwZGF0ZSB0aGVtIGluc3RlYWQgb2Ygc2VuZGluZyB0aGUgd2hvbGUgZW50aXR5IGRhdGEuXG4gICAgICovXG4gICAgYXN5bmMgdXBkYXRlKGVudGl0eTogRW50aXR5VHlwZSwgZW50aXR5UHJpb3JDaGFuZ2VzOiBFbnRpdHlUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZpbGVQcm9wZXJ0eUtleXM6IChrZXlvZiBFbnRpdHlUeXBlKVtdID0gRW50aXR5VXRpbGl0aWVzLmdldEZpbGVQcm9wZXJ0aWVzKGVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgIGNvbnN0IGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4gPSBhd2FpdCB0aGlzLmVudGl0eVRvVXBkYXRlUmVxdWVzdEJvZHkoZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICBpZiAoIWZpbGVQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpdGhKc29uKGJvZHksIGVudGl0eVByaW9yQ2hhbmdlc1t0aGlzLmlkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpdGhGb3JtRGF0YShib2R5LCBmaWxlUHJvcGVydHlLZXlzLCBlbnRpdHksIGVudGl0eVByaW9yQ2hhbmdlc1t0aGlzLmlkS2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgdGhlIHVwZGF0ZSByZXF1ZXN0IGJvZHkgZnJvbSB0aGUgZ2l2ZW4gZW50aXR5IGJlZm9yZSBhbmQgYWZ0ZXIgaXRzIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aXRoIGNoYW5nZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSBlbnRpdHlQcmlvckNoYW5nZXMgLSBUaGUgZW50aXR5IGJlZm9yZSBhbnkgY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyBBIHBhcnRpYWwgb2Ygb25seSB0aGUgY2hhbmdlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGVudGl0eVRvVXBkYXRlUmVxdWVzdEJvZHkoZW50aXR5OiBFbnRpdHlUeXBlLCBlbnRpdHlQcmlvckNoYW5nZXM6IEVudGl0eVR5cGUpOiBQcm9taXNlPFBhcnRpYWw8RW50aXR5VHlwZT4+IHtcbiAgICAgICAgY29uc3QgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPiA9IGF3YWl0IEVudGl0eVV0aWxpdGllcy5nZXRXaXRob3V0T21pdFVwZGF0ZVZhbHVlcyhlbnRpdHksIGVudGl0eVByaW9yQ2hhbmdlcyk7XG4gICAgICAgIHJldHVybiBMb2Rhc2hVdGlsaXRpZXMub21pdEJ5KGJvZHksIExvZGFzaFV0aWxpdGllcy5pc05pbCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBlbnRpdHkgd2l0aCBmb3JtIGRhdGEgd2hlbiB0aGUgZW50aXR5IGNvbnRhaW5zIGZpbGVzIGluIGNvbnRyYXN0IHRvIGNyZWF0aW5nIGl0IHdpdGggYSBub3JtYWwganNvbiBib2R5LlxuICAgICAqIEFsbCBmaWxlIHZhbHVlcyBhcmUgc3RvcmVkIGluc2lkZSB0aGVpciByZXNwZWN0aXZlIHByb3BlcnR5IGtleSBhbmQgdGhlaXIgbmFtZS5cbiAgICAgKiBGb3JtIGRhdGEgaXMgYWJsZSB0byBoYW5kbGUgc2V0dGluZyBtdWx0aXBsZSBmaWxlcyB0byB0aGUgc2FtZSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSByZXF1ZXN0IGJvZHkuIEFscmVhZHkgY29udGFpbnMgb25seSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSBmaWxlUHJvcGVydHlLZXlzIC0gVGhlIGtleXMgb2YgYWxsIHByb3BlcnRpZXMgd2hpY2ggYXJlIGZpbGVzIGFuZCBuZWVkIHRvIHNlcGFyYXRlbHkgYmUgYXBwZW5kZWQgdG8gdGhlIGZvcm0gZGF0YS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIG9yaWdpbmFsIGVudGl0eS4gSXMgbmVlZGVkIHRvIGdldCB0aGUgbWV0YWRhdGEgb2YgYWxsIHRoZSBmaWxlcy5cbiAgICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0eSB0byB1cGRhdGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVdpdGhGb3JtRGF0YShcbiAgICAgICAgYm9keTogUGFydGlhbDxFbnRpdHlUeXBlPixcbiAgICAgICAgZmlsZVByb3BlcnR5S2V5czogKGtleW9mIEVudGl0eVR5cGUpW10sXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgaWQ6IEVudGl0eVR5cGVba2V5b2YgRW50aXR5VHlwZV1cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZmlsZVByb3BlcnR5S2V5cykge1xuICAgICAgICAgICAgaWYgKEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwga2V5LCBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQpLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGFWYWx1ZXM6IEZpbGVEYXRhW10gPSBib2R5W2tleV0gYXMgRmlsZURhdGFbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpbGVEYXRhVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXkgYXMgc3RyaW5nLCAoYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YSh2YWx1ZSkpLmZpbGUsIHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEYXRhOiBGaWxlRGF0YSA9IGJvZHlba2V5XSBhcyBGaWxlRGF0YTtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5IGFzIHN0cmluZywgKGF3YWl0IEZpbGVVdGlsaXRpZXMuZ2V0RmlsZURhdGEoZmlsZURhdGEpKS5maWxlLCBmaWxlRGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVkRW50aXR5OiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2g8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWAsIGZvcm1EYXRhKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXVwZGF0ZWRFbnRpdHkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSB1cGRhdGVkIGVudGl0eSB3YXMgbm90IHJldHVybmVkIGluIHRoZSByZXNwb25zZS4gQXBwbHlpbmcgdGhlIGNoYW5nZXMgZnJvbSB0aGUgcmVxdWVzdCBib2R5LicpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbdGhpcy5lbnRpdGllcy5maW5kSW5kZXgoZSA9PiBlW3RoaXMuaWRLZXldID09PSBpZCldW2tleV1cbiAgICAgICAgICAgICAgICAgICAgPSBib2R5W2tleV0gYXMgRW50aXR5VHlwZVtFeHRyYWN0PGtleW9mIEVudGl0eVR5cGUsIHN0cmluZz5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpXSA9IHVwZGF0ZWRFbnRpdHk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgZW50aXR5IHdpdGggYSBub3JtYWwganNvbiBib2R5IGluIGNvbnRyYXN0IHRvIHVwZGF0aW5nIGl0IHdpdGggZm9ybSBkYXRhIHdoZW4gdGhlIGVudGl0eSBjb250YWlucyBmaWxlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBib2R5IC0gVGhlIGJvZHkgb2YgdGhlIFJlcXVlc3QuIEhhcyBhbHJlYWR5IHJlbW92ZWQgYWxsIHVubmVjZXNzYXJ5IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0eSB0byB1cGRhdGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVdpdGhKc29uKGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4sIGlkOiBFbnRpdHlUeXBlW2tleW9mIEVudGl0eVR5cGVdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFbnRpdHk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgIHRoaXMuaHR0cC5wYXRjaDxFbnRpdHlUeXBlIHwgdW5kZWZpbmVkPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCxcbiAgICAgICAgICAgICAgICBMb2Rhc2hVdGlsaXRpZXMub21pdEJ5KGJvZHksIExvZGFzaFV0aWxpdGllcy5pc05pbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF1cGRhdGVkRW50aXR5KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgdXBkYXRlZCBlbnRpdHkgd2FzIG5vdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UuIEFwcGx5aW5nIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHJlcXVlc3QgYm9keS4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kRW50aXR5OiBFbnRpdHlUeXBlID0gdGhpcy5lbnRpdGllc1t0aGlzLmVudGl0aWVzLmZpbmRJbmRleChlID0+IGVbdGhpcy5pZEtleV0gPT09IGlkKV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XG4gICAgICAgICAgICAgICAgZm91bmRFbnRpdHlba2V5XVxuICAgICAgICAgICAgICAgICAgICA9IGJvZHlba2V5XSBhcyBFbnRpdHlUeXBlW0V4dHJhY3Q8a2V5b2YgRW50aXR5VHlwZSwgc3RyaW5nPl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW50aXRpZXNbdGhpcy5lbnRpdGllcy5maW5kSW5kZXgoZSA9PiBlW3RoaXMuaWRLZXldID09PSBpZCldID0gdXBkYXRlZEVudGl0eTtcbiAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgc3BlY2lmaWMgRW50aXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gZGVsZXRlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShlbnRpdHk6IEVudGl0eVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7ZW50aXR5W3RoaXMuaWRLZXldfWApKTtcbiAgICAgICAgLy8gdGhlID09IGNvbXBhcmlzb24gaW5zdGVhZCBvZiA9PT0gaXMgdG8gY2F0Y2ggaWRzIHRoYXQgYXJlIG51bWJlcnMuXG4gICAgICAgIHRoaXMuZW50aXRpZXMuc3BsaWNlKHRoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gZW50aXR5W3RoaXMuaWRLZXldKSwgMSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxufSJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLGFBQWE7SUF1RC9CLFlBQStCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUF4Qy9DOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFFNUM7Ozs7V0FJRztRQUNNLFVBQUssR0FBcUIsSUFBd0IsQ0FBQztRQUU1RDs7O1dBR0c7UUFDTSxvQkFBZSxHQUFrQyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztRQUdoRzs7Ozs7OztXQU9HO1FBQ2dCLDBCQUFxQixHQUFXLE1BQU0sQ0FBQztJQWFSLENBQUM7SUFYbkQ7Ozs7T0FJRztJQUNILElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQU1EOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFrQixFQUFFLFVBQWtCLElBQUksQ0FBQyxPQUFPO1FBQzNELE1BQU0sSUFBSSxHQUF3QixlQUFlLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckYsTUFBTSxnQkFBZ0IsR0FBeUIs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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBMb2Rhc2hVdGlsaXRpZXMgfSBmcm9tICcuLi9lbmNhcHN1bGF0aW9uL2xvZGFzaC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbGl0aWVzIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4uL3V0aWxpdGllcy9maWxlLnV0aWxpdGllcyc7XG5cbi8qKlxuICogQSBnZW5lcmljIEVudGl0eVNlcnZpY2UgY2xhc3MuXG4gKiBPZmZlcnMgYmFzaWMgQ1JVRC1mdW5jdGlvbmFsaXR5LlxuICogWW91IHNob3VsZCBjcmVhdGUgYSBzZXJ2aWNlIGZvciBldmVyeSBFbnRpdHkgeW91IGhhdmUuXG4gKiBJZiB5b3UgZXh0ZW5kIGZyb20gdGhpcyB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZXh0ZW5kZWQgU2VydmljZSBjYW4gYmUgaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4ge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHVybCB1c2VkIGZvciBhcGkgcmVxdWVzdHMuIElmIHUgd2FudCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoaXMsXG4gICAgICogeW91IGNhbiBvdmVycmlkZSB0aGUgY3JlYXRlLCByZWFkLCB1cGRhdGUgYW5kIGRlbGV0ZSBtZXRob2RzLlxuICAgICAqXG4gICAgICogQ3JlYXRlIFNlbmRzIGEgUE9TVC1SZXF1ZXN0IHRvIGJhc2VVcmwuXG4gICAgICpcbiAgICAgKiBSZWFkIFNlbmRzIGEgR0VULVJlcXVlc3QgdG8gYmFzZVVybC5cbiAgICAgKlxuICAgICAqIFVwZGF0ZSBTZW5kcyBhIFBBVENILVJlcXVlc3QgdG8gYmFzZVVybC97aWR9LlxuICAgICAqXG4gICAgICogRGVsZXRlIFNlbmRzIGEgREVMLVJlcXVlc3QgdG8gYmFzZVVybC97aWR9LlxuICAgICAqL1xuICAgIGFic3RyYWN0IHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSByb3V0ZSBzZWdtZW50IHRoYXQgY29tZXMgYmVmb3JlIHRoZSBpZCB3aGVuIGVkaXRpbmcgYW4gZW50aXR5IGluIGEgc2VwYXJhdGUgcGFnZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBlZGl0QmFzZVJvdXRlOiBzdHJpbmcgPSAnZW50aXRpZXMnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB3aGljaCBob2xkcyB0aGUgaWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnaWQnXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWRLZXk6IGtleW9mIEVudGl0eVR5cGUgPSAnaWQnIGFzIGtleW9mIEVudGl0eVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBBIHN1YmplY3Qgb2YgYWxsIHRoZSBlbnRpdHkgdmFsdWVzLlxuICAgICAqIENhbiBiZSBzdWJzY3JpYmVkIHRvIHdoZW4geW91IHdhbnQgdG8gZG8gYSBzcGVjaWZpYyB0aGluZyB3aGVuZXZlciB0aGUgZW50aXRpZXMgY2hhbmdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudGl0aWVzU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVR5cGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVR5cGVbXT4oW10pO1xuXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGZyZXF1ZW50bHkgdHJ5aW5nIHRvIGZpbmQgYSBzaW5nbGUgZW50aXR5IGJ5IGFuIGlkIChlZy4gV2hlbiBuZXN0aW5nIHJlbGF0aW9ucylcbiAgICAgKiB5b3UgbWlnaHQgc2VuZCBhIGxvdCBvZiB1bm5lY2Vzc2FyeSByZXF1ZXN0cy5cbiAgICAgKiBUaGVyZWZvcmUgdGhlIGZpbmRCeUlkIG1ldGhvZCB0cmllcyB0byBsb29rIGluIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGVudGl0aWVzIGZpcnN0LFxuICAgICAqIElGIHRoZSBlbnRpdGllcyBoYXZlIGJlZW4gcmVxdWVzdGVkIGluIHRoZSBsYXN0IFJFQURfRVhQSVJBVElPTl9JTl9NUyBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA5MDAwMDAgKDUgbWludXRlcylcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgUkVBRF9FWFBJUkFUSU9OX0lOX01TOiBudW1iZXIgPSA5MDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbnRpdGllcyBpbiBhbiBhcnJheSBmcm9tIHRoZSBpbnRlcm5hbCBlbnRpdGllc1N1YmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBlbnRpdGllcyBpbiBmb3JtIG9mIGFuIGFycmF5LlxuICAgICAqL1xuICAgIGdldCBlbnRpdGllcygpOiBFbnRpdHlUeXBlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRpdGllc1N1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgbGFzdFJlYWQ/OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eSBhbmQgcHVzaGVzIGl0IHRvIHRoZSBlbnRpdGllcyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZGF0YSBvZiB0aGUgZW50aXR5IHRvIGNyZWF0ZS5cbiAgICAgKiBBbGwgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIG9taXR0ZWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgaW5zaWRlIHRoaXMgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2UgdXJsIHRvIHNlbmQgdGhlIHBvc3QgcmVxdWVzdCB0by5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBlbnRpdHkgYmVsb25naW5nIHRvIGFub3RoZXIsIGxpa2UgXCJjdXN0b21lcnMve2lkfS9pbnZvaWNlc1wiLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSBvZiB0aGUgY3JlYXRlZCBlbnRpdHkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlKGVudGl0eTogRW50aXR5VHlwZSwgYmFzZVVybDogc3RyaW5nID0gdGhpcy5iYXNlVXJsKTogUHJvbWlzZTxFbnRpdHlUeXBlPiB7XG4gICAgICAgIGNvbnN0IGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0V2l0aG91dE9taXRDcmVhdGVWYWx1ZXMoZW50aXR5KTtcbiAgICAgICAgY29uc3QgZmlsZVByb3BlcnR5S2V5czogKGtleW9mIEVudGl0eVR5cGUpW10gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0RmlsZVByb3BlcnRpZXMoZW50aXR5KTtcbiAgICAgICAgaWYgKCFmaWxlUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlV2l0aEpzb24oYm9keSwgYmFzZVVybCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVXaXRoRm9ybURhdGEoYm9keSwgZmlsZVByb3BlcnR5S2V5cywgZW50aXR5LCBiYXNlVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogSW1wb3J0cyBldmVyeXRoaW5nIGZyb20gdGhlIHByb3ZpZGVkIGpzb24gZmlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIC0gVGhlIGpzb24gZmlsZSB0byBpbXBvcnQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyBBbGwgZW50aXRpZXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgaW1wb3J0KGZpbGU6IEZpbGUpOiBQcm9taXNlPEVudGl0eVR5cGVbXT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbXBvcnQnLCBmaWxlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFbnRpdHlUeXBlW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdDxFbnRpdHlUeXBlW10+KGAke3RoaXMuYmFzZVVybH0vaW1wb3J0YCwgZm9ybURhdGEpKTtcbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKC4uLnJlc3VsdCk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBlbnRpdHkgd2l0aCBmb3JtIGRhdGEgd2hlbiB0aGUgZW50aXR5IGNvbnRhaW5zIGZpbGVzIGluIGNvbnRyYXN0IHRvIGNyZWF0aW5nIGl0IHdpdGggYSBub3JtYWwganNvbiBib2R5LlxuICAgICAqIEFsbCBmaWxlIHZhbHVlcyBhcmUgc3RvcmVkIGluc2lkZSB0aGVpciByZXNwZWN0aXZlIHByb3BlcnR5IGtleSBhbmQgdGhlaXIgbmFtZS5cbiAgICAgKiBGb3JtIGRhdGEgaXMgYWJsZSB0byBoYW5kbGUgc2V0dGluZyBtdWx0aXBsZSBmaWxlcyB0byB0aGUgc2FtZSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IE9mIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBmaWxlUHJvcGVydHlLZXlzIC0gQWxsIHByb3BlcnR5IGtleXMgdGhhdCBhcmUgZmlsZXMgYW5kIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGZvcm0gZGF0YS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byBjcmVhdGUuIFRoaXMgaXMgbmVlZGVkIGluIGFkZGl0aW9uIHRvIHRoZSBib2R5IGJlY2F1c2UgdGhlIGJvZHkgZG9lc24ndCBjb250YWluIGFueSBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0gYmFzZVVybCAtIFRoZSBiYXNlIHVybCB0byBzZW5kIHRoZSBwb3N0IHJlcXVlc3QgdG8uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gZW50aXR5IGJlbG9uZ2luZyB0byBhbm90aGVyLCBsaWtlIFwiY3VzdG9tZXJzL3tpZH0vaW52b2ljZXNcIi5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVXaXRoRm9ybURhdGEoXG4gICAgICAgIGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4sXG4gICAgICAgIGZpbGVQcm9wZXJ0eUtleXM6IChrZXlvZiBFbnRpdHlUeXBlKVtdLFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuYmFzZVVybFxuICAgICk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdib2R5JywgSlNPTi5zdHJpbmdpZnkoTG9kYXNoVXRpbGl0aWVzLm9taXQoYm9keSwgZmlsZVByb3BlcnR5S2V5cykpKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZmlsZVByb3BlcnR5S2V5cykge1xuICAgICAgICAgICAgaWYgKEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwga2V5LCBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQpLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGFWYWx1ZXM6IEZpbGVEYXRhW10gPSBib2R5W2tleV0gYXMgRmlsZURhdGFbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpbGVEYXRhVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXkgYXMgc3RyaW5nLCAoYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YSh2YWx1ZSkpLmZpbGUsIHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEYXRhOiBGaWxlRGF0YSA9IGJvZHlba2V5XSBhcyBGaWxlRGF0YTtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5IGFzIHN0cmluZywgKGF3YWl0IEZpbGVVdGlsaXRpZXMuZ2V0RmlsZURhdGEoZmlsZURhdGEpKS5maWxlLCBmaWxlRGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oYmFzZVVybCwgZm9ybURhdGEpKTtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIFRoZSBjcmVhdGVkIGVudGl0eSB3YXMgbm90IHJldHVybmVkIGluIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgbG9naWMgdGhhdCBhbGxvd3MgdGhhdFxuICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLlxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKGUpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBlbnRpdHkgd2l0aCBhIG5vcm1hbCBqc29uIGJvZHkgaW4gY29udHJhc3QgdG8gY3JlYXRpbmcgaXQgd2l0aCBmb3JtIGRhdGEgd2hlbiB0aGUgZW50aXR5IGNvbnRhaW5zIGZpbGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBPZiB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYmFzZVVybCAtIFRoZSBiYXNlIHVybCB0byBzZW5kIHRoZSBwb3N0IHJlcXVlc3QgdG8uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gZW50aXR5IGJlbG9uZ2luZyB0byBhbm90aGVyLCBsaWtlIFwiY3VzdG9tZXJzL3tpZH0vaW52b2ljZXNcIi5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVXaXRoSnNvbihib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+LCBiYXNlVXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VVcmwpOiBQcm9taXNlPEVudGl0eVR5cGU+IHtcbiAgICAgICAgY29uc3QgZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+KGJhc2VVcmwsIGJvZHkpKTtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIFRoZSBjcmVhdGVkIGVudGl0eSB3YXMgbm90IHJldHVybmVkIGluIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgbG9naWMgdGhhdCBhbGxvd3MgdGhhdFxuICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLlxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllcy5wdXNoKGUpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBleGlzdGluZyBlbnRpdGllcyBhbmQgcHVzaGVzIHRoZW0gdG8gdGhlIGVudGl0aWVzIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJhc2VVcmwgLSBUaGUgYmFzZSB1cmwgZm9yIHRoZSByZXF1ZXN0LiBEZWZhdWx0cyB0byB0aGUgYmFzZVVybCBvbiB0aGUgc2VydmljZS5cbiAgICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgYWxsIHJlY2VpdmVkIEVudGl0aWVzLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWQoYmFzZVVybCA9IHRoaXMuYmFzZVVybCk6IFByb21pc2U8RW50aXR5VHlwZVtdPiB7XG4gICAgICAgIGNvbnN0IGU6IEVudGl0eVR5cGVbXSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZVtdPihiYXNlVXJsKSk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQoZSk7XG4gICAgICAgIHRoaXMubGFzdFJlYWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBmaW5kIGFuIGVudGl0eSB3aXRoIHRoZSBnaXZlbiBpZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgZW50aXR5IHRvIGZpbmQuXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGVudGl0eS5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQnlJZChpZDogRW50aXR5VHlwZVtrZXlvZiBFbnRpdHlUeXBlXSk6IFByb21pc2U8RW50aXR5VHlwZT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmxhc3RSZWFkID09IG51bGxcbiAgICAgICAgICAgIHx8IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMubGFzdFJlYWQuZ2V0VGltZSgpKSA+IHRoaXMuUkVBRF9FWFBJUkFUSU9OX0lOX01TXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWApKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbnRpdGllcy5maW5kKGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpID8/IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGEgc3BlY2lmaWMgRW50aXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSB1cGRhdGVkIEVudGl0eVxuICAgICAqIEFsbCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb21pdHRlZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBpbnNpZGUgdGhpcyBtZXRob2QuXG4gICAgICogQHBhcmFtIGVudGl0eVByaW9yQ2hhbmdlcyAtIFRoZSBjdXJyZW50IEVudGl0eS5cbiAgICAgKiBJdCBJcyB1c2VkIHRvIGdldCBjaGFuZ2VkIHZhbHVlcyBhbmQgb25seSB1cGRhdGUgdGhlbSBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIHdob2xlIGVudGl0eSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShlbnRpdHk6IEVudGl0eVR5cGUsIGVudGl0eVByaW9yQ2hhbmdlczogRW50aXR5VHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmaWxlUHJvcGVydHlLZXlzOiAoa2V5b2YgRW50aXR5VHlwZSlbXSA9IEVudGl0eVV0aWxpdGllcy5nZXRGaWxlUHJvcGVydGllcyhlbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICBjb25zdCBib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+ID0gYXdhaXQgdGhpcy5lbnRpdHlUb1VwZGF0ZVJlcXVlc3RCb2R5KGVudGl0eSwgZW50aXR5UHJpb3JDaGFuZ2VzKTtcbiAgICAgICAgaWYgKCFmaWxlUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaXRoSnNvbihib2R5LCBlbnRpdHlQcmlvckNoYW5nZXNbdGhpcy5pZEtleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVXaXRoRm9ybURhdGEoYm9keSwgZmlsZVByb3BlcnR5S2V5cywgZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXNbdGhpcy5pZEtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSB1cGRhdGUgcmVxdWVzdCBib2R5IGZyb20gdGhlIGdpdmVuIGVudGl0eSBiZWZvcmUgYW5kIGFmdGVyIGl0cyBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgd2l0aCBjaGFuZ2VkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gZW50aXR5UHJpb3JDaGFuZ2VzIC0gVGhlIGVudGl0eSBiZWZvcmUgYW55IGNoYW5nZXMuXG4gICAgICogQHJldHVybnMgQSBwYXJ0aWFsIG9mIG9ubHkgdGhlIGNoYW5nZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBlbnRpdHlUb1VwZGF0ZVJlcXVlc3RCb2R5KGVudGl0eTogRW50aXR5VHlwZSwgZW50aXR5UHJpb3JDaGFuZ2VzOiBFbnRpdHlUeXBlKTogUHJvbWlzZTxQYXJ0aWFsPEVudGl0eVR5cGU+PiB7XG4gICAgICAgIGNvbnN0IGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4gPSBhd2FpdCBFbnRpdHlVdGlsaXRpZXMuZ2V0V2l0aG91dE9taXRVcGRhdGVWYWx1ZXMoZW50aXR5LCBlbnRpdHlQcmlvckNoYW5nZXMpO1xuICAgICAgICByZXR1cm4gTG9kYXNoVXRpbGl0aWVzLm9taXRCeShib2R5LCBMb2Rhc2hVdGlsaXRpZXMuaXNOaWwpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgZW50aXR5IHdpdGggZm9ybSBkYXRhIHdoZW4gdGhlIGVudGl0eSBjb250YWlucyBmaWxlcyBpbiBjb250cmFzdCB0byBjcmVhdGluZyBpdCB3aXRoIGEgbm9ybWFsIGpzb24gYm9keS5cbiAgICAgKiBBbGwgZmlsZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbnNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBwcm9wZXJ0eSBrZXkgYW5kIHRoZWlyIG5hbWUuXG4gICAgICogRm9ybSBkYXRhIGlzIGFibGUgdG8gaGFuZGxlIHNldHRpbmcgbXVsdGlwbGUgZmlsZXMgdG8gdGhlIHNhbWUga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJvZHkgLSBUaGUgcmVxdWVzdCBib2R5LiBBbHJlYWR5IGNvbnRhaW5zIG9ubHkgcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0gZmlsZVByb3BlcnR5S2V5cyAtIFRoZSBrZXlzIG9mIGFsbCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBmaWxlcyBhbmQgbmVlZCB0byBzZXBhcmF0ZWx5IGJlIGFwcGVuZGVkIHRvIHRoZSBmb3JtIGRhdGEuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBvcmlnaW5hbCBlbnRpdHkuIElzIG5lZWRlZCB0byBnZXQgdGhlIG1ldGFkYXRhIG9mIGFsbCB0aGUgZmlsZXMuXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdHkgdG8gdXBkYXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyB1cGRhdGVXaXRoRm9ybURhdGEoXG4gICAgICAgIGJvZHk6IFBhcnRpYWw8RW50aXR5VHlwZT4sXG4gICAgICAgIGZpbGVQcm9wZXJ0eUtleXM6IChrZXlvZiBFbnRpdHlUeXBlKVtdLFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGlkOiBFbnRpdHlUeXBlW2tleW9mIEVudGl0eVR5cGVdXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2JvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpbGVQcm9wZXJ0eUtleXMpIHtcbiAgICAgICAgICAgIGlmIChFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgRGVjb3JhdG9yVHlwZXMuRklMRV9ERUZBVUxUKS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEYXRhVmFsdWVzOiBGaWxlRGF0YVtdID0gYm9keVtrZXldIGFzIEZpbGVEYXRhW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBmaWxlRGF0YVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5IGFzIHN0cmluZywgKGF3YWl0IEZpbGVVdGlsaXRpZXMuZ2V0RmlsZURhdGEodmFsdWUpKS5maWxlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRGF0YTogRmlsZURhdGEgPSBib2R5W2tleV0gYXMgRmlsZURhdGE7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSBhcyBzdHJpbmcsIChhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKGZpbGVEYXRhKSkuZmlsZSwgZmlsZURhdGEubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZEVudGl0eTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5odHRwLnBhdGNoPEVudGl0eVR5cGUgfCB1bmRlZmluZWQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gLCBmb3JtRGF0YSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF1cGRhdGVkRW50aXR5KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgdXBkYXRlZCBlbnRpdHkgd2FzIG5vdCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UuIEFwcGx5aW5nIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHJlcXVlc3QgYm9keS4nKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpXVtrZXldXG4gICAgICAgICAgICAgICAgICAgID0gYm9keVtrZXldIGFzIEVudGl0eVR5cGVbRXh0cmFjdDxrZXlvZiBFbnRpdHlUeXBlLCBzdHJpbmc+XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRpdGllc1t0aGlzLmVudGl0aWVzLmZpbmRJbmRleChlID0+IGVbdGhpcy5pZEtleV0gPT09IGlkKV0gPSB1cGRhdGVkRW50aXR5O1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGVudGl0eSB3aXRoIGEgbm9ybWFsIGpzb24gYm9keSBpbiBjb250cmFzdCB0byB1cGRhdGluZyBpdCB3aXRoIGZvcm0gZGF0YSB3aGVuIHRoZSBlbnRpdHkgY29udGFpbnMgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBSZXF1ZXN0LiBIYXMgYWxyZWFkeSByZW1vdmVkIGFsbCB1bm5lY2Vzc2FyeSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdHkgdG8gdXBkYXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyB1cGRhdGVXaXRoSnNvbihib2R5OiBQYXJ0aWFsPEVudGl0eVR5cGU+LCBpZDogRW50aXR5VHlwZVtrZXlvZiBFbnRpdHlUeXBlXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRW50aXR5OiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmh0dHAucGF0Y2g8RW50aXR5VHlwZSB8IHVuZGVmaW5lZD4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS8ke2lkfWAsXG4gICAgICAgICAgICAgICAgTG9kYXNoVXRpbGl0aWVzLm9taXRCeShib2R5LCBMb2Rhc2hVdGlsaXRpZXMuaXNOaWwpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdXBkYXRlZEVudGl0eSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHVwZGF0ZWQgZW50aXR5IHdhcyBub3QgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLiBBcHBseWluZyB0aGUgY2hhbmdlcyBmcm9tIHRoZSByZXF1ZXN0IGJvZHkuJyk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZEVudGl0eTogRW50aXR5VHlwZSA9IHRoaXMuZW50aXRpZXNbdGhpcy5lbnRpdGllcy5maW5kSW5kZXgoZSA9PiBlW3RoaXMuaWRLZXldID09PSBpZCldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xuICAgICAgICAgICAgICAgIGZvdW5kRW50aXR5W2tleV1cbiAgICAgICAgICAgICAgICAgICAgPSBib2R5W2tleV0gYXMgRW50aXR5VHlwZVtFeHRyYWN0PGtleW9mIEVudGl0eVR5cGUsIHN0cmluZz5dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbnRpdGllc1N1YmplY3QubmV4dCh0aGlzLmVudGl0aWVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudGl0aWVzW3RoaXMuZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZVt0aGlzLmlkS2V5XSA9PT0gaWQpXSA9IHVwZGF0ZWRFbnRpdHk7XG4gICAgICAgIHRoaXMuZW50aXRpZXNTdWJqZWN0Lm5leHQodGhpcy5lbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIHNwZWNpZmljIEVudGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIGRlbGV0ZS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUoZW50aXR5OiBFbnRpdHlUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oYCR7dGhpcy5iYXNlVXJsfS8ke2VudGl0eVt0aGlzLmlkS2V5XX1gKSk7XG4gICAgICAgIC8vIHRoZSA9PSBjb21wYXJpc29uIGluc3RlYWQgb2YgPT09IGlzIHRvIGNhdGNoIGlkcyB0aGF0IGFyZSBudW1iZXJzLlxuICAgICAgICB0aGlzLmVudGl0aWVzLnNwbGljZSh0aGlzLmVudGl0aWVzLmZpbmRJbmRleChlID0+IGVbdGhpcy5pZEtleV0gPT09IGVudGl0eVt0aGlzLmlkS2V5XSksIDEpO1xuICAgICAgICB0aGlzLmVudGl0aWVzU3ViamVjdC5uZXh0KHRoaXMuZW50aXRpZXMpO1xuICAgIH1cbn0iXX0=