@cleavelandprice/ngx-lib 3.14.2 → 3.14.3

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 (74) hide show
  1. package/README.md +5 -5
  2. package/active-directory/gui/components/user-form-field/user-form-field.component.d.ts +3 -3
  3. package/authentication/token/gui/components/login/login.component.d.ts +2 -2
  4. package/dialog/components/base/base.component.d.ts +2 -2
  5. package/esm2022/active-directory/active-directory.module.mjs +4 -4
  6. package/esm2022/active-directory/gui/components/user-chooser/user-chooser.component.mjs +5 -5
  7. package/esm2022/active-directory/gui/components/user-form-field/user-form-field.component.mjs +5 -5
  8. package/esm2022/active-directory/gui/gui.module.mjs +5 -5
  9. package/esm2022/active-directory/services/active-directory.service.mjs +3 -3
  10. package/esm2022/authentication/authentication.base.module.mjs +4 -4
  11. package/esm2022/authentication/object/object.module.mjs +4 -4
  12. package/esm2022/authentication/object/services/authentication.service.mjs +3 -3
  13. package/esm2022/authentication/token/gui/components/login/login.component.mjs +5 -5
  14. package/esm2022/authentication/token/gui/components/login-form/login-form.component.mjs +5 -5
  15. package/esm2022/authentication/token/gui/services/authentication.service.mjs +3 -3
  16. package/esm2022/authentication/token/gui/token-gui.module.mjs +4 -4
  17. package/esm2022/authentication/token/services/authentication.service.mjs +3 -3
  18. package/esm2022/authentication/token/token.module.mjs +4 -4
  19. package/esm2022/dialog/components/base/base.component.mjs +5 -5
  20. package/esm2022/dialog/components/choice/choice.component.mjs +5 -5
  21. package/esm2022/dialog/components/confirmation/confirmation.component.mjs +5 -5
  22. package/esm2022/dialog/components/input/input.component.mjs +5 -5
  23. package/esm2022/dialog/components/message/message.component.mjs +5 -5
  24. package/esm2022/dialog/dialog.module.mjs +5 -5
  25. package/esm2022/lib/ngx-lib.module.mjs +4 -4
  26. package/esm2022/lib/services/app-path-config.service.mjs +3 -3
  27. package/esm2022/msgraph/msgraph.module.mjs +5 -5
  28. package/esm2022/quill/components/editor/editor.component.mjs +6 -6
  29. package/esm2022/quill/components/raw/raw.component.mjs +5 -5
  30. package/esm2022/quill/mention/components/editor/editor.component.mjs +6 -6
  31. package/esm2022/quill/mention/quill-mention.module.mjs +4 -4
  32. package/esm2022/quill/quill.module.mjs +4 -4
  33. package/esm2022/sharepoint/components/user-photo/user-photo.component.mjs +5 -5
  34. package/esm2022/sharepoint/pipes/user-photo-url.pipe.mjs +4 -4
  35. package/esm2022/sharepoint/services/sharepoint.service.mjs +3 -3
  36. package/esm2022/sharepoint/sharepoint.module.mjs +4 -4
  37. package/esm2022/table/components/table/table.component.mjs +3 -3
  38. package/esm2022/table/table.module.mjs +4 -4
  39. package/esm2022/upload/components/upload/upload.component.mjs +3 -3
  40. package/esm2022/upload/components/upload-dialog/upload-dialog.component.mjs +5 -5
  41. package/esm2022/upload/services/upload.service.mjs +3 -3
  42. package/esm2022/upload/upload.module.mjs +4 -4
  43. package/esm2022/url-utilities/pipes/safe-resource-url.pipe.mjs +4 -4
  44. package/esm2022/url-utilities/pipes/safe-url.pipe.mjs +4 -4
  45. package/esm2022/url-utilities/pipes/uri-scheme.pipe.mjs +4 -4
  46. package/esm2022/url-utilities/url-utilities.module.mjs +5 -5
  47. package/fesm2022/cleavelandprice-ngx-lib-active-directory-gui.mjs +12 -12
  48. package/fesm2022/cleavelandprice-ngx-lib-active-directory-gui.mjs.map +1 -1
  49. package/fesm2022/cleavelandprice-ngx-lib-active-directory.mjs +7 -7
  50. package/fesm2022/cleavelandprice-ngx-lib-authentication-object.mjs +7 -7
  51. package/fesm2022/cleavelandprice-ngx-lib-authentication-token-gui.mjs +15 -15
  52. package/fesm2022/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -1
  53. package/fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs +7 -7
  54. package/fesm2022/cleavelandprice-ngx-lib-authentication.mjs +4 -4
  55. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs +24 -24
  56. package/fesm2022/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
  57. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs +4 -4
  58. package/fesm2022/cleavelandprice-ngx-lib-msgraph.mjs.map +1 -1
  59. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs +9 -9
  60. package/fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs.map +1 -1
  61. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs +13 -13
  62. package/fesm2022/cleavelandprice-ngx-lib-quill.mjs.map +1 -1
  63. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs +14 -14
  64. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  65. package/fesm2022/cleavelandprice-ngx-lib-table.mjs +7 -7
  66. package/fesm2022/cleavelandprice-ngx-lib-table.mjs.map +1 -1
  67. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs +14 -14
  68. package/fesm2022/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  69. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs +13 -13
  70. package/fesm2022/cleavelandprice-ngx-lib-url-utilities.mjs.map +1 -1
  71. package/fesm2022/cleavelandprice-ngx-lib.mjs +7 -7
  72. package/package.json +22 -22
  73. package/quill/mention/components/editor/editor.component.d.ts +4 -4
  74. package/sharepoint/components/user-photo/user-photo.component.d.ts +4 -4
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # NgxLib
2
-
3
- ## Description
4
- **NgxLib** is an Angular library that contains standard functionality utilized in Cleaveland/Price applications.
5
-
1
+ # NgxLib
2
+
3
+ ## Description
4
+ **NgxLib** is an Angular library that contains standard functionality utilized in Cleaveland/Price applications.
5
+
6
6
  All documentation can be found at the project's [Github repository](https://github.com/cleavelandprice/ngx-lib).
@@ -9,9 +9,9 @@ export declare class UserFormFieldComponent implements OnInit {
9
9
  private sharePointService;
10
10
  usersSelected: EventEmitter<string | string[]>;
11
11
  userUnSelected: EventEmitter<string>;
12
- placeholder: import("@angular/core").InputSignal<string, string>;
13
- clickable: import("@angular/core").InputSignal<boolean, boolean>;
14
- userChooserData: import("@angular/core").InputSignal<UserChooserData, UserChooserData>;
12
+ placeholder: import("@angular/core").InputSignal<string>;
13
+ clickable: import("@angular/core").InputSignal<boolean>;
14
+ userChooserData: import("@angular/core").InputSignal<UserChooserData>;
15
15
  _userChooserData: UserChooserData;
16
16
  accountNames: string[];
17
17
  users?: User[];
@@ -3,8 +3,8 @@ import * as i0 from "@angular/core";
3
3
  export declare class LoginComponent {
4
4
  private dialog;
5
5
  authenticationService: AuthenticationService;
6
- adminGroup: import("@angular/core").InputSignal<string | undefined, string | undefined>;
7
- additionalInfo: import("@angular/core").InputSignal<string, string>;
6
+ adminGroup: import("@angular/core").InputSignal<string | undefined>;
7
+ additionalInfo: import("@angular/core").InputSignal<string>;
8
8
  login(): void;
9
9
  confirmLogout(): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<LoginComponent, never>;
@@ -6,8 +6,8 @@ import * as i0 from "@angular/core";
6
6
  export declare class BaseComponent implements OnInit {
7
7
  #private;
8
8
  DialogType: typeof DialogType;
9
- dialogType: import("@angular/core").InputSignal<DialogType, DialogType>;
10
- data: import("@angular/core").InputSignal<DialogBaseData, DialogBaseData>;
9
+ dialogType: import("@angular/core").InputSignal<DialogType>;
10
+ data: import("@angular/core").InputSignal<DialogBaseData>;
11
11
  closed: EventEmitter<any>;
12
12
  ConfirmationDialogMode: typeof ConfirmationDialogMode;
13
13
  userInput?: string;
@@ -18,11 +18,11 @@ export class ActiveDirectoryModule {
18
18
  throw new Error('ActiveDirectoryModule is already loaded. Import it in the AppModule only');
19
19
  }
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryModule, deps: [{ token: ActiveDirectoryModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
22
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryModule, imports: [CommonModule] }); }
23
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryModule, imports: [CommonModule] }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryModule, deps: [{ token: ActiveDirectoryModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
22
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryModule, imports: [CommonModule] }); }
23
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryModule, imports: [CommonModule] }); }
24
24
  }
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryModule, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryModule, decorators: [{
26
26
  type: NgModule,
27
27
  args: [{
28
28
  declarations: [],
@@ -377,12 +377,12 @@ export class UserChooserComponent {
377
377
  .join('\n') :
378
378
  '';
379
379
  }
380
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UserChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
381
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: UserChooserComponent, selector: "ng-component", viewQueries: [{ propertyName: "selectionList", first: true, predicate: MatSelectionList, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<div id=\"dialog-title\">\r\n <h2 mat-dialog-title>{{ _data.title }}</h2>\r\n\r\n <div id=\"num-selected\">\r\n {{ selectedOptions.length }} selected\r\n </div>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n @if (dataSource && photos) {\r\n <form [formGroup]=\"filterForm\">\r\n @if (dataSource) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\r\n @if (filterForm.value.filter) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </form>\r\n <mat-selection-list [multiple]=\"isMultiMode\"\r\n (selectionChange)=\"listSelectionChanged($event.options)\">\r\n @for (user of dataSource?.filteredData; track user) {\r\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\r\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\r\n @if (getPhoto(user)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\r\n } @else {\r\n <mat-icon matListItemAvatar class=\"no-photo\"\r\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\r\n }\r\n <div class=\"user\">\r\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\r\n {{ user.displayName }}\r\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\r\n <div>{{ castUser(user).telephoneNumber }}</div>\r\n }\r\n </div>\r\n @if (isUser(user)) {\r\n <div>{{ castUser(user).department }}</div>\r\n <div class=\"title\">{{ castUser(user).title }}</div>\r\n }\r\n </div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n } @else {\r\n <div>\r\n <mat-spinner [diameter]=\"50\"/>\r\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n @if (dataSource && photos) {\r\n @if (selectedOptions.length) {\r\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\r\n Hide Unselected\r\n </mat-slide-toggle>\r\n }\r\n @if (isMultiMode) {\r\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\r\n >\r\n <mat-icon fontIcon=\"select_all\"/>\r\n <span class=\"hide-mobile\">Select All</span>\r\n </button>\r\n }\r\n @if (isMultiMode && selectedOptions.length) {\r\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\r\n >\r\n <mat-icon fontIcon=\"clear_all\"/>\r\n <span class=\"hide-mobile\">Clear All</span>\r\n </button>\r\n }\r\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\r\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\r\n [disabled]=\"!selectedOptions.length\">\r\n <mat-icon fontIcon=\"check\"/>\r\n <span class=\"hide-mobile\">Ok</span>\r\n </button>\r\n }\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\r\n <mat-icon fontIcon=\"close\"/>\r\n <span class=\"hide-mobile\">Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width:801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.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: i7.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i7.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i7.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
380
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
381
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: UserChooserComponent, selector: "ng-component", viewQueries: [{ propertyName: "selectionList", first: true, predicate: MatSelectionList, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource?.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width:801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.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: i7.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i7.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i7.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
382
382
  }
383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UserChooserComponent, decorators: [{
383
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserChooserComponent, decorators: [{
384
384
  type: Component,
385
- args: [{ template: "<div id=\"dialog-title\">\r\n <h2 mat-dialog-title>{{ _data.title }}</h2>\r\n\r\n <div id=\"num-selected\">\r\n {{ selectedOptions.length }} selected\r\n </div>\r\n</div>\r\n\r\n<mat-dialog-content>\r\n @if (dataSource && photos) {\r\n <form [formGroup]=\"filterForm\">\r\n @if (dataSource) {\r\n <mat-form-field>\r\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\r\n @if (filterForm.value.filter) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </form>\r\n <mat-selection-list [multiple]=\"isMultiMode\"\r\n (selectionChange)=\"listSelectionChanged($event.options)\">\r\n @for (user of dataSource?.filteredData; track user) {\r\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\r\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\r\n @if (getPhoto(user)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\r\n } @else {\r\n <mat-icon matListItemAvatar class=\"no-photo\"\r\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\r\n }\r\n <div class=\"user\">\r\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\r\n {{ user.displayName }}\r\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\r\n <div>{{ castUser(user).telephoneNumber }}</div>\r\n }\r\n </div>\r\n @if (isUser(user)) {\r\n <div>{{ castUser(user).department }}</div>\r\n <div class=\"title\">{{ castUser(user).title }}</div>\r\n }\r\n </div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n } @else {\r\n <div>\r\n <mat-spinner [diameter]=\"50\"/>\r\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions>\r\n @if (dataSource && photos) {\r\n @if (selectedOptions.length) {\r\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\r\n Hide Unselected\r\n </mat-slide-toggle>\r\n }\r\n @if (isMultiMode) {\r\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\r\n >\r\n <mat-icon fontIcon=\"select_all\"/>\r\n <span class=\"hide-mobile\">Select All</span>\r\n </button>\r\n }\r\n @if (isMultiMode && selectedOptions.length) {\r\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\r\n >\r\n <mat-icon fontIcon=\"clear_all\"/>\r\n <span class=\"hide-mobile\">Clear All</span>\r\n </button>\r\n }\r\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\r\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\r\n [disabled]=\"!selectedOptions.length\">\r\n <mat-icon fontIcon=\"check\"/>\r\n <span class=\"hide-mobile\">Ok</span>\r\n </button>\r\n }\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\r\n <mat-icon fontIcon=\"close\"/>\r\n <span class=\"hide-mobile\">Cancel</span>\r\n </button>\r\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width:801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
385
+ args: [{ template: "<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource?.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["::ng-deep .mat-tooltip{font-size:1em!important;white-space:pre-line}mat-dialog-content{min-width:50vw}#dialog-title{display:flex;justify-content:space-between}#num-selected{margin:1em 1em 0 0}mat-spinner{margin:0 auto}#spinner-message{text-align:center;padding:.5em}mat-form-field{width:100%}.title{font-style:italic;color:#757575}img,.no-photo{width:2rem;height:2rem;font-size:2.3rem!important;border-radius:100%}.hide-mobile{display:none}mat-dialog-actions{display:grid;grid-auto-flow:column;grid-gap:1em;justify-content:center}.user-name{display:flex;justify-content:space-between}.user-name>div:last-child{margin-right:10rem;font-weight:400;font-style:italic;color:#757575}@media (min-width:801px){.user{display:grid;grid-template-columns:1fr 1fr 1fr}.user>div:first-child{font-weight:700}.hide-mobile{display:initial}}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
386
386
  }], propDecorators: { selectionList: [{
387
387
  type: ViewChild,
388
388
  args: [MatSelectionList]
@@ -390,4 +390,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
390
390
  type: ViewChild,
391
391
  args: ['filterInput']
392
392
  }] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBUyxNQUFNLDJDQUEyQyxDQUFDO0FBQzFGLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8sb0JBQW9CO0lB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eEMsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FDbEI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFzQztRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUTtpQkFDVixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDYixJQUFJLENBQUMsTUFBTTtnQkFDVCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNiLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQ3BDLEVBQUUsSUFBSSxDQUNSO2lCQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsQ0FBQztJQUNQLENBQUM7OEdBbGNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG1HQVVwQixnQkFBZ0IsNklDaEM3QixrN0dBMEZxQjs7MkZEcEVSLG9CQUFvQjtrQkFQaEMsU0FBUzs7OEJBaUJxQixhQUFhO3NCQUF6QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRMaXN0T3B0aW9uLCBNYXRTZWxlY3Rpb25MaXN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsIEdyb3VwIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xyXG5pbXBvcnQgeyBQaG90b0l0ZW0sIFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQnO1xyXG5cclxuaW1wb3J0IHsgU2VsZWN0YWJsZUdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VsZWN0YWJsZS1ncm91cCc7XHJcbmltcG9ydCB7IFNlbGVjdGFibGVVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VsZWN0YWJsZS11c2VyJztcclxuaW1wb3J0IHsgVXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xyXG5pbXBvcnQgeyBVc2VyQ2hvb3Nlck1vZGUgfSBmcm9tICcuLi8uLi9wdWJsaWNfYXBpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWNob29zZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5jc3MnLFxyXG4gICAgJy4uLy4uLy4uLy4uLy4uL3N0eWxlcy9tYXQtaWNvbi5jc3MnXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlckNob29zZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBTZXJ2aWNlc1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxVc2VyQ2hvb3NlckNvbXBvbmVudD4pO1xyXG4gIHByaXZhdGUgYWN0aXZlRGlyZWN0b3J5U2VydmljZSA9IGluamVjdChBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlKTtcclxuICBwcml2YXRlIHNoYXJlUG9pbnRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlKTtcclxuICBkYXRhID0gaW5qZWN0PFVzZXJDaG9vc2VyRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcclxuICBfZGF0YSA9IHsuLi5uZXcgVXNlckNob29zZXJEYXRhKCksIC4uLnRoaXMuZGF0YX07XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgXHJcbiAgLy8jcmVnaW9uIEZpZWxkc1xyXG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0aW9uTGlzdCkgc2VsZWN0aW9uTGlzdD86IE1hdFNlbGVjdGlvbkxpc3Q7XHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVySW5wdXQnKSBmaWx0ZXJJbnB1dD86IEVsZW1lbnRSZWY7XHJcbiAgLy8vL2ZpbHRlcklucHV0Rm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICBmaWx0ZXI6IG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgfSk7XHJcblxyXG4gIGRhdGFTb3VyY2U/OiBNYXRUYWJsZURhdGFTb3VyY2U8U2VsZWN0YWJsZVVzZXIgfCBTZWxlY3RhYmxlR3JvdXA+O1xyXG4gIHBob3Rvcz86IFBob3RvSXRlbVtdO1xyXG4gIGdyb3Vwcz86IEdyb3VwW107IC8vIE1heSBvciBtYXkgbm90IGdldCBwb3B1bGF0ZWQsIGRlcGVuZGluZyBvbiBjb25maWcgZGF0YSBzZW50IGluXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcbiAgZ2V0IGlzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLk11bHRpcGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkT3B0aW9ucygpOiBNYXRMaXN0T3B0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy5maWx0ZXIobyA9PiBvLnNlbGVjdGVkKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFVzZXJzKCk6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maWx0ZXIoZCA9PiBkLnNlbGVjdGVkKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgYWRHcm91cHNOZWVkZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBJZiBhbnkgYXJlIHRoZXNlIGFyZSB0cnVlLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCBBRCBncm91cHMgZm9yIHVzZSBsYXRlclxyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzIHx8XHJcbiAgICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucy5ncm91cHMubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZ3JvdXBzLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zLmdyb3Vwcy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucy5ncm91cE1lbWJlcnNoaXAgfHxcclxuICAgICAgKHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDA7IC8vIGRlYnVnXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIHRoaXMubGlzdGVuRm9yRmlsdGVyQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKC8qdGhpcy5maWx0ZXJJbnB1dEZvY3VzZWQgfHwgKi8hdGhpcy5maWx0ZXJJbnB1dCkge1xyXG4gICAgICAvLyBDb250cm9sIG5vdCByZWFkeSB5ZXQsIG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gZm9jdXNcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vLy90aGlzLmZpbHRlcklucHV0Rm9jdXNlZCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRXZlbnRzXHJcbiAgIGxpc3RTZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbnM6IE1hdExpc3RPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLlNpbmdsZSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5fZGF0YS5jbG9zZVdoZW5TZWxlY3Rpb25NYWRlXHJcbiAgICAgICkge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcHRpb25TZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbjogTWF0TGlzdE9wdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YVxyXG4gICAgICAuZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gKG9wdGlvbi52YWx1ZSBhcyBTZWxlY3RhYmxlVXNlcikuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgaWYgKHVzZXIpIHtcclxuICAgICAgdXNlci5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVVbnNlbGVjdGVkQ2hhbmdlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnNldFZhbHVlKHNlbGVjdGVkID8gJ3tzZWxlY3RlZDp0cnVlfScgOiBudWxsKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uTGlzdD8uc2VsZWN0QWxsKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucykge1xyXG4gICAgICB0aGlzLmxpc3RTZWxlY3Rpb25DaGFuZ2VkKHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy50b0FycmF5KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVzZWxlY3RBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkxpc3Q/LmRlc2VsZWN0QWxsKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gVXRpbGl0aWVzXHJcbiAgaXNVc2VyKHVzZXJPckdyb3VwOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICd0aXRsZScgaW4gdXNlck9yR3JvdXA7XHJcbiAgfVxyXG4gIGNhc3RVc2VyKHVzZXJPckdyb3VwOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IFNlbGVjdGFibGVVc2VyIHtcclxuICAgIHJldHVybiB1c2VyT3JHcm91cCBhcyBTZWxlY3RhYmxlVXNlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXHJcbiAgICAgIHRoaXMuX2RhdGEudXNlcnMgP1xyXG4gICAgICAgIC8vIFVzZXJzIHdlcmUgcGFzc2VkIGluXHJcbiAgICAgICAgb2YodGhpcy5fZGF0YS51c2VycykgOlxyXG4gICAgICAgIC8vIFVzZXJzIG5lZWQgdG8gYmUgcmV0cmlldmVkXHJcbiAgICAgICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldFVzZXJzKGZhbHNlLCB0aGlzLl9kYXRhLmluY2x1ZGVEaXNhYmxlZFVzZXJzLCB0aGlzLl9kYXRhLnBhcmVudE91KSxcclxuXHJcbiAgICAgIHRoaXMuX2RhdGEucGhvdG9zID9cclxuICAgICAgICAvLyBQaG90b3Mgd2VyZSBwYXNzZWQgaW5cclxuICAgICAgICBvZih0aGlzLl9kYXRhLnBob3RvcykgOlxyXG4gICAgICAgIC8vIFBob3RvcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxyXG4gICAgICAgIHRoaXMuc2hhcmVQb2ludFNlcnZpY2UuZ2V0UGhvdG9zKClcclxuICAgIF07XHJcblxyXG4gICAgLy8gRG8gd2UgbmVlZCBBRCBncm91cHM/XHJcbiAgICBpZiAodGhpcy5hZEdyb3Vwc05lZWRlZCkge1xyXG4gICAgICB0aGlzLl9kYXRhLmdyb3VwcyA/XHJcbiAgICAgICAgLy8gR3JvdXBzIHdlcmUgcGFzc2VkIGluXHJcbiAgICAgICAgb2YodGhpcy5fZGF0YS5ncm91cHMpIDpcclxuICAgICAgICAvLyBHcm91cHMgbmVlZCB0byBiZSByZXRyaWV2ZWRcclxuICAgICAgICBkYXRhT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuZ2V0R3JvdXBzKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmb3JrSm9pbihkYXRhT2JzZXJ2YWJsZXMpXHJcbiAgICAgIC8vLnN1YnNjcmliZSgoW3VzZXJzLCBwaG90b3NdKSA9PiB7XHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgLy8gTmVlZCBncm91cHMgaW4gcGxhY2UgYmVmb3JlIHdlIGhhbmRsZSBleGNsdXNpb25zL2luY2x1c2lvbnMvcHJlLXNlbGVjdGlvbnNcclxuICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuYWRHcm91cHNOZWVkZWQgPyBkYXRhWzJdIDogbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IHVzZXJzID0gZGF0YVswXSBhcyBTZWxlY3RhYmxlVXNlcltdO1xyXG4gICAgICAgIHVzZXJzLmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZmFsc2UpOyAvLyBJbiBjYXNlIGV4aXN0aW5nIGRhdGEgd2FzIHJlLXVzZWRcclxuICAgICAgICB1c2VycyA9IHRoaXMuaW5jbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XHJcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcclxuICAgICAgICB1c2VycyA9IHRoaXMuaW5jbHVkZVVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcclxuICAgICAgICB1c2VycyA9IHRoaXMuaW5jbHVkZVVzZXJzQnlUaXRsZSh1c2Vycyk7XHJcblxyXG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcclxuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlHcm91cE5hbWUodXNlcnMpO1xyXG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xyXG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzKTtcclxuXHJcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XHJcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlHcm91cE5hbWUodXNlcnMpO1xyXG4gICAgICAgIHVzZXJzID0gdGhpcy5wcmVTZWxlY3RVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XHJcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlUaXRsZSh1c2Vycyk7XHJcblxyXG4gICAgICAgIC8vIGRlYnVnXHJcbiAgICAgICAgY29uc3QgdXNlcnNBbmRHcm91cHM6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSA9IFtcclxuICAgICAgICAgIC4uLnVzZXJzXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5fZGF0YS5zZWxlY3RhYmxlR3JvdXBOYW1lc1xyXG4gICAgICAgICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMhLmZpbmQoZyA9PiBnLmRpc3BsYXlOYW1lID09PSBncm91cE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHVzZXJzQW5kR3JvdXBzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh1c2Vyc0FuZEdyb3Vwcyk7XHJcbiAgICAgIFxyXG4gICAgICAgIHRoaXMucGhvdG9zID0gZGF0YVsxXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJQcmVkaWNhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJzKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFVzZXJzXHJcbiAgICAgIC5tYXAodSA9PiB0aGlzLl9kYXRhLnJldHVyblVzZXJPYmplY3RzID8gdSA6IHUuc0FNQWNjb3VudE5hbWUpO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuX2RhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLk11bHRpcGxlID9cclxuICAgICAgdmFsdWUgOlxyXG4gICAgICB2YWx1ZVswXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFBob3RvKHVzZXI6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZXIodXNlcikpIHsgcmV0dXJuOyB9XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLnBob3Rvcz8uZmluZChwID0+XHJcbiAgICAgIChwLmVtcGxveWVlTnVtYmVyICYmIHAuZW1wbG95ZWVOdW1iZXIudG9TdHJpbmcoKSA9PT0gKHVzZXIgYXMgU2VsZWN0YWJsZVVzZXIpLmVtcGxveWVlTnVtYmVyKSB8fFxyXG4gICAgICBwLmFjY291bnROYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgfHxcclxuICAgICAgcC5kaXNwbGF5TmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgIHAudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgKT8uZW5jb2RlZEFic1VybDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBFeGNsdXNpb25zIC0gd29uJ3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2UgYXQgYWxsXHJcbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XHJcbiAgICB0aGlzLl9kYXRhLmV4Y2x1c2lvbnMuYWNjb3VudE5hbWVzXHJcbiAgICAgIC5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHVzZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zLmdyb3Vwc1xyXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmZpbmQoZyA9PiBnLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZ3JvdXBOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZ3JvdXAubWVtYmVyLmZvckVhY2goZ3JvdXBNZW1iZXJEbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdXNlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4Y2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zLmRlcGFydG1lbnRzXHJcbiAgICAgIC5mb3JFYWNoKGRlcGFydG1lbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZih1c2VyKTtcclxuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zLnRpdGxlc1xyXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXhjbHVkZWRVc2VycyA9IHVzZXJzLmZpbHRlcih1ID0+IHUudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHRpdGxlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZih1c2VyKTtcclxuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbmNsdXNpb25zIC0gb25seSB0aGVzZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkYXRhU291cmNlXHJcbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XHJcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cclxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLmFjY291bnROYW1lcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gYWNjb3VudCBpbmNsdXNpb25zIHNwZWNpZmllZFxyXG5cclxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLmFjY291bnROYW1lcy5maW5kKGFjY291bnROYW1lID0+XHJcbiAgICAgICAgYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdXNlci5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcclxuICAgIHJldHVybiB1c2Vycy5maWx0ZXIodXNlciA9PlxyXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZGVwYXJ0bWVudHMubGVuZ3RoID09PSAwIHx8IC8vIE5vIGRlcGFydG1lbnQgaW5jbHVzaW9ucyBzcGVjaWZpZWRcclxuXHJcbiAgICAgIHRoaXMuX2RhdGEuaW5jbHVzaW9ucy5kZXBhcnRtZW50cy5maW5kKGRlcGFydG1lbnQgPT5cclxuICAgICAgICBkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKVxyXG4gICAgICApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5jbHVkZVVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgcmV0dXJuIHVzZXJzLmZpbHRlcih1c2VyID0+XHJcbiAgICAgIHRoaXMuX2RhdGEuaW5jbHVzaW9ucy50aXRsZXMubGVuZ3RoID09PSAwIHx8IC8vIE5vIHRpdGxlIGluY2x1c2lvbnMgc3BlY2lmaWVkXHJcblxyXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMudGl0bGVzLmZpbmQodGl0bGUgPT5cclxuICAgICAgICB0aXRsZS50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnRpdGxlPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgaWYgKCF0aGlzLl9kYXRhLmluY2x1c2lvbnMuZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdXNlcnM7IC8vIE5vIGdyb3VwIGluY2x1c2lvbnMgc3BlY2lmaWVkXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlYXRpbmcgYSBiaXQgYW5kIGxldmVyYWdpbmcgdGhlICdzZWxlY3RlZCcgcHJvcGVydHkgdG8ga2VlcCB0cmFjayBvZiB3aG8gc2hvdWxkIGJlIGluY2x1ZGVkXHJcbiAgICAvLyBTaW5jZSBpbmNsdXNpb25zIGhhcHBlbiBiZWZvciBwcmUtc2VsZWN0aW9ucywgd2UgY2FuIGRvIHRoYXQsIGFzIGxvbmcgYXMgd2Ugc2V0ICdzZWxlY3RlZCcgYmFjayB0byBmYWxzZSB3aGVuIHdlJ3JlIGRvbmVcclxuICAgIHRoaXMuX2RhdGEuaW5jbHVzaW9ucy5ncm91cHNcclxuICAgICAgLmZvckVhY2goZ3JvdXBOYW1lID0+IHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICBpZiAoIWdyb3VwKSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICB1c2Vyc1xyXG4gICAgICAgICAgLmZpbHRlcih1c2VyID0+XHJcbiAgICAgICAgICAgICAgZ3JvdXAubWVtYmVyLmZpbmQoZ3JvdXBNZW1iZXJEbiA9PiBncm91cE1lbWJlckRuID09PSB1c2VyLmRpc3Rpbmd1aXNoZWROYW1lKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFsbCBvZiB0aGUgYXBwcm9wcmlhdGUgdXNlcnMgc2hvdWxkIGhhdmUgJ3NlbGVjdGVkJyBzZXQgdG8gdHJ1ZVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRVc2VycyA9IHVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuc2VsZWN0ZWQpOyAvLyBTdWJzZXQgb2YgdGhlIG9yaWdpbmFsIGxpc3RcclxuICAgIC8vIFJlc2V0ICdzZWxlY3RlZCcgdG8gZmFsc2UsIGFuZCByZXR1cm5cclxuICAgIHNlbGVjdGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRVc2VycztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiAgUHJlLVNlbGVjdGlvbnNcclxuICBwcml2YXRlIHByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zLmFjY291bnROYW1lc1xyXG4gICAgICAuZm9yRWFjaChhY2NvdW50TmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgdXNlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcclxuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucy5kZXBhcnRtZW50c1xyXG4gICAgICAuZm9yRWFjaChkZXBhcnRtZW50ID0+XHJcbiAgICAgICAgdXNlcnNcclxuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXHJcbiAgICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHVzZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5VGl0bGUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcclxuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucy50aXRsZXNcclxuICAgICAgLmZvckVhY2godGl0bGUgPT5cclxuICAgICAgICB1c2Vyc1xyXG4gICAgICAgICAgLmZpbHRlcih1ID0+IHUudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHRpdGxlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKVxyXG4gICAgICApO1xyXG5cclxuICAgIHJldHVybiB1c2VycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xyXG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zLmdyb3Vwc1xyXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmZpbmQoZyA9PiBnLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZ3JvdXBOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIGdyb3VwLm1lbWJlci5mb3JFYWNoKGdyb3VwTWVtYmVyRG4gPT4ge1xyXG4gICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cE1lbWJlckRuKTtcclxuICAgICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgICB1c2VyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHVzZXJzO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuICBcclxuICBwcml2YXRlIHNldEZpbHRlclByZWRpY2F0ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKHVzZXI6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCksIGZpbHRlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChmaWx0ZXIgPT09ICd7c2VsZWN0ZWQ6dHJ1ZX0nKSB7XHJcbiAgICAgICAgcmV0dXJuIHVzZXIuc2VsZWN0ZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGZpbHRlciwgJ2knKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZVxyXG4gICAgICAgIGxldCBtYXRjaCA9IGZhbHNlOyAvLyBUaGUgZW5kIHJlc3VsdCAtIHdoZXRoZXIgb3Igbm90IGEgZW1wbG95ZWUgbWF0Y2hlcyB0aGUgZmlsdGVyXHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlclByb3BlcnRpZXMgPSBbICdkaXNwbGF5TmFtZScgXTtcclxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmFjY291bnROYW1lKSB7XHJcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3NBTUFjY291bnROYW1lJylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucy50aXRsZSkge1xyXG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCd0aXRsZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmRlcGFydG1lbnQpIHtcclxuICAgICAgICAgIGZpbHRlclByb3BlcnRpZXMucHVzaCgnZGVwYXJ0bWVudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLnBob25lTnVtYmVyKSB7XHJcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RlbGVwaG9uZU51bWJlcicpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICAvLyBNYXRjaCBvbiB0aGUgcHJvcGVydGllcyBjb25maWd1cmVkIGFib3ZlXHJcbiAgICAgICAgZmlsdGVyUHJvcGVydGllc1xyXG4gICAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGlmICh1c2VyW2ZpZWxkXSAmJiB1c2VyW2ZpZWxkXS5tYXRjaChyZWdleCkpIHtcclxuICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgIC8vIE1hdGNoIG9uIGdyb3VwIG1lbWJlcnNoaXAgKGdyb3VwIG5hbWUpXHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucy5ncm91cE1lbWJlcnNoaXApIHtcclxuICAgICAgICAgIHVzZXIubWVtYmVyT2YuZm9yRWFjaChncm91cERuID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChncm91cCA9PiBncm91cC5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBEbiAmJiBncm91cC5uYW1lLm1hdGNoKHJlZ2V4KSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JGaWx0ZXJDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhU291cmNlIS5maWx0ZXIgPSB0aGlzLmZpbHRlckZvcm0udmFsdWUuZmlsdGVyPy50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICB0b29sdGlwKHVzZXI6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwcyA/XHJcbiAgICAgIHVzZXIubWVtYmVyT2ZcclxuICAgICAgICAubWFwKGdyb3VwRG4gPT5cclxuICAgICAgICAgIHRoaXMuZ3JvdXBzXHJcbiAgICAgICAgICAgID8uZmluZChncm91cCA9PlxyXG4gICAgICAgICAgICAgIGdyb3VwLmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cERuXHJcbiAgICAgICAgICAgICk/Lm5hbWVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhISA+IGIhID8gMSA6IC0xKVxyXG4gICAgICAgICAgLmpvaW4oJ1xcbicpIDpcclxuICAgICAgJyc7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXYgaWQ9XCJkaWFsb2ctdGl0bGVcIj5cclxuICA8aDIgbWF0LWRpYWxvZy10aXRsZT57eyBfZGF0YS50aXRsZSB9fTwvaDI+XHJcblxyXG4gIDxkaXYgaWQ9XCJudW0tc2VsZWN0ZWRcIj5cclxuICAgIHt7IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfX0gc2VsZWN0ZWRcclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIEBpZiAoZGF0YVNvdXJjZSAmJiBwaG90b3MpIHtcclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxyXG4gICAgICBAaWYgKGRhdGFTb3VyY2UpIHtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJcIiAjZmlsdGVySW5wdXQ+XHJcbiAgICAgICAgICBAaWYgKGZpbHRlckZvcm0udmFsdWUuZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwiZmlsdGVyRm9ybS5nZXQoJ2ZpbHRlcicpPy5zZXRWYWx1ZSgnJylcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiLz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgfVxyXG4gICAgPC9mb3JtPlxyXG4gICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBbbXVsdGlwbGVdPVwiaXNNdWx0aU1vZGVcIlxyXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImxpc3RTZWxlY3Rpb25DaGFuZ2VkKCRldmVudC5vcHRpb25zKVwiPlxyXG4gICAgICBAZm9yICh1c2VyIG9mIGRhdGFTb3VyY2U/LmZpbHRlcmVkRGF0YTsgdHJhY2sgdXNlcikge1xyXG4gICAgICAgIDxtYXQtbGlzdC1vcHRpb24gW3ZhbHVlXT1cInVzZXJcIiBbc2VsZWN0ZWRdPVwidXNlci5zZWxlY3RlZFwiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb24pXCIgI29wdGlvbj5cclxuICAgICAgICAgIEBpZiAoZ2V0UGhvdG8odXNlcikpIHtcclxuICAgICAgICAgICAgPGltZyBtYXRMaXN0SXRlbUF2YXRhciBhbHQ9XCJcIiBbc3JjXT1cImdldFBob3RvKHVzZXIpXCI+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdExpc3RJdGVtQXZhdGFyIGNsYXNzPVwibm8tcGhvdG9cIlxyXG4gICAgICAgICAgICAgIFtmb250SWNvbl09XCJpc1VzZXIodXNlcikgPyAnYWNjb3VudF9jaXJjbGUnIDogJ2dyb3VwJ1wiLz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW21hdFRvb2x0aXBdPVwidG9vbHRpcCh1c2VyKVwiIGNsYXNzPVwidXNlci1uYW1lXCI+XHJcbiAgICAgICAgICAgICAge3sgdXNlci5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgIEBpZiAoaXNVc2VyKHVzZXIpICYmIF9kYXRhLnNob3dQaG9uZSAmJiBjYXN0VXNlcih1c2VyKS50ZWxlcGhvbmVOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2FzdFVzZXIodXNlcikudGVsZXBob25lTnVtYmVyIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgQGlmIChpc1VzZXIodXNlcikpIHtcclxuICAgICAgICAgICAgICA8ZGl2Pnt7IGNhc3RVc2VyKHVzZXIpLmRlcGFydG1lbnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyBjYXN0VXNlcih1c2VyKS50aXRsZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIvPlxyXG4gICAgICA8aDIgaWQ9XCJzcGlubmVyLW1lc3NhZ2VcIj5HZXR0aW5nIHVzZXJzIGFuZCBwaG90b3MuLi48L2gyPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcbjxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgQGlmIChkYXRhU291cmNlICYmIHBob3Rvcykge1xyXG4gICAgQGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIChjaGFuZ2UpPVwiaGlkZVVuc2VsZWN0ZWRDaGFuZ2VkKCRldmVudC5jaGVja2VkKVwiPlxyXG4gICAgICAgIEhpZGUgVW5zZWxlY3RlZFxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICB9XHJcbiAgICBAaWYgKGlzTXVsdGlNb2RlKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2VsZWN0X2FsbFwiLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+U2VsZWN0IEFsbDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKGlzTXVsdGlNb2RlICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsZWFyX2FsbFwiLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2xlYXIgQWxsPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoaXNNdWx0aU1vZGUgfHwgIV9kYXRhLmNsb3NlV2hlblNlbGVjdGlvbk1hZGUpIHtcclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiIG1hdFRvb2x0aXA9XCJBY2NlcHQgeW91ciBzZWxlY3Rpb25cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNoZWNrXCIvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5Pazwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIG1hdC1kaWFsb2ctY2xvc2UgbWF0VG9vbHRpcD1cIkNsb3NlIHRoaXMgd2luZG93XCI+XHJcbiAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiLz5cclxuICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5DYW5jZWw8L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBUyxNQUFNLDJDQUEyQyxDQUFDO0FBQzFGLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8sb0JBQW9CO0lB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eEMsSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FDbEI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFzQztRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUTtpQkFDVixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDYixJQUFJLENBQUMsTUFBTTtnQkFDVCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNiLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQ3BDLEVBQUUsSUFBSSxDQUNSO2lCQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsQ0FBQztJQUNQLENBQUM7OEdBbGNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG1HQVVwQixnQkFBZ0IsNklDaEM3Qiw4dkdBMEZxQjs7MkZEcEVSLG9CQUFvQjtrQkFQaEMsU0FBUzs7OEJBaUJxQixhQUFhO3NCQUF6QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRMaXN0T3B0aW9uLCBNYXRTZWxlY3Rpb25MaXN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLCBHcm91cCB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5JztcbmltcG9ydCB7IFBob3RvSXRlbSwgU2hhcmVQb2ludFNlcnZpY2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludCc7XG5cbmltcG9ydCB7IFNlbGVjdGFibGVHcm91cCB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGFibGUtZ3JvdXAnO1xuaW1wb3J0IHsgU2VsZWN0YWJsZVVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3RhYmxlLXVzZXInO1xuaW1wb3J0IHsgVXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSAnLi4vLi4vcHVibGljX2FwaSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5jc3MnLFxuICAgICcuLi8uLi8uLi8uLi8uLi9zdHlsZXMvbWF0LWljb24uY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJDaG9vc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgLy8jcmVnaW9uIFNlcnZpY2VzXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxVc2VyQ2hvb3NlckNvbXBvbmVudD4pO1xuICBwcml2YXRlIGFjdGl2ZURpcmVjdG9yeVNlcnZpY2UgPSBpbmplY3QoQWN0aXZlRGlyZWN0b3J5U2VydmljZSk7XG4gIHByaXZhdGUgc2hhcmVQb2ludFNlcnZpY2UgPSBpbmplY3QoU2hhcmVQb2ludFNlcnZpY2UpO1xuICBkYXRhID0gaW5qZWN0PFVzZXJDaG9vc2VyRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcbiAgX2RhdGEgPSB7Li4ubmV3IFVzZXJDaG9vc2VyRGF0YSgpLCAuLi50aGlzLmRhdGF9O1xuICAvLyNlbmRyZWdpb25cbiAgXG4gIC8vI3JlZ2lvbiBGaWVsZHNcbiAgQFZpZXdDaGlsZChNYXRTZWxlY3Rpb25MaXN0KSBzZWxlY3Rpb25MaXN0PzogTWF0U2VsZWN0aW9uTGlzdDtcbiAgQFZpZXdDaGlsZCgnZmlsdGVySW5wdXQnKSBmaWx0ZXJJbnB1dD86IEVsZW1lbnRSZWY7XG4gIC8vLy9maWx0ZXJJbnB1dEZvY3VzZWQgPSBmYWxzZTtcblxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZmlsdGVyOiBuZXcgRm9ybUNvbnRyb2woKVxuICB9KTtcblxuICBkYXRhU291cmNlPzogTWF0VGFibGVEYXRhU291cmNlPFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwPjtcbiAgcGhvdG9zPzogUGhvdG9JdGVtW107XG4gIGdyb3Vwcz86IEdyb3VwW107IC8vIE1heSBvciBtYXkgbm90IGdldCBwb3B1bGF0ZWQsIGRlcGVuZGluZyBvbiBjb25maWcgZGF0YSBzZW50IGluXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG4gIGdldCBpc011bHRpTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuTXVsdGlwbGU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCk6IE1hdExpc3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy5maWx0ZXIobyA9PiBvLnNlbGVjdGVkKSA/PyBbXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFVzZXJzKCk6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmlsdGVyKGQgPT4gZC5zZWxlY3RlZCkgPz8gW107XG4gIH1cblxuICBnZXQgZmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLmZpbHRlcjtcbiAgfVxuXG4gIGdldCBhZEdyb3Vwc05lZWRlZCgpOiBib29sZWFuIHtcbiAgICAvLyBJZiBhbnkgYXJlIHRoZXNlIGFyZSB0cnVlLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCBBRCBncm91cHMgZm9yIHVzZSBsYXRlclxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwcyB8fFxuICAgICAgdGhpcy5fZGF0YS5leGNsdXNpb25zLmdyb3Vwcy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZ3JvdXBzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucy5ncm91cHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmdyb3VwTWVtYmVyc2hpcCB8fFxuICAgICAgKHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDA7IC8vIGRlYnVnXG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIExpZmVjeWNsZVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldERhdGEoKTtcbiAgICB0aGlzLmxpc3RlbkZvckZpbHRlckNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAoLyp0aGlzLmZpbHRlcklucHV0Rm9jdXNlZCB8fCAqLyF0aGlzLmZpbHRlcklucHV0KSB7XG4gICAgICAvLyBDb250cm9sIG5vdCByZWFkeSB5ZXQsIG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gZm9jdXNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLy8vdGhpcy5maWx0ZXJJbnB1dEZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlsdGVySW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRXZlbnRzXG4gICBsaXN0U2VsZWN0aW9uQ2hhbmdlZChvcHRpb25zOiBNYXRMaXN0T3B0aW9uW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2RhdGEuY2xvc2VXaGVuU2VsZWN0aW9uTWFkZVxuICAgICAgKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb246IE1hdExpc3RPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5kYXRhU291cmNlPy5kYXRhXG4gICAgICAuZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gKG9wdGlvbi52YWx1ZSBhcyBTZWxlY3RhYmxlVXNlcikuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlci5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZDtcbiAgICB9XG4gIH1cblxuICBoaWRlVW5zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUoc2VsZWN0ZWQgPyAne3NlbGVjdGVkOnRydWV9JyA6IG51bGwpO1xuICB9XG5cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdD8uc2VsZWN0QWxsKCk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25MaXN0Py5vcHRpb25zKSB7XG4gICAgICB0aGlzLmxpc3RTZWxlY3Rpb25DaGFuZ2VkKHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdD8uZGVzZWxlY3RBbGwoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gVXRpbGl0aWVzXG4gIGlzVXNlcih1c2VyT3JHcm91cDogU2VsZWN0YWJsZVVzZXIgfCBTZWxlY3RhYmxlR3JvdXApOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ3RpdGxlJyBpbiB1c2VyT3JHcm91cDtcbiAgfVxuICBjYXN0VXNlcih1c2VyT3JHcm91cDogU2VsZWN0YWJsZVVzZXIgfCBTZWxlY3RhYmxlR3JvdXApOiBTZWxlY3RhYmxlVXNlciB7XG4gICAgcmV0dXJuIHVzZXJPckdyb3VwIGFzIFNlbGVjdGFibGVVc2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXG4gICAgICB0aGlzLl9kYXRhLnVzZXJzID9cbiAgICAgICAgLy8gVXNlcnMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fZGF0YS51c2VycykgOlxuICAgICAgICAvLyBVc2VycyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuZ2V0VXNlcnMoZmFsc2UsIHRoaXMuX2RhdGEuaW5jbHVkZURpc2FibGVkVXNlcnMsIHRoaXMuX2RhdGEucGFyZW50T3UpLFxuXG4gICAgICB0aGlzLl9kYXRhLnBob3RvcyA/XG4gICAgICAgIC8vIFBob3RvcyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLl9kYXRhLnBob3RvcykgOlxuICAgICAgICAvLyBQaG90b3MgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy5zaGFyZVBvaW50U2VydmljZS5nZXRQaG90b3MoKVxuICAgIF07XG5cbiAgICAvLyBEbyB3ZSBuZWVkIEFEIGdyb3Vwcz9cbiAgICBpZiAodGhpcy5hZEdyb3Vwc05lZWRlZCkge1xuICAgICAgdGhpcy5fZGF0YS5ncm91cHMgP1xuICAgICAgICAvLyBHcm91cHMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fZGF0YS5ncm91cHMpIDpcbiAgICAgICAgLy8gR3JvdXBzIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIGRhdGFPYnNlcnZhYmxlcy5wdXNoKHRoaXMuYWN0aXZlRGlyZWN0b3J5U2VydmljZS5nZXRHcm91cHMoKSk7XG4gICAgfVxuXG5cbiAgICBmb3JrSm9pbihkYXRhT2JzZXJ2YWJsZXMpXG4gICAgICAvLy5zdWJzY3JpYmUoKFt1c2VycywgcGhvdG9zXSkgPT4ge1xuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgLy8gTmVlZCBncm91cHMgaW4gcGxhY2UgYmVmb3JlIHdlIGhhbmRsZSBleGNsdXNpb25zL2luY2x1c2lvbnMvcHJlLXNlbGVjdGlvbnNcbiAgICAgICAgdGhpcy5ncm91cHMgPSB0aGlzLmFkR3JvdXBzTmVlZGVkID8gZGF0YVsyXSA6IG51bGw7XG5cbiAgICAgICAgbGV0IHVzZXJzID0gZGF0YVswXSBhcyBTZWxlY3RhYmxlVXNlcltdO1xuICAgICAgICB1c2Vycy5mb3JFYWNoKHUgPT4gdS5zZWxlY3RlZCA9IGZhbHNlKTsgLy8gSW4gY2FzZSBleGlzdGluZyBkYXRhIHdhcyByZS11c2VkXG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzKTtcblxuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5wcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgLy8gZGVidWdcbiAgICAgICAgY29uc3QgdXNlcnNBbmRHcm91cHM6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSA9IFtcbiAgICAgICAgICAuLi51c2Vyc1xuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLl9kYXRhLnNlbGVjdGFibGVHcm91cE5hbWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhLnNlbGVjdGFibGVHcm91cE5hbWVzXG4gICAgICAgICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzIS5maW5kKGcgPT4gZy5kaXNwbGF5TmFtZSA9PT0gZ3JvdXBOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICB1c2Vyc0FuZEdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh1c2Vyc0FuZEdyb3Vwcyk7XG4gICAgICBcbiAgICAgICAgdGhpcy5waG90b3MgPSBkYXRhWzFdO1xuXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyUHJlZGljYXRlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJzKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRVc2Vyc1xuICAgICAgLm1hcCh1ID0+IHRoaXMuX2RhdGEucmV0dXJuVXNlck9iamVjdHMgPyB1IDogdS5zQU1BY2NvdW50TmFtZSk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLl9kYXRhLm1vZGUgPT09IFVzZXJDaG9vc2VyTW9kZS5NdWx0aXBsZSA/XG4gICAgICB2YWx1ZSA6XG4gICAgICB2YWx1ZVswXVxuICAgICk7XG4gIH1cblxuICBnZXRQaG90byh1c2VyOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmlzVXNlcih1c2VyKSkgeyByZXR1cm47IH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5waG90b3M/LmZpbmQocCA9PlxuICAgICAgKHAuZW1wbG95ZWVOdW1iZXIgJiYgcC5lbXBsb3llZU51bWJlci50b1N0cmluZygpID09PSAodXNlciBhcyBTZWxlY3RhYmxlVXNlcikuZW1wbG95ZWVOdW1iZXIpIHx8XG4gICAgICBwLmFjY291bnROYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAuZGlzcGxheU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKT8uZW5jb2RlZEFic1VybDtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBFeGNsdXNpb25zIC0gd29uJ3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2UgYXQgYWxsXG4gIHByaXZhdGUgZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucy5hY2NvdW50TmFtZXNcbiAgICAgIC5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHByaXZhdGUgZXhjbHVkZVVzZXJzQnlHcm91cE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLmV4Y2x1c2lvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cbiAgICAgICAgXG4gICAgICAgIGdyb3VwLm1lbWJlci5mb3JFYWNoKGdyb3VwTWVtYmVyRG4gPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KHUgPT4gdS5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBNZW1iZXJEbik7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeyByZXR1cm47IH1cblxuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cblxuICBwcml2YXRlIGV4Y2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucy5kZXBhcnRtZW50c1xuICAgICAgLmZvckVhY2goZGVwYXJ0bWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgZXhjbHVkZWRVc2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZih1c2VyKTtcbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zLnRpdGxlc1xuICAgICAgLmZvckVhY2godGl0bGUgPT4ge1xuICAgICAgICBjb25zdCBleGNsdWRlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHUgPT4gdS50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdGl0bGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIFxuICAgICAgICBleGNsdWRlZFVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKHVzZXIpO1xuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEluY2x1c2lvbnMgLSBvbmx5IHRoZXNlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2VcbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgcmV0dXJuIHVzZXJzLmZpbHRlcih1c2VyID0+XG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuYWNjb3VudE5hbWVzLmxlbmd0aCA9PT0gMCB8fCAvLyBObyBhY2NvdW50IGluY2x1c2lvbnMgc3BlY2lmaWVkXG5cbiAgICAgIHRoaXMuX2RhdGEuaW5jbHVzaW9ucy5hY2NvdW50TmFtZXMuZmluZChhY2NvdW50TmFtZSA9PlxuICAgICAgICBhY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuX2RhdGEuaW5jbHVzaW9ucy5kZXBhcnRtZW50cy5sZW5ndGggPT09IDAgfHwgLy8gTm8gZGVwYXJ0bWVudCBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZGVwYXJ0bWVudHMuZmluZChkZXBhcnRtZW50ID0+XG4gICAgICAgIGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kZXBhcnRtZW50Py50b0xvd2VyQ2FzZSgpXG4gICAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZVVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHJldHVybiB1c2Vycy5maWx0ZXIodXNlciA9PlxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLnRpdGxlcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gdGl0bGUgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLnRpdGxlcy5maW5kKHRpdGxlID0+XG4gICAgICAgIHRpdGxlLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIudGl0bGU/LnRvTG93ZXJDYXNlKClcbiAgICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIGlmICghdGhpcy5fZGF0YS5pbmNsdXNpb25zLmdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1c2VyczsgLy8gTm8gZ3JvdXAgaW5jbHVzaW9ucyBzcGVjaWZpZWRcbiAgICB9XG5cbiAgICAvLyBDaGVhdGluZyBhIGJpdCBhbmQgbGV2ZXJhZ2luZyB0aGUgJ3NlbGVjdGVkJyBwcm9wZXJ0eSB0byBrZWVwIHRyYWNrIG9mIHdobyBzaG91bGQgYmUgaW5jbHVkZWRcbiAgICAvLyBTaW5jZSBpbmNsdXNpb25zIGhhcHBlbiBiZWZvciBwcmUtc2VsZWN0aW9ucywgd2UgY2FuIGRvIHRoYXQsIGFzIGxvbmcgYXMgd2Ugc2V0ICdzZWxlY3RlZCcgYmFjayB0byBmYWxzZSB3aGVuIHdlJ3JlIGRvbmVcbiAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodXNlciA9PlxuICAgICAgICAgICAgICBncm91cC5tZW1iZXIuZmluZChncm91cE1lbWJlckRuID0+IGdyb3VwTWVtYmVyRG4gPT09IHVzZXIuZGlzdGluZ3Vpc2hlZE5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlIHVzZXJzIHNob3VsZCBoYXZlICdzZWxlY3RlZCcgc2V0IHRvIHRydWVcbiAgICBjb25zdCBzZWxlY3RlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5zZWxlY3RlZCk7IC8vIFN1YnNldCBvZiB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIC8vIFJlc2V0ICdzZWxlY3RlZCcgdG8gZmFsc2UsIGFuZCByZXR1cm5cbiAgICBzZWxlY3RlZFVzZXJzLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgIHJldHVybiBzZWxlY3RlZFVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAgUHJlLVNlbGVjdGlvbnNcbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLnByZVNlbGVjdGlvbnMuYWNjb3VudE5hbWVzXG4gICAgICAuZm9yRWFjaChhY2NvdW50TmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2Vycy5maW5kKHUgPT4gdS5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSBhY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCF1c2VyKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHVzZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cblxuICBwcml2YXRlIHByZVNlbGVjdFVzZXJzQnlEZXBhcnRtZW50KHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zLmRlcGFydG1lbnRzXG4gICAgICAuZm9yRWFjaChkZXBhcnRtZW50ID0+XG4gICAgICAgIHVzZXJzXG4gICAgICAgICAgLmZpbHRlcih1ID0+IHUuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKSA9PT0gZGVwYXJ0bWVudC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5VGl0bGUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLnByZVNlbGVjdGlvbnMudGl0bGVzXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgZ3JvdXAubWVtYmVyLmZvckVhY2goZ3JvdXBNZW1iZXJEbiA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cE1lbWJlckRuKTtcbiAgICAgICAgICBpZiAoIXVzZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICB1c2VyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgXG4gIHByaXZhdGUgc2V0RmlsdGVyUHJlZGljYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhU291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9ICh1c2VyOiAoU2VsZWN0YWJsZVVzZXIgfCBTZWxlY3RhYmxlR3JvdXApLCBmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGZpbHRlciA9PT0gJ3tzZWxlY3RlZDp0cnVlfScpIHtcbiAgICAgICAgcmV0dXJuIHVzZXIuc2VsZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZmlsdGVyLCAnaScpOyAvLyBDYXNlLWluc2Vuc2l0aXZlXG4gICAgICAgIGxldCBtYXRjaCA9IGZhbHNlOyAvLyBUaGUgZW5kIHJlc3VsdCAtIHdoZXRoZXIgb3Igbm90IGEgZW1wbG95ZWUgbWF0Y2hlcyB0aGUgZmlsdGVyXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUHJvcGVydGllcyA9IFsgJ2Rpc3BsYXlOYW1lJyBdO1xuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmFjY291bnROYW1lKSB7XG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCdzQU1BY2NvdW50TmFtZScpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucy50aXRsZSkge1xuICAgICAgICAgIGZpbHRlclByb3BlcnRpZXMucHVzaCgndGl0bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmRlcGFydG1lbnQpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ2RlcGFydG1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLnBob25lTnVtYmVyKSB7XG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCd0ZWxlcGhvbmVOdW1iZXInKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgLy8gTWF0Y2ggb24gdGhlIHByb3BlcnRpZXMgY29uZmlndXJlZCBhYm92ZVxuICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzXG4gICAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKHVzZXJbZmllbGRdICYmIHVzZXJbZmllbGRdLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gIFxuICAgICAgICAvLyBNYXRjaCBvbiBncm91cCBtZW1iZXJzaGlwIChncm91cCBuYW1lKVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zLmdyb3VwTWVtYmVyc2hpcCkge1xuICAgICAgICAgIHVzZXIubWVtYmVyT2YuZm9yRWFjaChncm91cERuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwRG4gJiYgZ3JvdXAubmFtZS5tYXRjaChyZWdleCkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckZpbHRlckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyNTApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGF0YVNvdXJjZSEuZmlsdGVyID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLmZpbHRlcj8udHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgdG9vbHRpcCh1c2VyOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzID9cbiAgICAgIHVzZXIubWVtYmVyT2ZcbiAgICAgICAgLm1hcChncm91cERuID0+XG4gICAgICAgICAgdGhpcy5ncm91cHNcbiAgICAgICAgICAgID8uZmluZChncm91cCA9PlxuICAgICAgICAgICAgICBncm91cC5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBEblxuICAgICAgICAgICAgKT8ubmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSEgPiBiISA/IDEgOiAtMSlcbiAgICAgICAgICAuam9pbignXFxuJykgOlxuICAgICAgJyc7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iLCI8ZGl2IGlkPVwiZGlhbG9nLXRpdGxlXCI+XG4gIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7IF9kYXRhLnRpdGxlIH19PC9oMj5cblxuICA8ZGl2IGlkPVwibnVtLXNlbGVjdGVkXCI+XG4gICAge3sgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSBzZWxlY3RlZFxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LWRpYWxvZy1jb250ZW50PlxuICBAaWYgKGRhdGFTb3VyY2UgJiYgcGhvdG9zKSB7XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICBAaWYgKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGZvcm1Db250cm9sTmFtZT1cImZpbHRlclwiICNmaWx0ZXJJbnB1dD5cbiAgICAgICAgICBAaWYgKGZpbHRlckZvcm0udmFsdWUuZmlsdGVyKSB7XG4gICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUoJycpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCIvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfVxuICAgIDwvZm9ybT5cbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0IFttdWx0aXBsZV09XCJpc011bHRpTW9kZVwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImxpc3RTZWxlY3Rpb25DaGFuZ2VkKCRldmVudC5vcHRpb25zKVwiPlxuICAgICAgQGZvciAodXNlciBvZiBkYXRhU291cmNlPy5maWx0ZXJlZERhdGE7IHRyYWNrIHVzZXIpIHtcbiAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBbdmFsdWVdPVwidXNlclwiIFtzZWxlY3RlZF09XCJ1c2VyLnNlbGVjdGVkXCJcbiAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb24pXCIgI29wdGlvbj5cbiAgICAgICAgICBAaWYgKGdldFBob3RvKHVzZXIpKSB7XG4gICAgICAgICAgICA8aW1nIG1hdExpc3RJdGVtQXZhdGFyIGFsdD1cIlwiIFtzcmNdPVwiZ2V0UGhvdG8odXNlcilcIj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUF2YXRhciBjbGFzcz1cIm5vLXBob3RvXCJcbiAgICAgICAgICAgICAgW2ZvbnRJY29uXT1cImlzVXNlcih1c2VyKSA/ICdhY2NvdW50X2NpcmNsZScgOiAnZ3JvdXAnXCIvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgPGRpdiBbbWF0VG9vbHRpcF09XCJ0b29sdGlwKHVzZXIpXCIgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAge3sgdXNlci5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICBAaWYgKGlzVXNlcih1c2VyKSAmJiBfZGF0YS5zaG93UGhvbmUgJiYgY2FzdFVzZXIodXNlcikudGVsZXBob25lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjYXN0VXNlcih1c2VyKS50ZWxlcGhvbmVOdW1iZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGlzVXNlcih1c2VyKSkge1xuICAgICAgICAgICAgICA8ZGl2Pnt7IGNhc3RVc2VyKHVzZXIpLmRlcGFydG1lbnQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgY2FzdFVzZXIodXNlcikudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICB9XG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXY+XG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIvPlxuICAgICAgPGgyIGlkPVwic3Bpbm5lci1tZXNzYWdlXCI+R2V0dGluZyB1c2VycyBhbmQgcGhvdG9zLi4uPC9oMj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gIEBpZiAoZGF0YVNvdXJjZSAmJiBwaG90b3MpIHtcbiAgICBAaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIChjaGFuZ2UpPVwiaGlkZVVuc2VsZWN0ZWRDaGFuZ2VkKCRldmVudC5jaGVja2VkKVwiPlxuICAgICAgICBIaWRlIFVuc2VsZWN0ZWRcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICB9XG4gICAgQGlmIChpc011bHRpTW9kZSkge1xuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2VsZWN0QWxsKClcIlxuICAgICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cInNlbGVjdF9hbGxcIi8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoaXNNdWx0aU1vZGUgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xlYXJfYWxsXCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2xlYXIgQWxsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoaXNNdWx0aU1vZGUgfHwgIV9kYXRhLmNsb3NlV2hlblNlbGVjdGlvbk1hZGUpIHtcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKClcIiBtYXRUb29sdGlwPVwiQWNjZXB0IHlvdXIgc2VsZWN0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoXCI+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNoZWNrXCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+T2s8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIH1cblxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIG1hdC1kaWFsb2ctY2xvc2UgbWF0VG9vbHRpcD1cIkNsb3NlIHRoaXMgd2luZG93XCI+XG4gICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIi8+XG4gICAgPHNwYW4gY2xhc3M9XCJoaWRlLW1vYmlsZVwiPkNhbmNlbDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz4iXX0=
@@ -118,15 +118,15 @@ export class UserFormFieldComponent {
118
118
  p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||
119
119
  p.title?.toLowerCase() === user.displayName.toLowerCase())?.encodedAbsUrl;
120
120
  }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UserFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: UserFormFieldComponent, selector: "cp-user-field", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, userChooserData: { classPropertyName: "userChooserData", publicName: "userChooserData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { usersSelected: "usersSelected", userUnSelected: "userUnSelected" }, ngImport: i0, template: "\r\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\r\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\r\nIt's definitely a better experience if the field IS disabled.\r\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\r\n-->\r\n<!-- Update 8/24/2023:\r\nThe above problem also exists in Chrome now.\r\nSo instead of dynamically setting [disabled] based on browser type,\r\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\r\n-->\r\n\r\n@if (users && photos) {\r\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\r\n @if (accountNames.length) {\r\n <div\r\n [class.grid]=\"accountNames.length > 1\"\r\n [class.three]=\"accountNames.length > 2\"\r\n [class.four]=\"accountNames.length > 3\"\r\n [class.five]=\"accountNames.length > 4\">\r\n @for (accountName of accountNames; track accountName; let i = $index) {\r\n <div class=\"user\">\r\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\r\n @if (getPhoto(accountName)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\r\n }\r\n @if (getGroup(accountName)) {\r\n <mat-icon>group</mat-icon>\r\n }\r\n <mat-form-field>\r\n <!-- [disabled]=\"!isEdge\" -->\r\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\r\n [value]=\"getUser(accountName) ? getUser(accountName)?.displayName : getGroup(accountName) ? getGroup(accountName)?.displayName : accountName\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <mat-form-field>\r\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\r\n </mat-form-field>\r\n }\r\n </div>\r\n} @else {\r\n <mat-progress-bar mode=\"indeterminate\"/>\r\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"], dependencies: [{ kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "directive", type: i5.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: UserFormFieldComponent, selector: "cp-user-field", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, userChooserData: { classPropertyName: "userChooserData", publicName: "userChooserData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { usersSelected: "usersSelected", userUnSelected: "userUnSelected" }, ngImport: i0, template: "\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames.length) {\n <div\n [class.grid]=\"accountNames.length > 1\"\n [class.three]=\"accountNames.length > 2\"\n [class.four]=\"accountNames.length > 3\"\n [class.five]=\"accountNames.length > 4\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName) ? getUser(accountName)?.displayName : getGroup(accountName) ? getGroup(accountName)?.displayName : accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"], dependencies: [{ kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "directive", type: i5.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] }); }
123
123
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: UserFormFieldComponent, decorators: [{
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserFormFieldComponent, decorators: [{
125
125
  type: Component,
126
- args: [{ selector: 'cp-user-field', template: "\r\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\r\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\r\nIt's definitely a better experience if the field IS disabled.\r\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\r\n-->\r\n<!-- Update 8/24/2023:\r\nThe above problem also exists in Chrome now.\r\nSo instead of dynamically setting [disabled] based on browser type,\r\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\r\n-->\r\n\r\n@if (users && photos) {\r\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\r\n @if (accountNames.length) {\r\n <div\r\n [class.grid]=\"accountNames.length > 1\"\r\n [class.three]=\"accountNames.length > 2\"\r\n [class.four]=\"accountNames.length > 3\"\r\n [class.five]=\"accountNames.length > 4\">\r\n @for (accountName of accountNames; track accountName; let i = $index) {\r\n <div class=\"user\">\r\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\r\n @if (getPhoto(accountName)) {\r\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\r\n }\r\n @if (getGroup(accountName)) {\r\n <mat-icon>group</mat-icon>\r\n }\r\n <mat-form-field>\r\n <!-- [disabled]=\"!isEdge\" -->\r\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\r\n [value]=\"getUser(accountName) ? getUser(accountName)?.displayName : getGroup(accountName) ? getGroup(accountName)?.displayName : accountName\">\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\r\n <mat-icon fontIcon=\"close\"/>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <mat-form-field>\r\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\r\n </mat-form-field>\r\n }\r\n </div>\r\n} @else {\r\n <mat-progress-bar mode=\"indeterminate\"/>\r\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"] }]
126
+ args: [{ selector: 'cp-user-field', template: "\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames.length) {\n <div\n [class.grid]=\"accountNames.length > 1\"\n [class.three]=\"accountNames.length > 2\"\n [class.four]=\"accountNames.length > 3\"\n [class.five]=\"accountNames.length > 4\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName) ? getUser(accountName)?.displayName : getGroup(accountName) ? getGroup(accountName)?.displayName : accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width:801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"] }]
127
127
  }], propDecorators: { usersSelected: [{
128
128
  type: Output
129
129
  }], userUnSelected: [{
130
130
  type: Output
131
131
  }] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFPOUUsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1FLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDVixXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHNCQUFpQixHQUFH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QUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFtQjtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU8sU0FBUyxDQUFDO1FBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzNCLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUNsRSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FDMUQsRUFBRSxhQUFhLENBQUM7SUFDbkIsQ0FBQzs4R0E5SFUsc0JBQXNCO2tHQUF0QixzQkFBc0IsbWpCQ2hCbkMseTVFQWdEQzs7MkZEaENZLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxlQUFlOzhCQVdmLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsIFVzZXIsIFVzZXJPckdyb3VwIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xyXG5pbXBvcnQgeyBQaG90b0l0ZW0sIFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQnO1xyXG5cclxuaW1wb3J0IHsgVXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xyXG5cclxuaW1wb3J0IHsgVXNlckNob29zZXJDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NwLXVzZXItZmllbGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vI3JlZ2lvbiBGaWVsZHNcclxuICAvLyNyZWdpb24gU2VydmljZXNcclxuICBwcml2YXRlIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xyXG4gIHByaXZhdGUgYWN0aXZlRGlyZWN0b3J5U2VydmljZSA9IGluamVjdChBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlKTtcclxuICBwcml2YXRlIHNoYXJlUG9pbnRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlKTtcclxuICAvLyNlbmRyZWdpb25cclxuICBAT3V0cHV0KCkgdXNlcnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgc3RyaW5nW10+KCk7IC8vIHN0cmluZyBmb3IgU2luZ2xlIG1vZGUsIHN0cmluZ1tdIGZvciBtdWx0aVxyXG4gIEBPdXRwdXQoKSB1c2VyVW5TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJ1NlbGVjdCBVc2VyKHMpJyk7XHJcbiAgY2xpY2thYmxlID0gaW5wdXQodHJ1ZSk7XHJcbiAgdXNlckNob29zZXJEYXRhID0gaW5wdXQucmVxdWlyZWQ8VXNlckNob29zZXJEYXRhPigpO1xyXG4gIF91c2VyQ2hvb3NlckRhdGEhOiBVc2VyQ2hvb3NlckRhdGE7XHJcblxyXG4gIGFjY291bnROYW1lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgdXNlcnM/OiBVc2VyW107XHJcbiAgZ3JvdXBzPzogVXNlck9yR3JvdXBbXTtcclxuICBwaG90b3M/OiBQaG90b0l0ZW1bXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3BlcnRpZXNcclxuICAvKmdldCBpc0VkZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID4gLTE7XHJcbiAgfSovXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgXHJcbiAgLy8jcmVnaW9uIExpZmVjeWNsZVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXNlckNob29zZXJEYXRhID0ge1xyXG4gICAgICAuLi5uZXcgVXNlckNob29zZXJEYXRhKCksXHJcbiAgICAgIC4uLnRoaXMudXNlckNob29zZXJEYXRhKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB1c2VycyBoYXZlIGJlZW4gcHJlLXNlbGVjdGVkIGluIHRoZSBjb25maWcsIHN0b3JlIHRob3NlIGluIGFjY291bnROYW1lcywgd2hpY2ggZHJpdmVzIHRoZSBVSSBvZiB0aGlzIGNvbXBvbmVudFxyXG4gICAgdGhpcy5hY2NvdW50TmFtZXMgPSB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXM7XHJcblxyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRXZlbnRzXHJcbiAgc2VsZWN0VXNlcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jbGlja2FibGUoKSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBkYXRhOiBVc2VyQ2hvb3NlckRhdGEgPSB7XHJcbiAgICAgIC4uLnRoaXMuX3VzZXJDaG9vc2VyRGF0YSxcclxuXHJcbiAgICAgIHVzZXJzOiB0aGlzLnVzZXJzLFxyXG4gICAgICBwaG90b3M6IHRoaXMucGhvdG9zLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFVzZXJDaG9vc2VyQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IGRhdGFcclxuICAgIH0pXHJcbiAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgIGlmICghc2VsZWN0ZWQpIHsgcmV0dXJuOyB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmFjY291bnROYW1lcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID9cclxuICAgICAgICBzZWxlY3RlZCA6XHJcbiAgICAgICAgWyBzZWxlY3RlZCBdO1xyXG5cclxuICAgICAgLy8gT3ZlcndyaXRlIHdoYXQgbWF5IGhhdmUgYmVlbiBwYXNzZWQgaW4sIGZvciBzdWJzZXF1ZW50IGxhdW5jaGVzIG9mIFVzZXJDaG9vc2VyQ29tcG9uZW50IC0gb3RoZXJ3aXNlIGl0IGp1c3Qga2VlcHMgZ2V0dGluZyBmZWQgc3RhbGUgZGF0YVxyXG4gICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXMgPSB0aGlzLmFjY291bnROYW1lcztcclxuXHJcbiAgICAgIHRoaXMudXNlcnNTZWxlY3RlZC5lbWl0KHNlbGVjdGVkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdW5TZWxlY3RVc2VyKGFjY291bnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY2NvdW50TmFtZXMuZmluZEluZGV4KGEgPT4gYSA9PT0gYWNjb3VudE5hbWUpO1xyXG4gICAgdGhpcy5hY2NvdW50TmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXMgPSB0aGlzLmFjY291bnROYW1lcztcclxuXHJcbiAgICB0aGlzLnVzZXJVblNlbGVjdGVkLmVtaXQoYWNjb3VudE5hbWUpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xyXG4gIHByaXZhdGUgZ2V0RGF0YSgpOiB2b2lkIHtcclxuICAgIGZvcmtKb2luKFtcclxuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhIS51c2VycyA/XHJcbiAgICAgICAgLy8gVXNlcnMgd2VyZSBwYXNzZWQgaW5cclxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnVzZXJzKSA6XHJcbiAgICAgICAgLy8gVXNlcnMgbmVlZCB0byBiZSByZXRyaWV2ZWRcclxuICAgICAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuZ2V0VXNlcnMoZmFsc2UsIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuaW5jbHVkZURpc2FibGVkVXNlcnMsIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGFyZW50T3UpLFxyXG5cclxuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhIS5ncm91cHMgP1xyXG4gICAgICAgIC8vIEdyb3VwcyB3ZXJlIHBhc3NlZCBpblxyXG4gICAgICAgIG9mKHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuZ3JvdXBzKSA6XHJcbiAgICAgICAgLy8gR3JvdXBzIG5lZWQgdG8gYmUgcmV0cmlldmVkXHJcbiAgICAgICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldEdyb3Vwcyh0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBhcmVudE91KSxcclxuXHJcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGhvdG9zID9cclxuICAgICAgICAvLyBQaG90b3Mgd2VyZSBwYXNzZWQgaW5cclxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBob3RvcykgOlxyXG4gICAgICAgIC8vIFBob3RvcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxyXG4gICAgICAgIHRoaXMuc2hhcmVQb2ludFNlcnZpY2UuZ2V0UGhvdG9zKClcclxuICAgIF0pXHJcbiAgICAgIC5zdWJzY3JpYmUoKFt1c2VycywgZ3JvdXBzLCBwaG90b3NdKSA9PiB7XHJcbiAgICAgICAgdGhpcy51c2VycyA9IHVzZXJzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xyXG4gICAgICAgIHRoaXMucGhvdG9zID0gcGhvdG9zO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFVzZXIoYWNjb3VudE5hbWU6IHN0cmluZyk6IFVzZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlcnM/LmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXAoYWNjb3VudE5hbWU6IHN0cmluZyk6IFVzZXJPckdyb3VwIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQaG90byhhY2NvdW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXIoYWNjb3VudE5hbWUpO1xyXG4gICAgaWYgKCF1c2VyKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5waG90b3M/LmZpbmQocCA9PlxyXG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09IHVzZXIuZW1wbG95ZWVOdW1iZXIpIHx8XHJcbiAgICAgIHAuYWNjb3VudE5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICBwLmRpc3BsYXlOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkgfHxcclxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICApPy5lbmNvZGVkQWJzVXJsO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIlxyXG48IS0tIEluIE1pY3Jvc29mdCBFZGdlLCBzZWxlY3RVc2VyKCkgbmV2ZXIgZ2V0cyBjYWxsZWQgaWYgdGhlIGlucHV0IGZpZWxkcyBhcmUgZGlzYWJsZWRcclxuU28uLi4gSSdtIGR5bmFtaWNhbGx5IHNldHRpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5IGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBicm93c2VyIGlzIEVkZ2UuXHJcbkl0J3MgZGVmaW5pdGVseSBhIGJldHRlciBleHBlcmllbmNlIGlmIHRoZSBmaWVsZCBJUyBkaXNhYmxlZC5cclxuT3RoZXJ3aXNlLCBpdCdzIGNvbmZ1c2luZyAtIGVzcGVjaWFsbHkgYmVjYXVzZSBFZGdlIGlzIFNPIFNMT1cgdG8gZGlzcGxheSB0aGUgcmVzdWx0aW5nIGRpYWxvZyB3aW5kb3cuXHJcbi0tPlxyXG48IS0tIFVwZGF0ZSA4LzI0LzIwMjM6XHJcblRoZSBhYm92ZSBwcm9ibGVtIGFsc28gZXhpc3RzIGluIENocm9tZSBub3cuXHJcblNvIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgc2V0dGluZyBbZGlzYWJsZWRdIGJhc2VkIG9uIGJyb3dzZXIgdHlwZSxcclxuSSdtIGFwcGx5aW5nIENTUyB0byBzdXBwcmVzcyBtb3VzZSBldmVudHMgb24gdGhlIGlucHV0IC0gdGh1cyBtYWtpbmcgaXQgYnViYmxlIHVwIHRvIHRoZSBwYXJlbnQgY29udHJvbCwgd2hpY2ggcmVzcG9uZHMgdGhlIHdheSB3ZSB3YW50L1xyXG4tLT5cclxuXHJcbkBpZiAodXNlcnMgJiYgcGhvdG9zKSB7XHJcbiAgPGRpdiAoY2xpY2spPVwic2VsZWN0VXNlcigpXCIgW2NsYXNzLmNsaWNrYWJsZV09XCJjbGlja2FibGUoKVwiPlxyXG4gICAgQGlmIChhY2NvdW50TmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbY2xhc3MuZ3JpZF09XCJhY2NvdW50TmFtZXMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgW2NsYXNzLnRocmVlXT1cImFjY291bnROYW1lcy5sZW5ndGggPiAyXCJcclxuICAgICAgICBbY2xhc3MuZm91cl09XCJhY2NvdW50TmFtZXMubGVuZ3RoID4gM1wiXHJcbiAgICAgICAgW2NsYXNzLmZpdmVdPVwiYWNjb3VudE5hbWVzLmxlbmd0aCA+IDRcIj5cclxuICAgICAgICBAZm9yIChhY2NvdW50TmFtZSBvZiBhY2NvdW50TmFtZXM7IHRyYWNrIGFjY291bnROYW1lOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXJcIj5cclxuICAgICAgICAgICAgPCEtLTxpbWcgKm5nSWY9XCJhY2NvdW50TmFtZSAmJiBlbXBVdGlscy5nZXRFbXBsb3llZShhY2NvdW50TmFtZSlcIiBhbHQ9XCJcIiBbc3JjXT1cImVtcFV0aWxzLmdldEVtcGxveWVlKGFjY291bnROYW1lKSB8IGVtcGxveWVlUGhvdG9Vcmw6Y2FjaGVTZXJ2aWNlLnBob3Rvc1wiPi0tPlxyXG4gICAgICAgICAgICBAaWYgKGdldFBob3RvKGFjY291bnROYW1lKSkge1xyXG4gICAgICAgICAgICAgIDxpbWcgbWF0TGlzdEl0ZW1BdmF0YXIgYWx0PVwiXCIgW3NyY109XCJnZXRQaG90byhhY2NvdW50TmFtZSlcIj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYgKGdldEdyb3VwKGFjY291bnROYW1lKSkge1xyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5ncm91cDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cIiFpc0VkZ2VcIiAtLT5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZGlzYWJsZWQgW3BsYWNlaG9sZGVyXT1cImkgPT09IDAgPyBwbGFjZWhvbGRlcigpIDogJydcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFVzZXIoYWNjb3VudE5hbWUpID8gZ2V0VXNlcihhY2NvdW50TmFtZSk/LmRpc3BsYXlOYW1lIDogZ2V0R3JvdXAoYWNjb3VudE5hbWUpID8gZ2V0R3JvdXAoYWNjb3VudE5hbWUpPy5kaXNwbGF5TmFtZSA6IGFjY291bnROYW1lXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVuU2VsZWN0VXNlcihhY2NvdW50TmFtZSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCIvPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IGRpc2FibGVkIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCI+IDwhLS0gW2Rpc2FibGVkXT1cIiFpc0VkZ2VcIiAtLT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIi8+XHJcbn0iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFPOUUsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1FLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDVixXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHNCQUFpQixHQUFH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QUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFtQjtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU8sU0FBUyxDQUFDO1FBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzNCLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUNsRSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FDMUQsRUFBRSxhQUFhLENBQUM7SUFDbkIsQ0FBQzs4R0E5SFUsc0JBQXNCO2tHQUF0QixzQkFBc0IsbWpCQ2hCbkMseXpFQWdEQzs7MkZEaENZLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxlQUFlOzhCQVdmLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLCBVc2VyLCBVc2VyT3JHcm91cCB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5JztcbmltcG9ydCB7IFBob3RvSXRlbSwgU2hhcmVQb2ludFNlcnZpY2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludCc7XG5cbmltcG9ydCB7IFVzZXJDaG9vc2VyRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL3VzZXItY2hvb3Nlci1kYXRhJztcblxuaW1wb3J0IHsgVXNlckNob29zZXJDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NwLXVzZXItZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyRm9ybUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8jcmVnaW9uIEZpZWxkc1xuICAvLyNyZWdpb24gU2VydmljZXNcbiAgcHJpdmF0ZSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBhY3RpdmVEaXJlY3RvcnlTZXJ2aWNlID0gaW5qZWN0KEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UpO1xuICBwcml2YXRlIHNoYXJlUG9pbnRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlKTtcbiAgLy8jZW5kcmVnaW9uXG4gIEBPdXRwdXQoKSB1c2Vyc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTsgLy8gc3RyaW5nIGZvciBTaW5nbGUgbW9kZSwgc3RyaW5nW10gZm9yIG11bHRpXG4gIEBPdXRwdXQoKSB1c2VyVW5TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0KCdTZWxlY3QgVXNlcihzKScpO1xuICBjbGlja2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgdXNlckNob29zZXJEYXRhID0gaW5wdXQucmVxdWlyZWQ8VXNlckNob29zZXJEYXRhPigpO1xuICBfdXNlckNob29zZXJEYXRhITogVXNlckNob29zZXJEYXRhO1xuXG4gIGFjY291bnROYW1lczogc3RyaW5nW10gPSBbXTtcblxuICB1c2Vycz86IFVzZXJbXTtcbiAgZ3JvdXBzPzogVXNlck9yR3JvdXBbXTtcbiAgcGhvdG9zPzogUGhvdG9JdGVtW107XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG4gIC8qZ2V0IGlzRWRnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID4gLTE7XG4gIH0qL1xuICAvLyNlbmRyZWdpb25cbiAgXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlckNob29zZXJEYXRhID0ge1xuICAgICAgLi4ubmV3IFVzZXJDaG9vc2VyRGF0YSgpLFxuICAgICAgLi4udGhpcy51c2VyQ2hvb3NlckRhdGEoKVxuICAgIH1cblxuICAgIC8vIElmIHVzZXJzIGhhdmUgYmVlbiBwcmUtc2VsZWN0ZWQgaW4gdGhlIGNvbmZpZywgc3RvcmUgdGhvc2UgaW4gYWNjb3VudE5hbWVzLCB3aGljaCBkcml2ZXMgdGhlIFVJIG9mIHRoaXMgY29tcG9uZW50XG4gICAgdGhpcy5hY2NvdW50TmFtZXMgPSB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXM7XG5cbiAgICB0aGlzLmdldERhdGEoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRXZlbnRzXG4gIHNlbGVjdFVzZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNsaWNrYWJsZSgpKSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgZGF0YTogVXNlckNob29zZXJEYXRhID0ge1xuICAgICAgLi4udGhpcy5fdXNlckNob29zZXJEYXRhLFxuXG4gICAgICB1c2VyczogdGhpcy51c2VycyxcbiAgICAgIHBob3RvczogdGhpcy5waG90b3MsXG4gICAgfTtcblxuICAgIHRoaXMuZGlhbG9nLm9wZW4oVXNlckNob29zZXJDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KVxuICAgIC5hZnRlckNsb3NlZCgpXG4gICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdGVkKSB7IHJldHVybjsgfVxuICAgICAgXG4gICAgICB0aGlzLmFjY291bnROYW1lcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID9cbiAgICAgICAgc2VsZWN0ZWQgOlxuICAgICAgICBbIHNlbGVjdGVkIF07XG5cbiAgICAgIC8vIE92ZXJ3cml0ZSB3aGF0IG1heSBoYXZlIGJlZW4gcGFzc2VkIGluLCBmb3Igc3Vic2VxdWVudCBsYXVuY2hlcyBvZiBVc2VyQ2hvb3NlckNvbXBvbmVudCAtIG90aGVyd2lzZSBpdCBqdXN0IGtlZXBzIGdldHRpbmcgZmVkIHN0YWxlIGRhdGFcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zLmFjY291bnROYW1lcyA9IHRoaXMuYWNjb3VudE5hbWVzO1xuXG4gICAgICB0aGlzLnVzZXJzU2VsZWN0ZWQuZW1pdChzZWxlY3RlZCk7XG4gICAgfSk7XG4gIH1cblxuICB1blNlbGVjdFVzZXIoYWNjb3VudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY2NvdW50TmFtZXMuZmluZEluZGV4KGEgPT4gYSA9PT0gYWNjb3VudE5hbWUpO1xuICAgIHRoaXMuYWNjb3VudE5hbWVzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXMgPSB0aGlzLmFjY291bnROYW1lcztcblxuICAgIHRoaXMudXNlclVuU2VsZWN0ZWQuZW1pdChhY2NvdW50TmFtZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xuICBwcml2YXRlIGdldERhdGEoKTogdm9pZCB7XG4gICAgZm9ya0pvaW4oW1xuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhIS51c2VycyA/XG4gICAgICAgIC8vIFVzZXJzIHdlcmUgcGFzc2VkIGluXG4gICAgICAgIG9mKHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEudXNlcnMpIDpcbiAgICAgICAgLy8gVXNlcnMgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldFVzZXJzKGZhbHNlLCB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLmluY2x1ZGVEaXNhYmxlZFVzZXJzLCB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBhcmVudE91KSxcblxuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhIS5ncm91cHMgP1xuICAgICAgICAvLyBHcm91cHMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fdXNlckNob29zZXJEYXRhIS5ncm91cHMpIDpcbiAgICAgICAgLy8gR3JvdXBzIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5U2VydmljZS5nZXRHcm91cHModGhpcy5fdXNlckNob29zZXJEYXRhIS5wYXJlbnRPdSksXG5cbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGhvdG9zID9cbiAgICAgICAgLy8gUGhvdG9zIHdlcmUgcGFzc2VkIGluXG4gICAgICAgIG9mKHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGhvdG9zKSA6XG4gICAgICAgIC8vIFBob3RvcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLnNoYXJlUG9pbnRTZXJ2aWNlLmdldFBob3RvcygpXG4gICAgXSlcbiAgICAgIC5zdWJzY3JpYmUoKFt1c2VycywgZ3JvdXBzLCBwaG90b3NdKSA9PiB7XG4gICAgICAgIHRoaXMudXNlcnMgPSB1c2VycztcbiAgICAgICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG4gICAgICAgIHRoaXMucGhvdG9zID0gcGhvdG9zO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRVc2VyKGFjY291bnROYW1lOiBzdHJpbmcpOiBVc2VyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy51c2Vycz8uZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBnZXRHcm91cChhY2NvdW50TmFtZTogc3RyaW5nKTogVXNlck9yR3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBnZXRQaG90byhhY2NvdW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VyKGFjY291bnROYW1lKTtcbiAgICBpZiAoIXVzZXIpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgcmV0dXJuIHRoaXMucGhvdG9zPy5maW5kKHAgPT5cbiAgICAgIChwLmVtcGxveWVlTnVtYmVyICYmIHAuZW1wbG95ZWVOdW1iZXIudG9TdHJpbmcoKSA9PT0gdXNlci5lbXBsb3llZU51bWJlcikgfHxcbiAgICAgIHAuYWNjb3VudE5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC5kaXNwbGF5TmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBwLnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKClcbiAgICApPy5lbmNvZGVkQWJzVXJsO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxufSIsIlxuPCEtLSBJbiBNaWNyb3NvZnQgRWRnZSwgc2VsZWN0VXNlcigpIG5ldmVyIGdldHMgY2FsbGVkIGlmIHRoZSBpbnB1dCBmaWVsZHMgYXJlIGRpc2FibGVkXG5Tby4uLiBJJ20gZHluYW1pY2FsbHkgc2V0dGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkgYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGJyb3dzZXIgaXMgRWRnZS5cbkl0J3MgZGVmaW5pdGVseSBhIGJldHRlciBleHBlcmllbmNlIGlmIHRoZSBmaWVsZCBJUyBkaXNhYmxlZC5cbk90aGVyd2lzZSwgaXQncyBjb25mdXNpbmcgLSBlc3BlY2lhbGx5IGJlY2F1c2UgRWRnZSBpcyBTTyBTTE9XIHRvIGRpc3BsYXkgdGhlIHJlc3VsdGluZyBkaWFsb2cgd2luZG93LlxuLS0+XG48IS0tIFVwZGF0ZSA4LzI0LzIwMjM6XG5UaGUgYWJvdmUgcHJvYmxlbSBhbHNvIGV4aXN0cyBpbiBDaHJvbWUgbm93LlxuU28gaW5zdGVhZCBvZiBkeW5hbWljYWxseSBzZXR0aW5nIFtkaXNhYmxlZF0gYmFzZWQgb24gYnJvd3NlciB0eXBlLFxuSSdtIGFwcGx5aW5nIENTUyB0byBzdXBwcmVzcyBtb3VzZSBldmVudHMgb24gdGhlIGlucHV0IC0gdGh1cyBtYWtpbmcgaXQgYnViYmxlIHVwIHRvIHRoZSBwYXJlbnQgY29udHJvbCwgd2hpY2ggcmVzcG9uZHMgdGhlIHdheSB3ZSB3YW50L1xuLS0+XG5cbkBpZiAodXNlcnMgJiYgcGhvdG9zKSB7XG4gIDxkaXYgKGNsaWNrKT1cInNlbGVjdFVzZXIoKVwiIFtjbGFzcy5jbGlja2FibGVdPVwiY2xpY2thYmxlKClcIj5cbiAgICBAaWYgKGFjY291bnROYW1lcy5sZW5ndGgpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzLmdyaWRdPVwiYWNjb3VudE5hbWVzLmxlbmd0aCA+IDFcIlxuICAgICAgICBbY2xhc3MudGhyZWVdPVwiYWNjb3VudE5hbWVzLmxlbmd0aCA+IDJcIlxuICAgICAgICBbY2xhc3MuZm91cl09XCJhY2NvdW50TmFtZXMubGVuZ3RoID4gM1wiXG4gICAgICAgIFtjbGFzcy5maXZlXT1cImFjY291bnROYW1lcy5sZW5ndGggPiA0XCI+XG4gICAgICAgIEBmb3IgKGFjY291bnROYW1lIG9mIGFjY291bnROYW1lczsgdHJhY2sgYWNjb3VudE5hbWU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXJcIj5cbiAgICAgICAgICAgIDwhLS08aW1nICpuZ0lmPVwiYWNjb3VudE5hbWUgJiYgZW1wVXRpbHMuZ2V0RW1wbG95ZWUoYWNjb3VudE5hbWUpXCIgYWx0PVwiXCIgW3NyY109XCJlbXBVdGlscy5nZXRFbXBsb3llZShhY2NvdW50TmFtZSkgfCBlbXBsb3llZVBob3RvVXJsOmNhY2hlU2VydmljZS5waG90b3NcIj4tLT5cbiAgICAgICAgICAgIEBpZiAoZ2V0UGhvdG8oYWNjb3VudE5hbWUpKSB7XG4gICAgICAgICAgICAgIDxpbWcgbWF0TGlzdEl0ZW1BdmF0YXIgYWx0PVwiXCIgW3NyY109XCJnZXRQaG90byhhY2NvdW50TmFtZSlcIj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZ2V0R3JvdXAoYWNjb3VudE5hbWUpKSB7XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5ncm91cDwvbWF0LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cIiFpc0VkZ2VcIiAtLT5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGRpc2FibGVkIFtwbGFjZWhvbGRlcl09XCJpID09PSAwID8gcGxhY2Vob2xkZXIoKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VXNlcihhY2NvdW50TmFtZSkgPyBnZXRVc2VyKGFjY291bnROYW1lKT8uZGlzcGxheU5hbWUgOiBnZXRHcm91cChhY2NvdW50TmFtZSkgPyBnZXRHcm91cChhY2NvdW50TmFtZSk/LmRpc3BsYXlOYW1lIDogYWNjb3VudE5hbWVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVuU2VsZWN0VXNlcihhY2NvdW50TmFtZSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGRpc2FibGVkIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCI+IDwhLS0gW2Rpc2FibGVkXT1cIiFpc0VkZ2VcIiAtLT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgfVxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cbn0iXX0=
@@ -31,8 +31,8 @@ export class GuiModule {
31
31
  throw new Error('ActiveDirectoryGuiModule is already loaded. Import it in the AppModule only');
32
32
  }
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GuiModule, deps: [{ token: GuiModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
35
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.2", ngImport: i0, type: GuiModule, declarations: [UserChooserComponent,
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: GuiModule, deps: [{ token: GuiModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
35
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: GuiModule, declarations: [UserChooserComponent,
36
36
  UserFormFieldComponent], imports: [CommonModule,
37
37
  ReactiveFormsModule,
38
38
  MatButtonModule,
@@ -47,7 +47,7 @@ export class GuiModule {
47
47
  MatTableModule,
48
48
  MatTooltipModule], exports: [UserChooserComponent,
49
49
  UserFormFieldComponent] }); }
50
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GuiModule, imports: [CommonModule,
50
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: GuiModule, imports: [CommonModule,
51
51
  ReactiveFormsModule,
52
52
  MatButtonModule,
53
53
  MatDialogModule,
@@ -61,7 +61,7 @@ export class GuiModule {
61
61
  MatTableModule,
62
62
  MatTooltipModule] }); }
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GuiModule, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: GuiModule, decorators: [{
65
65
  type: NgModule,
66
66
  args: [{
67
67
  declarations: [
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
93
93
  }, {
94
94
  type: SkipSelf
95
95
  }] }] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9ndWkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUE0QmhHLE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBcUI7UUFDbEMsT0FBTztZQUNMLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFNBQVMsRUFBRTtnQkFDVCxzQkFBc0I7Z0JBQ3RCLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQzdDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFvQyxZQUF1QjtRQUN6RCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkVBQTZFLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQzs4R0FoQlUsU0FBUzsrR0FBVCxTQUFTLGlCQXhCbEIsb0JBQW9CO1lBQ3BCLHNCQUFzQixhQUd0QixZQUFZO1lBQ1osbUJBQW1CO1lBRW5CLGVBQWU7WUFDZixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxnQkFBZ0IsYUFHaEIsb0JBQW9CO1lBQ3BCLHNCQUFzQjsrR0FHYixTQUFTLFlBcEJsQixZQUFZO1lBQ1osbUJBQW1CO1lBRW5CLGVBQWU7WUFDZixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxnQkFBZ0I7OzJGQU9QLFNBQVM7a0JBMUJyQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7d0JBQ3BCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUVuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3FCQUN2QjtpQkFDRjs7MEJBWWMsUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IFNlcnZpY2VDb25maWcsIEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XHJcblxyXG5pbXBvcnQgeyBVc2VyQ2hvb3NlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVzZXJGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFVzZXJDaG9vc2VyQ29tcG9uZW50LFxyXG4gICAgVXNlckZvcm1GaWVsZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRMaXN0TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXHJcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuICAgIE1hdFRhYmxlTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVXNlckNob29zZXJDb21wb25lbnQsXHJcbiAgICBVc2VyRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3VpTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IFNlcnZpY2VDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEd1aU1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEd1aU1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgQWN0aXZlRGlyZWN0b3J5U2VydmljZSxcclxuICAgICAgICB7IHByb3ZpZGU6IFNlcnZpY2VDb25maWcsIHVzZVZhbHVlOiBjb25maWcgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcGFyZW50TW9kdWxlOiBHdWlNb2R1bGUpIHtcclxuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdBY3RpdmVEaXJlY3RvcnlHdWlNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEltcG9ydCBpdCBpbiB0aGUgQXBwTW9kdWxlIG9ubHknKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9ndWkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUE0QmhHLE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBcUI7UUFDbEMsT0FBTztZQUNMLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFNBQVMsRUFBRTtnQkFDVCxzQkFBc0I7Z0JBQ3RCLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQzdDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFvQyxZQUF1QjtRQUN6RCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkVBQTZFLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQzs4R0FoQlUsU0FBUzsrR0FBVCxTQUFTLGlCQXhCbEIsb0JBQW9CO1lBQ3BCLHNCQUFzQixhQUd0QixZQUFZO1lBQ1osbUJBQW1CO1lBRW5CLGVBQWU7WUFDZixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxnQkFBZ0IsYUFHaEIsb0JBQW9CO1lBQ3BCLHNCQUFzQjsrR0FHYixTQUFTLFlBcEJsQixZQUFZO1lBQ1osbUJBQW1CO1lBRW5CLGVBQWU7WUFDZixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxnQkFBZ0I7OzJGQU9QLFNBQVM7a0JBMUJyQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7d0JBQ3BCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUVuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3FCQUN2QjtpQkFDRjs7MEJBWWMsUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29uZmlnLCBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xuXG5pbXBvcnQgeyBVc2VyQ2hvb3NlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVXNlckNob29zZXJDb21wb25lbnQsXG4gICAgVXNlckZvcm1GaWVsZENvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG5cbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdExpc3RNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFVzZXJDaG9vc2VyQ29tcG9uZW50LFxuICAgIFVzZXJGb3JtRmllbGRDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBHdWlNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IFNlcnZpY2VDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEd1aU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogR3VpTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogU2VydmljZUNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZyB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHBhcmVudE1vZHVsZTogR3VpTW9kdWxlKSB7XG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQWN0aXZlRGlyZWN0b3J5R3VpTW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLiBJbXBvcnQgaXQgaW4gdGhlIEFwcE1vZHVsZSBvbmx5Jyk7XG4gICAgfVxuICB9XG59Il19
@@ -93,10 +93,10 @@ export class ActiveDirectoryService {
93
93
  getWorkstations(includeDisabled = false, parentOU = '') {
94
94
  return this.http.get(`${this.config?.apiUrl}/activedirectory/workstations/${includeDisabled}/${parentOU}`);
95
95
  }
96
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
97
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryService, providedIn: 'root' }); }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
97
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, providedIn: 'root' }); }
98
98
  }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActiveDirectoryService, decorators: [{
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ActiveDirectoryService, decorators: [{
100
100
  type: Injectable,
101
101
  args: [{
102
102
  providedIn: 'root'