@cleavelandprice/ngx-lib 3.1.11 → 3.1.12

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.
@@ -1,4 +1,4 @@
1
- import { User } from "@cleavelandprice/ngx-lib/active-directory";
1
+ import { User, Group } from "@cleavelandprice/ngx-lib/active-directory";
2
2
  import { PhotoItem } from "@cleavelandprice/ngx-lib/sharepoint";
3
3
  import { UserChooserFilterOptions } from "./user-chooser-filter-options";
4
4
  import { UserChooserMode } from "./user-chooser-mode";
@@ -6,16 +6,17 @@ import { UserChooserPreProcessingGroup } from "./user-chooser-pre-processing-gro
6
6
  export interface UserChooserData {
7
7
  closeWhenSelectionMade: boolean;
8
8
  includeDisabledUsers: boolean;
9
- filterOptions: UserChooserFilterOptions;
10
- mode: UserChooserMode;
11
9
  parentOu: string | undefined;
12
10
  returnUserObjects: boolean;
13
11
  showGroupMembershipTooltips: boolean;
14
12
  showPhone: boolean;
15
13
  title: string;
14
+ mode: UserChooserMode;
15
+ filterOptions: UserChooserFilterOptions;
16
16
  exclusions: UserChooserPreProcessingGroup;
17
17
  inclusions: UserChooserPreProcessingGroup;
18
18
  preSelections: UserChooserPreProcessingGroup;
19
19
  users?: User[];
20
+ groups?: Group[];
20
21
  photos?: PhotoItem[];
21
22
  }
@@ -109,7 +109,11 @@ export class UserChooserComponent {
109
109
  ];
110
110
  // Do we need AD groups?
111
111
  if (this.adGroupsNeeded) {
112
- dataObservables.push(this.activeDirectoryService.getGroups());
112
+ this.data.groups ?
113
+ // Groups were passed in
114
+ of(this.data.groups) :
115
+ // Groups need to be retrieved
116
+ dataObservables.push(this.activeDirectoryService.getGroups());
113
117
  }
114
118
  forkJoin(dataObservables)
115
119
  //.subscribe(([users, photos]) => {
@@ -349,4 +353,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImpor
349
353
  type: ViewChild,
350
354
  args: [MatSelectionList]
351
355
  }] } });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFVbkQsTUFBTSxPQUFPLG9CQUFvQjtJQWtDL0IsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixZQUE0QyxJQUFxQixFQUM3QyxTQUE2QyxFQUM3QyxzQkFBOEMsRUFDOUMsaUJBQW9DO1FBSFosU0FBSSxHQUFKLElB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QW5DTixhQUFhO3NCQUF6QyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdExpc3RPcHRpb24sIE1hdFNlbGVjdGlvbkxpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsIEdyb3VwIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xuaW1wb3J0IHsgU2hhcmVQb2ludFNlcnZpY2UsIFBob3RvSXRlbSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50JztcblxuaW1wb3J0IHsgZGVmYXVsdFVzZXJDaG9vc2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGVmYXVsdC11c2VyLWNob29zZXItY29uZmlnJztcbmltcG9ydCB7IFNlbGVjdGFibGVVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VsZWN0YWJsZS11c2VyJztcbmltcG9ydCB7IFVzZXJDaG9vc2VyRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL3VzZXItY2hvb3Nlci1kYXRhJztcbmltcG9ydCB7IFVzZXJDaG9vc2VyTW9kZSB9IGZyb20gJy4uLy4uL3B1YmxpY19hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWNob29zZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5jc3MnLFxuICAgICcuLi8uLi8uLi8uLi8uLi9zdHlsZXMvbWF0LWljb24uY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJDaG9vc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8jcmVnaW9uIEZpZWxkc1xuICBAVmlld0NoaWxkKE1hdFNlbGVjdGlvbkxpc3QpIHNlbGVjdGlvbkxpc3Q6IE1hdFNlbGVjdGlvbkxpc3QgfCBudWxsID0gbnVsbDtcblxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZmlsdGVyOiBuZXcgRm9ybUNvbnRyb2woKVxuICB9KTtcblxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8U2VsZWN0YWJsZVVzZXI+IHwgbnVsbCA9IG51bGw7XG4gIHBob3RvczogUGhvdG9JdGVtW10gfCBudWxsID0gbnVsbDtcbiAgZ3JvdXBzOiBHcm91cFtdIHwgbnVsbCA9IG51bGw7IC8vIE1heSBvciBtYXkgbm90IGdldCBwb3B1bGF0ZWQsIGRlcGVuZGluZyBvbiBjb25maWcgZGF0YSBzZW50IGluXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG4gIGdldCBpc011bHRpTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm1vZGUgPT09IFVzZXJDaG9vc2VyTW9kZS5NdWx0aXBsZTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnMoKTogTWF0TGlzdE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25MaXN0Py5vcHRpb25zLmZpbHRlcihvID0+IG8uc2VsZWN0ZWQpID8/IFtdO1xuICB9XG5cbiAgZ2V0IGZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXI7XG4gIH1cblxuICBnZXQgYWRHcm91cHNOZWVkZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgYW55IGFyZSB0aGVzZSBhcmUgdHJ1ZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgQUQgZ3JvdXBzIGZvciB1c2UgbGF0ZXJcbiAgICByZXR1cm4gdGhpcy5kYXRhLnNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwcyB8fFxuICAgICAgdGhpcy5kYXRhLmV4Y2x1c2lvbnMuZ3JvdXBzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmdyb3Vwcy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmRhdGEucHJlU2VsZWN0aW9ucy5ncm91cHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5kYXRhLmZpbHRlck9wdGlvbnMuZ3JvdXBNZW1iZXJzaGlwO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcbiAgY29uc3RydWN0b3IoQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBVc2VyQ2hvb3NlckRhdGEsXG4gICAgICAgICAgICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VXNlckNob29zZXJDb21wb25lbnQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIGFjdGl2ZURpcmVjdG9yeVNlcnZpY2U6IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgc2hhcmVQb2ludFNlcnZpY2U6IFNoYXJlUG9pbnRTZXJ2aWNlKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAuLi5kZWZhdWx0VXNlckNob29zZXJDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICAgICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gICAgdGhpcy5saXN0ZW5Gb3JGaWx0ZXJDaGFuZ2VzKCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEV2ZW50c1xuICAgbGlzdFNlbGVjdGlvbkNoYW5nZWQob3B0aW9uczogTWF0TGlzdE9wdGlvbltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgIHRoaXMuZGF0YS5jbG9zZVdoZW5TZWxlY3Rpb25NYWRlXG4gICAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25TZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbjogTWF0TGlzdE9wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGFcbiAgICAgIC5maW5kKHUgPT4gdS5zQU1BY2NvdW50TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAob3B0aW9uLnZhbHVlIGFzIFNlbGVjdGFibGVVc2VyKS5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2VyLnNlbGVjdGVkID0gb3B0aW9uLnNlbGVjdGVkO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVVbnNlbGVjdGVkQ2hhbmdlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2ZpbHRlcicpPy5zZXRWYWx1ZShzZWxlY3RlZCA/ICd7c2VsZWN0ZWQ6dHJ1ZX0nIDogbnVsbCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0Py5zZWxlY3RBbGwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkxpc3Q/Lm9wdGlvbnMpIHtcbiAgICAgIHRoaXMubGlzdFNlbGVjdGlvbkNoYW5nZWQodGhpcy5zZWxlY3Rpb25MaXN0Py5vcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0Py5kZXNlbGVjdEFsbCgpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBVdGlsaXRpZXNcbiAgcHJpdmF0ZSBnZXREYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXG4gICAgICB0aGlzLmRhdGEudXNlcnMgP1xuICAgICAgICAvLyBVc2VycyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLmRhdGEudXNlcnMpIDpcbiAgICAgICAgLy8gVXNlcnMgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldFVzZXJzKGZhbHNlLCB0aGlzLmRhdGEuaW5jbHVkZURpc2FibGVkVXNlcnMsIHRoaXMuZGF0YS5wYXJlbnRPdSksXG5cbiAgICAgIHRoaXMuZGF0YS5waG90b3MgP1xuICAgICAgICAvLyBQaG90b3Mgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5kYXRhLnBob3RvcykgOlxuICAgICAgICAvLyBQaG90b3MgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy5zaGFyZVBvaW50U2VydmljZS5nZXRQaG90b3MoKVxuICAgIF07XG5cbiAgICAvLyBEbyB3ZSBuZWVkIEFEIGdyb3Vwcz9cbiAgICBpZiAodGhpcy5hZEdyb3Vwc05lZWRlZCkge1xuICAgICAgZGF0YU9ic2VydmFibGVzLnB1c2godGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldEdyb3VwcygpKTtcbiAgICB9XG5cblxuICAgIGZvcmtKb2luKGRhdGFPYnNlcnZhYmxlcylcbiAgICAgIC8vLnN1YnNjcmliZSgoW3VzZXJzLCBwaG90b3NdKSA9PiB7XG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAvLyBOZWVkIGdyb3VwcyBpbiBwbGFjZSBiZWZvcmUgd2UgaGFuZGxlIGV4Y2x1c2lvbnMvaW5jbHVzaW9ucy9wcmUtc2VsZWN0aW9uc1xuICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuYWRHcm91cHNOZWVkZWQgPyBkYXRhWzJdIDogbnVsbDtcblxuICAgICAgICBsZXQgdXNlcnMgPSBkYXRhWzBdIGFzIFNlbGVjdGFibGVVc2VyW107XG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzKTtcblxuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5wcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh1c2Vycyk7XG4gICAgICBcbiAgICAgICAgdGhpcy5waG90b3MgPSBkYXRhWzFdO1xuXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyUHJlZGljYXRlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgLm1hcChvID0+IG8udmFsdWUgYXMgU2VsZWN0YWJsZVVzZXIpXG4gICAgICAgIC5tYXAodSA9PiB0aGlzLmRhdGEucmV0dXJuVXNlck9iamVjdHMgPyB1IDogdS5zQU1BY2NvdW50TmFtZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UGhvdG8odXNlcjogU2VsZWN0YWJsZVVzZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBob3Rvcz8uZmluZChwID0+XG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09IHVzZXIuZW1wbG95ZWVOdW1iZXIpIHx8XG4gICAgICBwLmFjY291bnROYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAuZGlzcGxheU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKT8uZW5jb2RlZEFic1VybDtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBFeGNsdXNpb25zIC0gd29uJ3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2UgYXQgYWxsXG4gIHByaXZhdGUgZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuZGF0YS5leGNsdXNpb25zLmFjY291bnROYW1lc1xuICAgICAgLmZvckVhY2goYWNjb3VudE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuZGF0YS5leGNsdXNpb25zLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG4gICAgICAgIFxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEuZXhjbHVzaW9ucy5kZXBhcnRtZW50c1xuICAgICAgLmZvckVhY2goZGVwYXJ0bWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgZXhjbHVkZWRVc2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZih1c2VyKTtcbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLmV4Y2x1c2lvbnMudGl0bGVzXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmluZGV4T2YodXNlcik7XG4gICAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW5jbHVzaW9ucyAtIG9ubHkgdGhlc2Ugd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YVNvdXJjZVxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmFjY291bnROYW1lcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gYWNjb3VudCBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLmRhdGEuaW5jbHVzaW9ucy5hY2NvdW50TmFtZXMuZmluZChhY2NvdW50TmFtZSA9PlxuICAgICAgICBhY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmRlcGFydG1lbnRzLmxlbmd0aCA9PT0gMCB8fCAvLyBObyBkZXBhcnRtZW50IGluY2x1c2lvbnMgc3BlY2lmaWVkXG5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmRlcGFydG1lbnRzLmZpbmQoZGVwYXJ0bWVudCA9PlxuICAgICAgICBkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5VGl0bGUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLnRpdGxlcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gdGl0bGUgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5kYXRhLmluY2x1c2lvbnMudGl0bGVzLmZpbmQodGl0bGUgPT5cbiAgICAgICAgdGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gdXNlci50aXRsZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgaWYgKCF0aGlzLmRhdGEuaW5jbHVzaW9ucy5ncm91cHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdXNlcnM7IC8vIE5vIGdyb3VwIGluY2x1c2lvbnMgc3BlY2lmaWVkXG4gICAgfVxuXG4gICAgLy8gQ2hlYXRpbmcgYSBiaXQgYW5kIGxldmVyYWdpbmcgdGhlICdzZWxlY3RlZCcgcHJvcGVydHkgdG8ga2VlcCB0cmFjayBvZiB3aG8gc2hvdWxkIGJlIGluY2x1ZGVkXG4gICAgLy8gU2luY2UgaW5jbHVzaW9ucyBoYXBwZW4gYmVmb3IgcHJlLXNlbGVjdGlvbnMsIHdlIGNhbiBkbyB0aGF0LCBhcyBsb25nIGFzIHdlIHNldCAnc2VsZWN0ZWQnIGJhY2sgdG8gZmFsc2Ugd2hlbiB3ZSdyZSBkb25lXG4gICAgdGhpcy5kYXRhLmluY2x1c2lvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodXNlciA9PlxuICAgICAgICAgICAgICBncm91cC5tZW1iZXIuZmluZChncm91cE1lbWJlckRuID0+IGdyb3VwTWVtYmVyRG4gPT09IHVzZXIuZGlzdGluZ3Vpc2hlZE5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlIHVzZXJzIHNob3VsZCBoYXZlICdzZWxlY3RlZCcgc2V0IHRvIHRydWVcbiAgICBjb25zdCBzZWxlY3RlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5zZWxlY3RlZCk7IC8vIFN1YnNldCBvZiB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIC8vIFJlc2V0ICdzZWxlY3RlZCcgdG8gZmFsc2UsIGFuZCByZXR1cm5cbiAgICBzZWxlY3RlZFVzZXJzLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgIHJldHVybiBzZWxlY3RlZFVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAgUHJlLVNlbGVjdGlvbnNcbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXNcbiAgICAgIC5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIXVzZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEucHJlU2VsZWN0aW9ucy5kZXBhcnRtZW50c1xuICAgICAgLmZvckVhY2goZGVwYXJ0bWVudCA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKVxuICAgICAgKTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLnByZVNlbGVjdGlvbnMudGl0bGVzXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLnByZVNlbGVjdGlvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cblxuICAgICAgICAgIHVzZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICBcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQcmVkaWNhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKHVzZXI6IFNlbGVjdGFibGVVc2VyLCBmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGZpbHRlciA9PT0gJ3tzZWxlY3RlZDp0cnVlfScpIHtcbiAgICAgICAgcmV0dXJuIHVzZXIuc2VsZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZmlsdGVyLCAnaScpOyAvLyBDYXNlLWluc2Vuc2l0aXZlXG4gICAgICAgIGxldCBtYXRjaCA9IGZhbHNlOyAvLyBUaGUgZW5kIHJlc3VsdCAtIHdoZXRoZXIgb3Igbm90IGEgZW1wbG95ZWUgbWF0Y2hlcyB0aGUgZmlsdGVyXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUHJvcGVydGllcyA9IFsgJ2Rpc3BsYXlOYW1lJyBdO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3NBTUFjY291bnROYW1lJylcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RpdGxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJPcHRpb25zLmRlcGFydG1lbnQpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ2RlcGFydG1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMucGhvbmVOdW1iZXIpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RlbGVwaG9uZU51bWJlcicpO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBNYXRjaCBvbiB0aGUgcHJvcGVydGllcyBjb25maWd1cmVkIGFib3ZlXG4gICAgICAgIGZpbHRlclByb3BlcnRpZXNcbiAgICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodXNlcltmaWVsZF0gJiYgdXNlcltmaWVsZF0ubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgXG4gICAgICAgIC8vIE1hdGNoIG9uIGdyb3VwIG1lbWJlcnNoaXAgKGdyb3VwIG5hbWUpXG4gICAgICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyT3B0aW9ucy5ncm91cE1lbWJlcnNoaXApIHtcbiAgICAgICAgICB1c2VyLm1lbWJlck9mLmZvckVhY2goZ3JvdXBEbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGdyb3VwID0+IGdyb3VwLmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cERuICYmIGdyb3VwLm5hbWUubWF0Y2gocmVnZXgpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JGaWx0ZXJDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2ZpbHRlcicpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRhdGFTb3VyY2UhLmZpbHRlciA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXI/LnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHRvb2x0aXAodXNlcjogU2VsZWN0YWJsZVVzZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzID9cbiAgICAgIHVzZXIubWVtYmVyT2ZcbiAgICAgICAgLm1hcChncm91cERuID0+XG4gICAgICAgICAgdGhpcy5ncm91cHNcbiAgICAgICAgICAgID8uZmluZChncm91cCA9PlxuICAgICAgICAgICAgICBncm91cC5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBEblxuICAgICAgICAgICAgKT8ubmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSEgPiBiISA/IDEgOiAtMSlcbiAgICAgICAgICAuam9pbignXFxuJykgOlxuICAgICAgJyc7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iLCI8ZGl2IGlkPVwiZGlhbG9nLXRpdGxlXCI+XG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3sgZGF0YS50aXRsZSB9fTwvaDI+XG5cbiAgICA8ZGl2PlxuICAgICAgICB7eyBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIH19IHNlbGVjdGVkXG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2ICpuZ0lmPVwiIShkYXRhU291cmNlICYmIHBob3RvcylcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxoMiBpZD1cInNwaW5uZXItbWVzc2FnZVwiPkdldHRpbmcgdXNlcnMgYW5kIHBob3Rvcy4uLjwvaDI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiBwaG90b3NcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJkYXRhU291cmNlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlsdGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXJcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJmaWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBbbXVsdGlwbGVdPVwiaXNNdWx0aU1vZGVcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJsaXN0U2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQub3B0aW9ucylcIj5cblxuICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlciBvZiBkYXRhU291cmNlPy5maWx0ZXJlZERhdGFcIiBbdmFsdWVdPVwidXNlclwiIFtzZWxlY3RlZF09XCJ1c2VyLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb24pXCIgI29wdGlvbj5cblxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJnZXRQaG90byh1c2VyKVwiIG1hdExpc3RBdmF0YXIgYWx0PVwiXCIgW3NyY109XCJnZXRQaG90byh1c2VyKVwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWdldFBob3RvKHVzZXIpXCIgbWF0TGlzdEF2YXRhciBjbGFzcz1cIm5vLXBob3RvXCJcbiAgICAgICAgICAgICAgICAgICAgZm9udEljb249XCJhY2NvdW50X2NpcmNsZVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFttYXRUb29sdGlwXT1cInRvb2x0aXAodXNlcilcIiBjbGFzcz1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlci5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuc2hvd1Bob25lICYmIHVzZXIudGVsZXBob25lTnVtYmVyXCI+e3sgdXNlci50ZWxlcGhvbmVOdW1iZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IHVzZXIuZGVwYXJ0bWVudCB9fTwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgdXNlci50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFTb3VyY2UgJiYgcGhvdG9zXCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICpuZ0lmPVwic2VsZWN0ZWRPcHRpb25zLmxlbmd0aFwiIChjaGFuZ2UpPVwiaGlkZVVuc2VsZWN0ZWRDaGFuZ2VkKCRldmVudC5jaGVja2VkKVwiPlxuICAgICAgICAgICAgSGlkZSBVbnNlbGVjdGVkXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlNb2RlXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJzZWxlY3RfYWxsXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICBcbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlNb2RlICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsZWFyX2FsbFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2xlYXIgQWxsPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCIgbWF0VG9vbHRpcD1cIkFjY2VwdCB5b3VyIHNlbGVjdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNoZWNrXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5Pazwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIG1hdC1kaWFsb2ctY2xvc2UgbWF0VG9vbHRpcD1cIkNsb3NlIHRoaXMgd2luZG93XCI+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoaWRlLW1vYmlsZVwiPkNhbmNlbDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvZ3VpL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9ndWkvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFVbkQsTUFBTSxPQUFPLG9CQUFvQjtJQWtDL0IsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixZQUE0QyxJQUFxQixFQUM3QyxTQUE2QyxFQUM3QyxzQkFBOEMsRUFDOUMsaUJBQW9DO1FBSFosU0FBSSxHQUFKLElB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QkFBb0Isa0JBcUNYLGVBQWU7cUdBckN4QixvQkFBb0IsbUdBRXBCLGdCQUFnQixnREN6QjdCLDIwR0FpRnFCOzJGRDFEUixvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0UsY0FBYzs7MEJBNENYLE1BQU07MkJBQUMsZUFBZTs0SUFuQ04sYUFBYTtzQkFBekMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRMaXN0T3B0aW9uLCBNYXRTZWxlY3Rpb25MaXN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLCBHcm91cCB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5JztcbmltcG9ydCB7IFNoYXJlUG9pbnRTZXJ2aWNlLCBQaG90b0l0ZW0gfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludCc7XG5cbmltcG9ydCB7IGRlZmF1bHRVc2VyQ2hvb3NlckNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWNvbmZpZyc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlVXNlciB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGFibGUtdXNlcic7XG5pbXBvcnQgeyBVc2VyQ2hvb3NlckRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbC91c2VyLWNob29zZXItZGF0YSc7XG5pbXBvcnQgeyBVc2VyQ2hvb3Nlck1vZGUgfSBmcm9tICcuLi8uLi9wdWJsaWNfYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndXNlci1jaG9vc2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgICcuL3VzZXItY2hvb3Nlci5jb21wb25lbnQuY3NzJyxcbiAgICAnLi4vLi4vLi4vLi4vLi4vc3R5bGVzL21hdC1pY29uLmNzcydcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyQ2hvb3NlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vI3JlZ2lvbiBGaWVsZHNcbiAgQFZpZXdDaGlsZChNYXRTZWxlY3Rpb25MaXN0KSBzZWxlY3Rpb25MaXN0OiBNYXRTZWxlY3Rpb25MaXN0IHwgbnVsbCA9IG51bGw7XG5cbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIGZpbHRlcjogbmV3IEZvcm1Db250cm9sKClcbiAgfSk7XG5cbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFNlbGVjdGFibGVVc2VyPiB8IG51bGwgPSBudWxsO1xuICBwaG90b3M6IFBob3RvSXRlbVtdIHwgbnVsbCA9IG51bGw7XG4gIGdyb3VwczogR3JvdXBbXSB8IG51bGwgPSBudWxsOyAvLyBNYXkgb3IgbWF5IG5vdCBnZXQgcG9wdWxhdGVkLCBkZXBlbmRpbmcgb24gY29uZmlnIGRhdGEgc2VudCBpblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJvcGVydGllc1xuICBnZXQgaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuTXVsdGlwbGU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCk6IE1hdExpc3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy5maWx0ZXIobyA9PiBvLnNlbGVjdGVkKSA/PyBbXTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0udmFsdWUuZmlsdGVyO1xuICB9XG5cbiAgZ2V0IGFkR3JvdXBzTmVlZGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIElmIGFueSBhcmUgdGhlc2UgYXJlIHRydWUsIHRoZW4gd2UgbmVlZCB0byBwdWxsIEFEIGdyb3VwcyBmb3IgdXNlIGxhdGVyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHMgfHxcbiAgICAgIHRoaXMuZGF0YS5leGNsdXNpb25zLmdyb3Vwcy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmRhdGEuaW5jbHVzaW9ucy5ncm91cHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5kYXRhLnByZVNlbGVjdGlvbnMuZ3JvdXBzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuZGF0YS5maWx0ZXJPcHRpb25zLmdyb3VwTWVtYmVyc2hpcDtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogVXNlckNob29zZXJEYXRhLFxuICAgICAgICAgICAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFVzZXJDaG9vc2VyQ29tcG9uZW50PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBhY3RpdmVEaXJlY3RvcnlTZXJ2aWNlOiBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHNoYXJlUG9pbnRTZXJ2aWNlOiBTaGFyZVBvaW50U2VydmljZSkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgLi4uZGVmYXVsdFVzZXJDaG9vc2VyQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICAgICAgICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIHRoaXMubGlzdGVuRm9yRmlsdGVyQ2hhbmdlcygpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBFdmVudHNcbiAgIGxpc3RTZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbnM6IE1hdExpc3RPcHRpb25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLlNpbmdsZSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLmRhdGEuY2xvc2VXaGVuU2VsZWN0aW9uTWFkZVxuICAgICAgKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb246IE1hdExpc3RPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5kYXRhU291cmNlPy5kYXRhXG4gICAgICAuZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gKG9wdGlvbi52YWx1ZSBhcyBTZWxlY3RhYmxlVXNlcikuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlci5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZDtcbiAgICB9XG4gIH1cblxuICBoaWRlVW5zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUoc2VsZWN0ZWQgPyAne3NlbGVjdGVkOnRydWV9JyA6IG51bGwpO1xuICB9XG5cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdD8uc2VsZWN0QWxsKCk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25MaXN0Py5vcHRpb25zKSB7XG4gICAgICB0aGlzLmxpc3RTZWxlY3Rpb25DaGFuZ2VkKHRoaXMuc2VsZWN0aW9uTGlzdD8ub3B0aW9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdD8uZGVzZWxlY3RBbGwoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gVXRpbGl0aWVzXG4gIHByaXZhdGUgZ2V0RGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8YW55PltdID0gW1xuICAgICAgdGhpcy5kYXRhLnVzZXJzID9cbiAgICAgICAgLy8gVXNlcnMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5kYXRhLnVzZXJzKSA6XG4gICAgICAgIC8vIFVzZXJzIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5U2VydmljZS5nZXRVc2VycyhmYWxzZSwgdGhpcy5kYXRhLmluY2x1ZGVEaXNhYmxlZFVzZXJzLCB0aGlzLmRhdGEucGFyZW50T3UpLFxuXG4gICAgICB0aGlzLmRhdGEucGhvdG9zID9cbiAgICAgICAgLy8gUGhvdG9zIHdlcmUgcGFzc2VkIGluXG4gICAgICAgIG9mKHRoaXMuZGF0YS5waG90b3MpIDpcbiAgICAgICAgLy8gUGhvdG9zIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuc2hhcmVQb2ludFNlcnZpY2UuZ2V0UGhvdG9zKClcbiAgICBdO1xuXG4gICAgLy8gRG8gd2UgbmVlZCBBRCBncm91cHM/XG4gICAgaWYgKHRoaXMuYWRHcm91cHNOZWVkZWQpIHtcbiAgICAgIHRoaXMuZGF0YS5ncm91cHMgP1xuICAgICAgICAvLyBHcm91cHMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5kYXRhLmdyb3VwcykgOlxuICAgICAgICAvLyBHcm91cHMgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgZGF0YU9ic2VydmFibGVzLnB1c2godGhpcy5hY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLmdldEdyb3VwcygpKTtcbiAgICB9XG5cblxuICAgIGZvcmtKb2luKGRhdGFPYnNlcnZhYmxlcylcbiAgICAgIC8vLnN1YnNjcmliZSgoW3VzZXJzLCBwaG90b3NdKSA9PiB7XG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAvLyBOZWVkIGdyb3VwcyBpbiBwbGFjZSBiZWZvcmUgd2UgaGFuZGxlIGV4Y2x1c2lvbnMvaW5jbHVzaW9ucy9wcmUtc2VsZWN0aW9uc1xuICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuYWRHcm91cHNOZWVkZWQgPyBkYXRhWzJdIDogbnVsbDtcblxuICAgICAgICBsZXQgdXNlcnMgPSBkYXRhWzBdIGFzIFNlbGVjdGFibGVVc2VyW107XG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLmluY2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5pbmNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzKTtcblxuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5leGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy5wcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLnByZVNlbGVjdFVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh1c2Vycyk7XG4gICAgICBcbiAgICAgICAgdGhpcy5waG90b3MgPSBkYXRhWzFdO1xuXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyUHJlZGljYXRlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKFxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgLm1hcChvID0+IG8udmFsdWUgYXMgU2VsZWN0YWJsZVVzZXIpXG4gICAgICAgIC5tYXAodSA9PiB0aGlzLmRhdGEucmV0dXJuVXNlck9iamVjdHMgPyB1IDogdS5zQU1BY2NvdW50TmFtZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UGhvdG8odXNlcjogU2VsZWN0YWJsZVVzZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBob3Rvcz8uZmluZChwID0+XG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09IHVzZXIuZW1wbG95ZWVOdW1iZXIpIHx8XG4gICAgICBwLmFjY291bnROYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAuZGlzcGxheU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKT8uZW5jb2RlZEFic1VybDtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBFeGNsdXNpb25zIC0gd29uJ3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2UgYXQgYWxsXG4gIHByaXZhdGUgZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuZGF0YS5leGNsdXNpb25zLmFjY291bnROYW1lc1xuICAgICAgLmZvckVhY2goYWNjb3VudE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuZGF0YS5leGNsdXNpb25zLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG4gICAgICAgIFxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEuZXhjbHVzaW9ucy5kZXBhcnRtZW50c1xuICAgICAgLmZvckVhY2goZGVwYXJ0bWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgZXhjbHVkZWRVc2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZih1c2VyKTtcbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBleGNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLmV4Y2x1c2lvbnMudGl0bGVzXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmluZGV4T2YodXNlcik7XG4gICAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW5jbHVzaW9ucyAtIG9ubHkgdGhlc2Ugd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YVNvdXJjZVxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmFjY291bnROYW1lcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gYWNjb3VudCBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLmRhdGEuaW5jbHVzaW9ucy5hY2NvdW50TmFtZXMuZmluZChhY2NvdW50TmFtZSA9PlxuICAgICAgICBhY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmRlcGFydG1lbnRzLmxlbmd0aCA9PT0gMCB8fCAvLyBObyBkZXBhcnRtZW50IGluY2x1c2lvbnMgc3BlY2lmaWVkXG5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLmRlcGFydG1lbnRzLmZpbmQoZGVwYXJ0bWVudCA9PlxuICAgICAgICBkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5VGl0bGUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgIHRoaXMuZGF0YS5pbmNsdXNpb25zLnRpdGxlcy5sZW5ndGggPT09IDAgfHwgLy8gTm8gdGl0bGUgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5kYXRhLmluY2x1c2lvbnMudGl0bGVzLmZpbmQodGl0bGUgPT5cbiAgICAgICAgdGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gdXNlci50aXRsZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgaWYgKCF0aGlzLmRhdGEuaW5jbHVzaW9ucy5ncm91cHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdXNlcnM7IC8vIE5vIGdyb3VwIGluY2x1c2lvbnMgc3BlY2lmaWVkXG4gICAgfVxuXG4gICAgLy8gQ2hlYXRpbmcgYSBiaXQgYW5kIGxldmVyYWdpbmcgdGhlICdzZWxlY3RlZCcgcHJvcGVydHkgdG8ga2VlcCB0cmFjayBvZiB3aG8gc2hvdWxkIGJlIGluY2x1ZGVkXG4gICAgLy8gU2luY2UgaW5jbHVzaW9ucyBoYXBwZW4gYmVmb3IgcHJlLXNlbGVjdGlvbnMsIHdlIGNhbiBkbyB0aGF0LCBhcyBsb25nIGFzIHdlIHNldCAnc2VsZWN0ZWQnIGJhY2sgdG8gZmFsc2Ugd2hlbiB3ZSdyZSBkb25lXG4gICAgdGhpcy5kYXRhLmluY2x1c2lvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodXNlciA9PlxuICAgICAgICAgICAgICBncm91cC5tZW1iZXIuZmluZChncm91cE1lbWJlckRuID0+IGdyb3VwTWVtYmVyRG4gPT09IHVzZXIuZGlzdGluZ3Vpc2hlZE5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlIHVzZXJzIHNob3VsZCBoYXZlICdzZWxlY3RlZCcgc2V0IHRvIHRydWVcbiAgICBjb25zdCBzZWxlY3RlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5zZWxlY3RlZCk7IC8vIFN1YnNldCBvZiB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIC8vIFJlc2V0ICdzZWxlY3RlZCcgdG8gZmFsc2UsIGFuZCByZXR1cm5cbiAgICBzZWxlY3RlZFVzZXJzLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgIHJldHVybiBzZWxlY3RlZFVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAgUHJlLVNlbGVjdGlvbnNcbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXNcbiAgICAgIC5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIXVzZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLmRhdGEucHJlU2VsZWN0aW9ucy5kZXBhcnRtZW50c1xuICAgICAgLmZvckVhY2goZGVwYXJ0bWVudCA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKVxuICAgICAgKTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHByaXZhdGUgcHJlU2VsZWN0VXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLnByZVNlbGVjdGlvbnMudGl0bGVzXG4gICAgICAuZm9yRWFjaCh0aXRsZSA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5kYXRhLnByZVNlbGVjdGlvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cblxuICAgICAgICAgIHVzZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICBcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQcmVkaWNhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKHVzZXI6IFNlbGVjdGFibGVVc2VyLCBmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGZpbHRlciA9PT0gJ3tzZWxlY3RlZDp0cnVlfScpIHtcbiAgICAgICAgcmV0dXJuIHVzZXIuc2VsZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZmlsdGVyLCAnaScpOyAvLyBDYXNlLWluc2Vuc2l0aXZlXG4gICAgICAgIGxldCBtYXRjaCA9IGZhbHNlOyAvLyBUaGUgZW5kIHJlc3VsdCAtIHdoZXRoZXIgb3Igbm90IGEgZW1wbG95ZWUgbWF0Y2hlcyB0aGUgZmlsdGVyXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUHJvcGVydGllcyA9IFsgJ2Rpc3BsYXlOYW1lJyBdO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3NBTUFjY291bnROYW1lJylcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RpdGxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJPcHRpb25zLmRlcGFydG1lbnQpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ2RlcGFydG1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmZpbHRlck9wdGlvbnMucGhvbmVOdW1iZXIpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RlbGVwaG9uZU51bWJlcicpO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBNYXRjaCBvbiB0aGUgcHJvcGVydGllcyBjb25maWd1cmVkIGFib3ZlXG4gICAgICAgIGZpbHRlclByb3BlcnRpZXNcbiAgICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodXNlcltmaWVsZF0gJiYgdXNlcltmaWVsZF0ubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgXG4gICAgICAgIC8vIE1hdGNoIG9uIGdyb3VwIG1lbWJlcnNoaXAgKGdyb3VwIG5hbWUpXG4gICAgICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyT3B0aW9ucy5ncm91cE1lbWJlcnNoaXApIHtcbiAgICAgICAgICB1c2VyLm1lbWJlck9mLmZvckVhY2goZ3JvdXBEbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGdyb3VwID0+IGdyb3VwLmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cERuICYmIGdyb3VwLm5hbWUubWF0Y2gocmVnZXgpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JGaWx0ZXJDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2ZpbHRlcicpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRhdGFTb3VyY2UhLmZpbHRlciA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXI/LnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHRvb2x0aXAodXNlcjogU2VsZWN0YWJsZVVzZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzID9cbiAgICAgIHVzZXIubWVtYmVyT2ZcbiAgICAgICAgLm1hcChncm91cERuID0+XG4gICAgICAgICAgdGhpcy5ncm91cHNcbiAgICAgICAgICAgID8uZmluZChncm91cCA9PlxuICAgICAgICAgICAgICBncm91cC5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBEblxuICAgICAgICAgICAgKT8ubmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSEgPiBiISA/IDEgOiAtMSlcbiAgICAgICAgICAuam9pbignXFxuJykgOlxuICAgICAgJyc7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iLCI8ZGl2IGlkPVwiZGlhbG9nLXRpdGxlXCI+XG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3sgZGF0YS50aXRsZSB9fTwvaDI+XG5cbiAgICA8ZGl2PlxuICAgICAgICB7eyBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIH19IHNlbGVjdGVkXG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2ICpuZ0lmPVwiIShkYXRhU291cmNlICYmIHBob3RvcylcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxoMiBpZD1cInNwaW5uZXItbWVzc2FnZVwiPkdldHRpbmcgdXNlcnMgYW5kIHBob3Rvcy4uLjwvaDI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiBwaG90b3NcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJkYXRhU291cmNlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlsdGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZS5maWx0ZXJcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJmaWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBbbXVsdGlwbGVdPVwiaXNNdWx0aU1vZGVcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJsaXN0U2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQub3B0aW9ucylcIj5cblxuICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlciBvZiBkYXRhU291cmNlPy5maWx0ZXJlZERhdGFcIiBbdmFsdWVdPVwidXNlclwiIFtzZWxlY3RlZF09XCJ1c2VyLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb24pXCIgI29wdGlvbj5cblxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJnZXRQaG90byh1c2VyKVwiIG1hdExpc3RBdmF0YXIgYWx0PVwiXCIgW3NyY109XCJnZXRQaG90byh1c2VyKVwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWdldFBob3RvKHVzZXIpXCIgbWF0TGlzdEF2YXRhciBjbGFzcz1cIm5vLXBob3RvXCJcbiAgICAgICAgICAgICAgICAgICAgZm9udEljb249XCJhY2NvdW50X2NpcmNsZVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFttYXRUb29sdGlwXT1cInRvb2x0aXAodXNlcilcIiBjbGFzcz1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlci5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuc2hvd1Bob25lICYmIHVzZXIudGVsZXBob25lTnVtYmVyXCI+e3sgdXNlci50ZWxlcGhvbmVOdW1iZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IHVzZXIuZGVwYXJ0bWVudCB9fTwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgdXNlci50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFTb3VyY2UgJiYgcGhvdG9zXCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICpuZ0lmPVwic2VsZWN0ZWRPcHRpb25zLmxlbmd0aFwiIChjaGFuZ2UpPVwiaGlkZVVuc2VsZWN0ZWRDaGFuZ2VkKCRldmVudC5jaGVja2VkKVwiPlxuICAgICAgICAgICAgSGlkZSBVbnNlbGVjdGVkXG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlNb2RlXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJzZWxlY3RfYWxsXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICBcbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlNb2RlICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsZWFyX2FsbFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2xlYXIgQWxsPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCIgbWF0VG9vbHRpcD1cIkFjY2VwdCB5b3VyIHNlbGVjdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNoZWNrXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5Pazwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIG1hdC1kaWFsb2ctY2xvc2UgbWF0VG9vbHRpcD1cIkNsb3NlIHRoaXMgd2luZG93XCI+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoaWRlLW1vYmlsZVwiPkNhbmNlbDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L2d1aS9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXIgfSBmcm9tIFwiQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnlcIjtcclxuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50XCI7XHJcblxyXG5pbXBvcnQgeyBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnMgfSBmcm9tIFwiLi91c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAgfSBmcm9tIFwiLi91c2VyLWNob29zZXItcHJlLXByb2Nlc3NpbmctZ3JvdXBcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNob29zZXJEYXRhIHtcclxuICAgIGNsb3NlV2hlblNlbGVjdGlvbk1hZGU6IGJvb2xlYW47XHJcbiAgICBpbmNsdWRlRGlzYWJsZWRVc2VyczogYm9vbGVhbjtcclxuICAgIGZpbHRlck9wdGlvbnM6IFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucztcclxuICAgIG1vZGU6IFVzZXJDaG9vc2VyTW9kZTtcclxuICAgIHBhcmVudE91OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm5Vc2VyT2JqZWN0czogYm9vbGVhbjtcclxuICAgIHNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwczogYm9vbGVhbjtcclxuICAgIHNob3dQaG9uZTogYm9vbGVhbjtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgZXhjbHVzaW9uczogVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXA7XHJcbiAgICBpbmNsdXNpb25zOiBVc2VyQ2hvb3NlclByZVByb2Nlc3NpbmdHcm91cDtcclxuICAgIHByZVNlbGVjdGlvbnM6IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG5cclxuICAgIHVzZXJzPzogVXNlcltdO1xyXG4gICAgcGhvdG9zPzogUGhvdG9JdGVtW107XHJcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L2d1aS9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXIsIEdyb3VwIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5XCI7XHJcbmltcG9ydCB7IFBob3RvSXRlbSB9IGZyb20gXCJAY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludFwiO1xyXG5cclxuaW1wb3J0IHsgVXNlckNob29zZXJGaWx0ZXJPcHRpb25zIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zXCI7XHJcbmltcG9ydCB7IFVzZXJDaG9vc2VyTW9kZSB9IGZyb20gXCIuL3VzZXItY2hvb3Nlci1tb2RlXCI7XHJcbmltcG9ydCB7IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyRGF0YSB7XHJcbiAgICAvLyBTaG91bGQgdGhlIGRpYWxvZyBjbG9zZSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhbiBpdGVtP1xyXG4gICAgLy8gQXBwbGllcyB0byBzaW5nbGUtdXNlciBtb2RlIG9ubHlcclxuICAgIGNsb3NlV2hlblNlbGVjdGlvbk1hZGU6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyB0YXNrZWQgd2l0aCBwdWxsaW5nIEFjdGl2ZSBEaXJlY3RvcnkgdXNlcnMgKGRlZmF1bHQgc2V0dGluZyksXHJcbiAgICAvLyAgIHNob3VsZCB0aGF0IGluY2x1ZGUgZGlzYWJsZWQgdXNlcnM/XHJcbiAgICBpbmNsdWRlRGlzYWJsZWRVc2VyczogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgc2VhcmNoIGJlaW5nIGF0IGEgcGFydGljdWxhciBPcmdhbml6YXRpb24gVW5pdD9cclxuICAgIHBhcmVudE91OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgLy8gSWYgdHJ1ZSwgdGhlIGNvbXBvbmVudCB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBBY3RpdmUgRGlyZWN0b3J5IFVzZXIgb2JqZWN0cy5cclxuICAgIC8vIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIGNvbXBvbmVudCB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB1c2VyIGFjY291bnQgbmFtZXMuXHJcbiAgICByZXR1cm5Vc2VyT2JqZWN0czogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIGRpYWxvZyBpbmNsdWRlIGhvdmVyIHRvb3B0aXBzIGZvciBlYWNoIHVzZXIgdGhhdCBkaXNwbGF5cyB0aGVpciBncm91cCBtZW1iZXJzaGlwXHJcbiAgICAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzLCB3aGljaCBpcyB3aHkgdGhlIGRlZmF1bHQgaXMgZmFsc2VcclxuICAgIHNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwczogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIHVzZXIgcGhvbmUgbnVtYmVyIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZWlyIG5hbWUgaW4gdGhlIGRpYWxvZ1xyXG4gICAgc2hvd1Bob25lOiBib29sZWFuO1xyXG5cclxuICAgIC8vIFRpdGxlIGRpc3BsYXllZCBpbiB0aGUgZGlhbG9nXHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG5cclxuICAgIC8vIFNpbmdsZSBvciBNdWx0aSBtb2RlXHJcbiAgICBtb2RlOiBVc2VyQ2hvb3Nlck1vZGU7XHJcbiAgICBcclxuICAgIC8vIEFzIHRoZSB1c2VyIHR5cGVzIGludG8gdGhlIGZpbHRlciBmaWVsZCwgdGhlIGxpc3Qgb2YgdXNlcnMgaXMgZmlsdGVyZWQuXHJcbiAgICAvLyBUaGUgZmlsdGVyT3B0aW9ucyBkZXRlcm1pbmUgd2hpY2ggdXNlciBwcm9wZXJ0aWVzIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoYXQgZmlsdGVyLlxyXG4gICAgLy8gTm90ZSwgZGlzcGxheU5hbWUgaXMgYWx3YXlzIGluY2x1ZGVkIChoYXJkLWNvZGVkKSwgYW5kIGlzIHRoZXJlZm9yZSBub3QgYSBmaWx0ZXIgb3B0aW9uLlxyXG4gICAgZmlsdGVyT3B0aW9uczogVXNlckNob29zZXJGaWx0ZXJPcHRpb25zO1xyXG5cclxuICAgIGV4Y2x1c2lvbnM6IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG4gICAgaW5jbHVzaW9uczogVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXA7XHJcbiAgICBwcmVTZWxlY3Rpb25zOiBVc2VyQ2hvb3NlclByZVByb2Nlc3NpbmdHcm91cDtcclxuXHJcbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgY29tcG9uZW50IHdpbGwgcHVsbCBhIGZyZXNoIGxpc3Qgb2YgQWN0aXZlIERpcmVjdG9yeSB1c2Vycy9ncm91cHMgYW5kIFNoYXJlUG9pbnQgcGhvdG9zLlxyXG4gICAgLy8gQnV0IGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGFscmVhZHkgaGFzIHRoZW0sIHlvdSBjYW4gcGFzcyB0aGVtIGluIHZpYSB0aGVzZSBwcm9wZXJ0aWVzLlxyXG4gICAgdXNlcnM/OiBVc2VyW107XHJcbiAgICBncm91cHM/OiBHcm91cFtdO1xyXG4gICAgcGhvdG9zPzogUGhvdG9JdGVtW107XHJcbn0iXX0=
@@ -153,7 +153,11 @@ class UserChooserComponent {
153
153
  ];
154
154
  // Do we need AD groups?
155
155
  if (this.adGroupsNeeded) {
156
- dataObservables.push(this.activeDirectoryService.getGroups());
156
+ this.data.groups ?
157
+ // Groups were passed in
158
+ of(this.data.groups) :
159
+ // Groups need to be retrieved
160
+ dataObservables.push(this.activeDirectoryService.getGroups());
157
161
  }
158
162
  forkJoin(dataObservables)
159
163
  //.subscribe(([users, photos]) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-filter-options-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-pre-processing-group-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/cleavelandprice-ngx-lib-active-directory-gui.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const defaultUserChooserFilterOptionsConfig : UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n}","import { UserChooserPreProcessingGroup } from \"./user-chooser-pre-processing-group\";\r\n\r\nexport const defaultUserChooserPreProcessingGroupConfig: UserChooserPreProcessingGroup = {\r\n accountNames: [],\r\n departments: [],\r\n groups: [],\r\n titles: []\r\n}","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { defaultUserChooserFilterOptionsConfig } from \"./default-user-chooser-filter-options-config\";\r\nimport { defaultUserChooserPreProcessingGroupConfig } from \"./default-user-chooser-pre-processing-group-config\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const defaultUserChooserConfig: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n includeDisabledUsers: false,\r\n parentOu: undefined,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n\r\n mode: UserChooserMode.Single,\r\n returnUserObjects: false,\r\n\r\n filterOptions: defaultUserChooserFilterOptionsConfig,\r\n\r\n exclusions: defaultUserChooserPreProcessingGroupConfig,\r\n inclusions: defaultUserChooserPreProcessingGroupConfig,\r\n preSelections: defaultUserChooserPreProcessingGroupConfig\r\n}","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService, Group } from '@cleavelandprice/ngx-lib/active-directory';\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../public_api';\n\n@Component({\n selector: 'user-chooser',\n templateUrl: './user-chooser.component.html',\n styleUrls: [\n './user-chooser.component.css',\n '../../../../../styles/mat-icon.css'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n //#region Fields\n @ViewChild(MatSelectionList) selectionList: MatSelectionList | null = null;\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource: MatTableDataSource<SelectableUser> | null = null;\n photos: PhotoItem[] | null = null;\n groups: Group[] | null = null; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this.data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList?.options.filter(o => o.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return this.data.showGroupMembershipTooltips ||\n this.data.exclusions.groups.length > 0 ||\n this.data.inclusions.groups.length > 0 ||\n this.data.preSelections.groups.length > 0 ||\n this.data.filterOptions.groupMembership;\n }\n //#endregion\n\n //#region Lifecycle\n constructor(@Inject(MAT_DIALOG_DATA) public data: UserChooserData,\n private dialogRef: MatDialogRef<UserChooserComponent>,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) {\n\n this.data = {\n ...defaultUserChooserConfig,\n ...data\n }\n }\n\n ngOnInit(): void {\n this.getData();\n this.listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this.data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this.data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList?.selectAll();\n\n if (this.selectionList?.options) {\n this.listSelectionChanged(this.selectionList?.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n const dataObservables: Observable<any>[] = [\n this.data.users ?\n // Users were passed in\n of(this.data.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.data.includeDisabledUsers, this.data.parentOu),\n\n this.data.photos ?\n // Photos were passed in\n of(this.data.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n dataObservables.push(this.activeDirectoryService.getGroups());\n }\n\n\n forkJoin(dataObservables)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ? data[2] : null;\n\n let users = data[0] as SelectableUser[];\n users = this.includeUsersByAccountName(users);\n users = this.includeUsersByGroupName(users);\n users = this.includeUsersByDepartment(users);\n users = this.includeUsersByTitle(users);\n\n users = this.excludeUsersByAccountName(users);\n users = this.excludeUsersByGroupName(users);\n users = this.excludeUsersByDepartment(users);\n users = this.excludeUsersByTitle(users);\n\n users = this.preSelectUsersByAccountName(users);\n users = this.preSelectUsersByGroupName(users);\n users = this.preSelectUsersByDepartment(users);\n users = this.preSelectUsersByTitle(users);\n\n this.dataSource = new MatTableDataSource(users);\n \n this.photos = data[1];\n\n this.setFilterPredicate();\n });\n }\n\n close(): void {\n this.dialogRef.close(\n this.selectedOptions\n .map(o => o.value as SelectableUser)\n .map(u => this.data.returnUserObjects ? u : u.sAMAccountName)\n );\n }\n\n getPhoto(user: SelectableUser): string | undefined {\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n private excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.accountNames\n .forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n private excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.departments\n .forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.titles\n .forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n private includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.accountNames.length === 0 || // No account inclusions specified\n\n this.data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n private includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.departments.length === 0 || // No department inclusions specified\n\n this.data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n private includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.titles.length === 0 || // No title inclusions specified\n\n this.data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n private includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this.data.inclusions.groups.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this.data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n private preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.accountNames\n .forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n private preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.departments\n .forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.titles\n .forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n private setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: SelectableUser, filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this.data.filterOptions.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this.data.filterOptions.title) {\n filterProperties.push('title');\n }\n if (this.data.filterOptions.department) {\n filterProperties.push('department');\n }\n if (this.data.filterOptions.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this.data.filterOptions.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n private listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(500)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser): string {\n return this.data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}\n","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ data.title }}</h2>\n\n <div>\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n <div *ngIf=\"!(dataSource && photos)\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n\n <ng-container *ngIf=\"dataSource && photos\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field *ngIf=\"dataSource\">\n <input matInput placeholder=\"Search\" formControlName=\"filter\">\n\n <button *ngIf=\"filterForm.value.filter\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n\n <mat-list-option *ngFor=\"let user of dataSource?.filteredData\" [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n\n <img *ngIf=\"getPhoto(user)\" matListAvatar alt=\"\" [src]=\"getPhoto(user)\">\n\n <mat-icon *ngIf=\"!getPhoto(user)\" matListAvatar class=\"no-photo\"\n fontIcon=\"account_circle\">\n </mat-icon>\n \n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n <div *ngIf=\"data.showPhone && user.telephoneNumber\">{{ user.telephoneNumber }}</div>\n </div>\n \n <div>{{ user.department }}</div>\n \n <div class=\"title\">{{ user.title }}</div>\n </div>\n </mat-list-option>\n </mat-selection-list>\n </ng-container>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"dataSource && photos\">\n <mat-slide-toggle *ngIf=\"selectedOptions.length\" (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n *ngIf=\"isMultiMode\">\n <mat-icon fontIcon=\"select_all\"></mat-icon>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n \n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n *ngIf=\"isMultiMode && selectedOptions.length\">\n <mat-icon fontIcon=\"clear_all\"></mat-icon>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"></mat-icon>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n </ng-container>\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\n\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'user-form-field',\n templateUrl: './user-form-field.component.html',\n styleUrls: ['./user-form-field.component.css']\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n @Output() usersSelected = new EventEmitter<string[]>();\n @Input() placeholder = 'Select User(s)';\n @Input() clickable = true;\n\n @Input() userChooserData!: UserChooserData;\n /*\n @Input() mode = UserChooserMode.Multiple;\n @Input() preSelectAccountNames = true;\n @Input() includeDisabledUsers = false;\n @Input() parentOu = undefined;*/\n\n accountNames: string[] = [];\n\n private users: User[] | undefined = undefined;\n private photos: PhotoItem[] | undefined = undefined;\n //#endregion\n\n //#region Properties\n get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }\n //#endregion\n \n //#region Lifecycle\n constructor(private dialog: MatDialog,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) { }\n\n ngOnInit(): void {\n this.userChooserData = {\n ...defaultUserChooserConfig,\n ...this.userChooserData\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this.userChooserData.preSelections.accountNames;\n\n this.getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable) { return; }\n\n const data: UserChooserData = {\n ...this.userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe(accountNames => {\n if (!accountNames) { return; }\n\n this.accountNames = accountNames;\n this.usersSelected.emit(accountNames);\n });\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n forkJoin([\n this.userChooserData!.users ?\n // Users were passed in\n of(this.userChooserData!.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.userChooserData!.includeDisabledUsers, this.userChooserData!.parentOu),\n\n this.userChooserData!.photos ?\n // Photos were passed in\n of(this.userChooserData!.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ])\n .subscribe(([users, photos]) => {\n this.users = users;\n this.photos = photos;\n });\n }\n\n getUser(accountName: string): User | undefined {\n return this.users?.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}\n","<!-- In Microsoft Edge, selectEmployee() never gets called if the input fields are disabled\n So... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\n It's definitely a better experience if the field IS disabled.\n Otherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n\n<div (click)=\"selectUser()\" [class.clickable]=\"clickable\">\n <mat-form-field *ngIf=\"!accountNames?.length\">\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"placeholder\">\n </mat-form-field>\n \n <div *ngIf=\"accountNames?.length\"\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\n <div *ngFor=\"let accountName of accountNames; let i=index\" class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n <img *ngIf=\"getPhoto(accountName)\" matListAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n \n <mat-form-field>\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"i === 0 ? placeholder : ''\"\n [value]=\"accountName ? getUser(accountName)?.displayName : accountName\">\n </mat-form-field>\n </div>\n </div>\n </div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [\n UserChooserComponent,\n UserFormFieldComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class GuiModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAA,qCAAqC,GAA8B;AAC5E,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,IAAI;;;ACLF,MAAA,0CAA0C,GAAkC;AACrF,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;;;ACNF,IAAA,gBAGX;AAHD,CAAA,UAAY,eAAe,EAAA;IACvB,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;IACN,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACZ,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ACEY,MAAA,wBAAwB,GAAoB;AACrD,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,2BAA2B,EAAE,KAAK;AAClC,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,gBAAgB;IAEvB,IAAI,EAAE,eAAe,CAAC,MAAM;AAC5B,IAAA,iBAAiB,EAAE,KAAK;AAExB,IAAA,aAAa,EAAE,qCAAqC;AAEpD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,aAAa,EAAE,0CAA0C;;;MCGhD,oBAAoB,CAAA;;;AAqC/B,IAAA,WAAA,CAA4C,IAAqB,EAC7C,SAA6C,EAC7C,sBAA8C,EAC9C,iBAAoC,EAAA;AAHZ,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;AAC7C,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoC;AAC7C,QAAA,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;AAC9C,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AAtC3B,QAAA,IAAa,CAAA,aAAA,GAA4B,IAAI,CAAC;AAE3E,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,SAAS,CAAC;YACzB,MAAM,EAAE,IAAI,WAAW,EAAE;AAC1B,SAAA,CAAC,CAAC;AAEH,QAAA,IAAU,CAAA,UAAA,GAA8C,IAAI,CAAC;AAC7D,QAAA,IAAM,CAAA,MAAA,GAAuB,IAAI,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAmB,IAAI,CAAC;AAgChB,QAAA,IAAI,CAAC,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACJ,wBAAwB,CACxB,EAAA,IAAI,CACR,CAAA;KACd;;;AAhCD,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,CAAC;KACpD;AAED,IAAA,IAAI,eAAe,GAAA;;QACjB,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;KACrC;AAED,IAAA,IAAI,cAAc,GAAA;;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;YAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;KAC3C;IAeD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;AAIA,IAAA,oBAAoB,CAAC,OAAwB,EAAA;QAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM;YAC3C,IAAI,CAAC,eAAe,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAC9B;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,MAAqB,EAAA;;AAC1C,QAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAM,MAAM,CAAC,KAAwB,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;AAErH,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,SAAA;KACF;AAED,IAAA,qBAAqB,CAAC,QAAiB,EAAA;;QACrC,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,GAAG,IAAI,CAAC,CAAC;KAC9E;IAED,SAAS,GAAA;;AACP,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,EAAE,CAAC;AAEhC,QAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAClE,SAAA;KACF;IAED,WAAW,GAAA;;AACT,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;KACnC;;;IAIO,OAAO,GAAA;AACb,QAAA,MAAM,eAAe,GAAsB;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK;;gBAEb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEnB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEjG,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM;;gBAEd,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;;QAGF,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/D,SAAA;QAGD,QAAQ,CAAC,eAAe,CAAC;;aAEtB,SAAS,CAAC,IAAI,IAAG;;AAEhB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEnD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;AACxC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,IAAI,CAAC,eAAe;aACjB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAuB,CAAC;aACnC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAChE,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,IAAoB,EAAA;;QAC3B,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,CAAC,IAAG;;AAC3B,YAAA,OAAA,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;AACxE,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClE,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,0CAAE,WAAW,EAAE,MAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAA;SAAA,CAC1D,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;KAClB;;AAGO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY;aAC9B,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACjG,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE7B,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;;YACnB,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;AAC1E,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAE7B,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;aAC7B,OAAO,CAAC,UAAU,IAAG;YACpB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,MAAK,UAAU,CAAC,WAAW,EAAE,CAAA,EAAA,CAAC,CAAC;AAElG,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,KAAK,IAAG;YACf,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,MAAK,KAAK,CAAC,WAAW,EAAE,CAAA,EAAA,CAAC,CAAC;AAExF,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;;AAIO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;QACvD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAE9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAChD,WAAW,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAChE,CAAC,CAAC;KACN;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;QACtD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;AAE7C,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,cAC9C,OAAA,UAAU,CAAC,WAAW,EAAE,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CAAA,CAAA,EAAA,CAC5D,CAAC,CAAC;KACN;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;QACjD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AAExC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,cACpC,OAAA,KAAK,CAAC,WAAW,EAAE,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CAAA,CAAA,EAAA,CAClD,CAAC,CAAC;KACN;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YACvC,OAAO,KAAK,CAAC;AACd,SAAA;;;AAID,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;;YACnB,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;YAEvB,KAAK;iBACF,MAAM,CAAC,IAAI,IACR,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAC/E;iBACA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;;AAGL,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,aAAa,CAAC;KACtB;;;AAIO,IAAA,2BAA2B,CAAC,KAAuB,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;aACjC,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,0BAA0B,CAAC,KAAuB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;AAChC,aAAA,OAAO,CAAC,UAAU,IACjB,KAAK;aACF,MAAM,CAAC,CAAC,cAAI,OAAA,CAAA,MAAA,CAAC,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,UAAU,CAAC,WAAW,EAAE,CAAA,EAAA,CAAC;AACrE,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,qBAAqB,CAAC,KAAuB,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;AAC3B,aAAA,OAAO,CAAC,KAAK,IACZ,KAAK;aACF,MAAM,CAAC,CAAC,cAAI,OAAA,CAAA,MAAA,CAAC,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,KAAK,CAAC,WAAW,EAAE,CAAA,EAAA,CAAC;AAC3D,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;aAC3B,OAAO,CAAC,SAAS,IAAG;;YACnB,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAEtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,IAAoB,EAAE,MAAc,KAAI;YACzE,IAAI,MAAM,KAAK,iBAAiB,EAAE;gBAChC,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,gBAAA,MAAM,gBAAgB,GAAG,CAAE,aAAa,CAAE,CAAC;AAC3C,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACxC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACjC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACtC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC1C,iBAAA;;gBAGD,gBAAgB;qBACb,OAAO,CAAC,KAAK,IAAG;;AAEf,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAC3C,KAAK,GAAG,IAAI,CAAC;AACd,qBAAA;AACH,iBAAC,CAAC,CAAC;;AAGL,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;;AAC9B,wBAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,wBAAA,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,IAAI,CAAC;AACd,yBAAA;AACH,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAED,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACH,SAAC,CAAC;KACH;IAEO,sBAAsB,GAAA;;QAC5B,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAY,CACxC,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,CAElB,CAAA,SAAS,CAAC,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,IAAI,CAAC,UAAW,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,0CAAE,IAAI,EAAA,CAAG,WAAW,EAAE,CAAA,EAAA,CAAC,CAAC;KAClG;AAED,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;AAC1C,YAAA,IAAI,CAAC,QAAQ;iBACV,GAAG,CAAC,OAAO,IAAG;;gBACb,OAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,MAAM,MACP,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,KAAK,IACV,KAAK,CAAC,iBAAiB,KAAK,OAAO,CACpC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAA;aAAA,CACR;iBACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,GAAG,CAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC;AACf,YAAA,EAAE,CAAC;KACN;;AA7YU,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAqCX,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGArCxB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEpB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB7B,20GAiFqB,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1DR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,20GAAA,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;;;8BA4CX,MAAM;+BAAC,eAAe,CAAA;;yBAnCN,aAAa,EAAA,CAAA;sBAAzC,SAAS;uBAAC,gBAAgB,CAAA;;;MERhB,sBAAsB,CAAA;;;AA0BjC,IAAA,WAAA,CAAoB,MAAiB,EACjB,sBAA8C,EAC9C,iBAAoC,EAAA;AAFpC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;AACjB,QAAA,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;AAC9C,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AA1B9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY,CAAC;AAC9C,QAAA,IAAW,CAAA,WAAA,GAAG,gBAAgB,CAAC;AAC/B,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAG1B;;;;AAIgC;AAEhC,QAAA,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;AAEpB,QAAA,IAAK,CAAA,KAAA,GAAuB,SAAS,CAAC;AACtC,QAAA,IAAM,CAAA,MAAA,GAA4B,SAAS,CAAC;KAYS;;;AAR7D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD;IAQD,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GACf,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,wBAAwB,GACxB,IAAI,CAAC,eAAe,CACxB,CAAA;;QAGD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;QAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;;;IAID,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;AAEhC,QAAA,MAAM,IAAI,GACL,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAA,EAAA,EAEvB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,GACpB,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI;SACX,CAAC;AACD,aAAA,WAAW,EAAE;aACb,SAAS,CAAC,YAAY,IAAG;YACxB,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE9B,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;;;IAIO,OAAO,GAAA;AACb,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,CAAC,eAAgB,CAAC,KAAK;;gBAEzB,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,KAAK,CAAC;;AAE/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC;AAEzH,YAAA,IAAI,CAAC,eAAgB,CAAC,MAAM;;gBAE1B,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC;;AAEhC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;aACC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,OAAO,CAAC,WAAmB,EAAA;;QACzB,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;KAC5F;AAED,IAAA,QAAQ,CAAC,WAAmB,EAAA;;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;AAAE,SAAA;QAEhC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,CAAC,IAAG;;AAC3B,YAAA,OAAA,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;AACxE,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClE,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,gBAAA,CAAA,CAAA,EAAA,GAAA,CAAC,CAAC,KAAK,0CAAE,WAAW,EAAE,MAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAA;SAAA,CAC1D,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;KAClB;;mHAtGU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,wMCjBnC,+7CA2BQ,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDVK,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+7CAAA,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,CAAA;qKAMjB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACE,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEoBK,SAAS,CAAA;;sGAAT,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAT,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,iBAvBlB,oBAAoB;AACpB,QAAA,sBAAsB,aAGtB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;AACd,QAAA,gBAAgB,aAGhB,oBAAoB;QACpB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAGb,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,YAnBlB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;QACd,gBAAgB,CAAA,EAAA,CAAA,CAAA;2FAOP,SAAS,EAAA,UAAA,EAAA,CAAA;kBAzBrB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;iBACF,CAAA;;;AC1CD;;AAEG;;;;"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-filter-options-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-pre-processing-group-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/cleavelandprice-ngx-lib-active-directory-gui.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const defaultUserChooserFilterOptionsConfig : UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n}","import { UserChooserPreProcessingGroup } from \"./user-chooser-pre-processing-group\";\r\n\r\nexport const defaultUserChooserPreProcessingGroupConfig: UserChooserPreProcessingGroup = {\r\n accountNames: [],\r\n departments: [],\r\n groups: [],\r\n titles: []\r\n}","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { defaultUserChooserFilterOptionsConfig } from \"./default-user-chooser-filter-options-config\";\r\nimport { defaultUserChooserPreProcessingGroupConfig } from \"./default-user-chooser-pre-processing-group-config\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const defaultUserChooserConfig: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n includeDisabledUsers: false,\r\n parentOu: undefined,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n\r\n mode: UserChooserMode.Single,\r\n returnUserObjects: false,\r\n\r\n filterOptions: defaultUserChooserFilterOptionsConfig,\r\n\r\n exclusions: defaultUserChooserPreProcessingGroupConfig,\r\n inclusions: defaultUserChooserPreProcessingGroupConfig,\r\n preSelections: defaultUserChooserPreProcessingGroupConfig\r\n}","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService, Group } from '@cleavelandprice/ngx-lib/active-directory';\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../public_api';\n\n@Component({\n selector: 'user-chooser',\n templateUrl: './user-chooser.component.html',\n styleUrls: [\n './user-chooser.component.css',\n '../../../../../styles/mat-icon.css'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n //#region Fields\n @ViewChild(MatSelectionList) selectionList: MatSelectionList | null = null;\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource: MatTableDataSource<SelectableUser> | null = null;\n photos: PhotoItem[] | null = null;\n groups: Group[] | null = null; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this.data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList?.options.filter(o => o.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return this.data.showGroupMembershipTooltips ||\n this.data.exclusions.groups.length > 0 ||\n this.data.inclusions.groups.length > 0 ||\n this.data.preSelections.groups.length > 0 ||\n this.data.filterOptions.groupMembership;\n }\n //#endregion\n\n //#region Lifecycle\n constructor(@Inject(MAT_DIALOG_DATA) public data: UserChooserData,\n private dialogRef: MatDialogRef<UserChooserComponent>,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) {\n\n this.data = {\n ...defaultUserChooserConfig,\n ...data\n }\n }\n\n ngOnInit(): void {\n this.getData();\n this.listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this.data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this.data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList?.selectAll();\n\n if (this.selectionList?.options) {\n this.listSelectionChanged(this.selectionList?.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n const dataObservables: Observable<any>[] = [\n this.data.users ?\n // Users were passed in\n of(this.data.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.data.includeDisabledUsers, this.data.parentOu),\n\n this.data.photos ?\n // Photos were passed in\n of(this.data.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n this.data.groups ?\n // Groups were passed in\n of(this.data.groups) :\n // Groups need to be retrieved\n dataObservables.push(this.activeDirectoryService.getGroups());\n }\n\n\n forkJoin(dataObservables)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ? data[2] : null;\n\n let users = data[0] as SelectableUser[];\n users = this.includeUsersByAccountName(users);\n users = this.includeUsersByGroupName(users);\n users = this.includeUsersByDepartment(users);\n users = this.includeUsersByTitle(users);\n\n users = this.excludeUsersByAccountName(users);\n users = this.excludeUsersByGroupName(users);\n users = this.excludeUsersByDepartment(users);\n users = this.excludeUsersByTitle(users);\n\n users = this.preSelectUsersByAccountName(users);\n users = this.preSelectUsersByGroupName(users);\n users = this.preSelectUsersByDepartment(users);\n users = this.preSelectUsersByTitle(users);\n\n this.dataSource = new MatTableDataSource(users);\n \n this.photos = data[1];\n\n this.setFilterPredicate();\n });\n }\n\n close(): void {\n this.dialogRef.close(\n this.selectedOptions\n .map(o => o.value as SelectableUser)\n .map(u => this.data.returnUserObjects ? u : u.sAMAccountName)\n );\n }\n\n getPhoto(user: SelectableUser): string | undefined {\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n private excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.accountNames\n .forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n private excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.departments\n .forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.titles\n .forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n private includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.accountNames.length === 0 || // No account inclusions specified\n\n this.data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n private includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.departments.length === 0 || // No department inclusions specified\n\n this.data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n private includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.titles.length === 0 || // No title inclusions specified\n\n this.data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n private includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this.data.inclusions.groups.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this.data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n private preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.accountNames\n .forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n private preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.departments\n .forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.titles\n .forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n private setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: SelectableUser, filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this.data.filterOptions.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this.data.filterOptions.title) {\n filterProperties.push('title');\n }\n if (this.data.filterOptions.department) {\n filterProperties.push('department');\n }\n if (this.data.filterOptions.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this.data.filterOptions.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n private listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(500)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser): string {\n return this.data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}\n","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ data.title }}</h2>\n\n <div>\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n <div *ngIf=\"!(dataSource && photos)\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n\n <ng-container *ngIf=\"dataSource && photos\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field *ngIf=\"dataSource\">\n <input matInput placeholder=\"Search\" formControlName=\"filter\">\n\n <button *ngIf=\"filterForm.value.filter\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n\n <mat-list-option *ngFor=\"let user of dataSource?.filteredData\" [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n\n <img *ngIf=\"getPhoto(user)\" matListAvatar alt=\"\" [src]=\"getPhoto(user)\">\n\n <mat-icon *ngIf=\"!getPhoto(user)\" matListAvatar class=\"no-photo\"\n fontIcon=\"account_circle\">\n </mat-icon>\n \n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n <div *ngIf=\"data.showPhone && user.telephoneNumber\">{{ user.telephoneNumber }}</div>\n </div>\n \n <div>{{ user.department }}</div>\n \n <div class=\"title\">{{ user.title }}</div>\n </div>\n </mat-list-option>\n </mat-selection-list>\n </ng-container>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"dataSource && photos\">\n <mat-slide-toggle *ngIf=\"selectedOptions.length\" (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n *ngIf=\"isMultiMode\">\n <mat-icon fontIcon=\"select_all\"></mat-icon>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n \n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n *ngIf=\"isMultiMode && selectedOptions.length\">\n <mat-icon fontIcon=\"clear_all\"></mat-icon>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"></mat-icon>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n </ng-container>\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\n\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'user-form-field',\n templateUrl: './user-form-field.component.html',\n styleUrls: ['./user-form-field.component.css']\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n @Output() usersSelected = new EventEmitter<string[]>();\n @Input() placeholder = 'Select User(s)';\n @Input() clickable = true;\n\n @Input() userChooserData!: UserChooserData;\n /*\n @Input() mode = UserChooserMode.Multiple;\n @Input() preSelectAccountNames = true;\n @Input() includeDisabledUsers = false;\n @Input() parentOu = undefined;*/\n\n accountNames: string[] = [];\n\n private users: User[] | undefined = undefined;\n private photos: PhotoItem[] | undefined = undefined;\n //#endregion\n\n //#region Properties\n get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }\n //#endregion\n \n //#region Lifecycle\n constructor(private dialog: MatDialog,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) { }\n\n ngOnInit(): void {\n this.userChooserData = {\n ...defaultUserChooserConfig,\n ...this.userChooserData\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this.userChooserData.preSelections.accountNames;\n\n this.getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable) { return; }\n\n const data: UserChooserData = {\n ...this.userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe(accountNames => {\n if (!accountNames) { return; }\n\n this.accountNames = accountNames;\n this.usersSelected.emit(accountNames);\n });\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n forkJoin([\n this.userChooserData!.users ?\n // Users were passed in\n of(this.userChooserData!.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.userChooserData!.includeDisabledUsers, this.userChooserData!.parentOu),\n\n this.userChooserData!.photos ?\n // Photos were passed in\n of(this.userChooserData!.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ])\n .subscribe(([users, photos]) => {\n this.users = users;\n this.photos = photos;\n });\n }\n\n getUser(accountName: string): User | undefined {\n return this.users?.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}\n","<!-- In Microsoft Edge, selectEmployee() never gets called if the input fields are disabled\n So... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\n It's definitely a better experience if the field IS disabled.\n Otherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n\n<div (click)=\"selectUser()\" [class.clickable]=\"clickable\">\n <mat-form-field *ngIf=\"!accountNames?.length\">\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"placeholder\">\n </mat-form-field>\n \n <div *ngIf=\"accountNames?.length\"\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\n <div *ngFor=\"let accountName of accountNames; let i=index\" class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n <img *ngIf=\"getPhoto(accountName)\" matListAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n \n <mat-form-field>\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"i === 0 ? placeholder : ''\"\n [value]=\"accountName ? getUser(accountName)?.displayName : accountName\">\n </mat-form-field>\n </div>\n </div>\n </div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [\n UserChooserComponent,\n UserFormFieldComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class GuiModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i6","i7"],"mappings":"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"}
@@ -152,7 +152,11 @@ class UserChooserComponent {
152
152
  ];
153
153
  // Do we need AD groups?
154
154
  if (this.adGroupsNeeded) {
155
- dataObservables.push(this.activeDirectoryService.getGroups());
155
+ this.data.groups ?
156
+ // Groups were passed in
157
+ of(this.data.groups) :
158
+ // Groups need to be retrieved
159
+ dataObservables.push(this.activeDirectoryService.getGroups());
156
160
  }
157
161
  forkJoin(dataObservables)
158
162
  //.subscribe(([users, photos]) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-filter-options-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-pre-processing-group-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/cleavelandprice-ngx-lib-active-directory-gui.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const defaultUserChooserFilterOptionsConfig : UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n}","import { UserChooserPreProcessingGroup } from \"./user-chooser-pre-processing-group\";\r\n\r\nexport const defaultUserChooserPreProcessingGroupConfig: UserChooserPreProcessingGroup = {\r\n accountNames: [],\r\n departments: [],\r\n groups: [],\r\n titles: []\r\n}","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { defaultUserChooserFilterOptionsConfig } from \"./default-user-chooser-filter-options-config\";\r\nimport { defaultUserChooserPreProcessingGroupConfig } from \"./default-user-chooser-pre-processing-group-config\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const defaultUserChooserConfig: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n includeDisabledUsers: false,\r\n parentOu: undefined,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n\r\n mode: UserChooserMode.Single,\r\n returnUserObjects: false,\r\n\r\n filterOptions: defaultUserChooserFilterOptionsConfig,\r\n\r\n exclusions: defaultUserChooserPreProcessingGroupConfig,\r\n inclusions: defaultUserChooserPreProcessingGroupConfig,\r\n preSelections: defaultUserChooserPreProcessingGroupConfig\r\n}","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService, Group } from '@cleavelandprice/ngx-lib/active-directory';\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../public_api';\n\n@Component({\n selector: 'user-chooser',\n templateUrl: './user-chooser.component.html',\n styleUrls: [\n './user-chooser.component.css',\n '../../../../../styles/mat-icon.css'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n //#region Fields\n @ViewChild(MatSelectionList) selectionList: MatSelectionList | null = null;\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource: MatTableDataSource<SelectableUser> | null = null;\n photos: PhotoItem[] | null = null;\n groups: Group[] | null = null; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this.data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList?.options.filter(o => o.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return this.data.showGroupMembershipTooltips ||\n this.data.exclusions.groups.length > 0 ||\n this.data.inclusions.groups.length > 0 ||\n this.data.preSelections.groups.length > 0 ||\n this.data.filterOptions.groupMembership;\n }\n //#endregion\n\n //#region Lifecycle\n constructor(@Inject(MAT_DIALOG_DATA) public data: UserChooserData,\n private dialogRef: MatDialogRef<UserChooserComponent>,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) {\n\n this.data = {\n ...defaultUserChooserConfig,\n ...data\n }\n }\n\n ngOnInit(): void {\n this.getData();\n this.listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this.data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this.data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList?.selectAll();\n\n if (this.selectionList?.options) {\n this.listSelectionChanged(this.selectionList?.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n const dataObservables: Observable<any>[] = [\n this.data.users ?\n // Users were passed in\n of(this.data.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.data.includeDisabledUsers, this.data.parentOu),\n\n this.data.photos ?\n // Photos were passed in\n of(this.data.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n dataObservables.push(this.activeDirectoryService.getGroups());\n }\n\n\n forkJoin(dataObservables)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ? data[2] : null;\n\n let users = data[0] as SelectableUser[];\n users = this.includeUsersByAccountName(users);\n users = this.includeUsersByGroupName(users);\n users = this.includeUsersByDepartment(users);\n users = this.includeUsersByTitle(users);\n\n users = this.excludeUsersByAccountName(users);\n users = this.excludeUsersByGroupName(users);\n users = this.excludeUsersByDepartment(users);\n users = this.excludeUsersByTitle(users);\n\n users = this.preSelectUsersByAccountName(users);\n users = this.preSelectUsersByGroupName(users);\n users = this.preSelectUsersByDepartment(users);\n users = this.preSelectUsersByTitle(users);\n\n this.dataSource = new MatTableDataSource(users);\n \n this.photos = data[1];\n\n this.setFilterPredicate();\n });\n }\n\n close(): void {\n this.dialogRef.close(\n this.selectedOptions\n .map(o => o.value as SelectableUser)\n .map(u => this.data.returnUserObjects ? u : u.sAMAccountName)\n );\n }\n\n getPhoto(user: SelectableUser): string | undefined {\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n private excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.accountNames\n .forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n private excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.departments\n .forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.titles\n .forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n private includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.accountNames.length === 0 || // No account inclusions specified\n\n this.data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n private includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.departments.length === 0 || // No department inclusions specified\n\n this.data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n private includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.titles.length === 0 || // No title inclusions specified\n\n this.data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n private includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this.data.inclusions.groups.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this.data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n private preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.accountNames\n .forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n private preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.departments\n .forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.titles\n .forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n private setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: SelectableUser, filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this.data.filterOptions.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this.data.filterOptions.title) {\n filterProperties.push('title');\n }\n if (this.data.filterOptions.department) {\n filterProperties.push('department');\n }\n if (this.data.filterOptions.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this.data.filterOptions.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n private listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(500)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser): string {\n return this.data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}\n","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ data.title }}</h2>\n\n <div>\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n <div *ngIf=\"!(dataSource && photos)\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n\n <ng-container *ngIf=\"dataSource && photos\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field *ngIf=\"dataSource\">\n <input matInput placeholder=\"Search\" formControlName=\"filter\">\n\n <button *ngIf=\"filterForm.value.filter\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n\n <mat-list-option *ngFor=\"let user of dataSource?.filteredData\" [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n\n <img *ngIf=\"getPhoto(user)\" matListAvatar alt=\"\" [src]=\"getPhoto(user)\">\n\n <mat-icon *ngIf=\"!getPhoto(user)\" matListAvatar class=\"no-photo\"\n fontIcon=\"account_circle\">\n </mat-icon>\n \n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n <div *ngIf=\"data.showPhone && user.telephoneNumber\">{{ user.telephoneNumber }}</div>\n </div>\n \n <div>{{ user.department }}</div>\n \n <div class=\"title\">{{ user.title }}</div>\n </div>\n </mat-list-option>\n </mat-selection-list>\n </ng-container>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"dataSource && photos\">\n <mat-slide-toggle *ngIf=\"selectedOptions.length\" (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n *ngIf=\"isMultiMode\">\n <mat-icon fontIcon=\"select_all\"></mat-icon>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n \n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n *ngIf=\"isMultiMode && selectedOptions.length\">\n <mat-icon fontIcon=\"clear_all\"></mat-icon>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"></mat-icon>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n </ng-container>\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\n\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'user-form-field',\n templateUrl: './user-form-field.component.html',\n styleUrls: ['./user-form-field.component.css']\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n @Output() usersSelected = new EventEmitter<string[]>();\n @Input() placeholder = 'Select User(s)';\n @Input() clickable = true;\n\n @Input() userChooserData!: UserChooserData;\n /*\n @Input() mode = UserChooserMode.Multiple;\n @Input() preSelectAccountNames = true;\n @Input() includeDisabledUsers = false;\n @Input() parentOu = undefined;*/\n\n accountNames: string[] = [];\n\n private users: User[] | undefined = undefined;\n private photos: PhotoItem[] | undefined = undefined;\n //#endregion\n\n //#region Properties\n get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }\n //#endregion\n \n //#region Lifecycle\n constructor(private dialog: MatDialog,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) { }\n\n ngOnInit(): void {\n this.userChooserData = {\n ...defaultUserChooserConfig,\n ...this.userChooserData\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this.userChooserData.preSelections.accountNames;\n\n this.getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable) { return; }\n\n const data: UserChooserData = {\n ...this.userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe(accountNames => {\n if (!accountNames) { return; }\n\n this.accountNames = accountNames;\n this.usersSelected.emit(accountNames);\n });\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n forkJoin([\n this.userChooserData!.users ?\n // Users were passed in\n of(this.userChooserData!.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.userChooserData!.includeDisabledUsers, this.userChooserData!.parentOu),\n\n this.userChooserData!.photos ?\n // Photos were passed in\n of(this.userChooserData!.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ])\n .subscribe(([users, photos]) => {\n this.users = users;\n this.photos = photos;\n });\n }\n\n getUser(accountName: string): User | undefined {\n return this.users?.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}\n","<!-- In Microsoft Edge, selectEmployee() never gets called if the input fields are disabled\n So... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\n It's definitely a better experience if the field IS disabled.\n Otherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n\n<div (click)=\"selectUser()\" [class.clickable]=\"clickable\">\n <mat-form-field *ngIf=\"!accountNames?.length\">\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"placeholder\">\n </mat-form-field>\n \n <div *ngIf=\"accountNames?.length\"\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\n <div *ngFor=\"let accountName of accountNames; let i=index\" class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n <img *ngIf=\"getPhoto(accountName)\" matListAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n \n <mat-form-field>\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"i === 0 ? placeholder : ''\"\n [value]=\"accountName ? getUser(accountName)?.displayName : accountName\">\n </mat-form-field>\n </div>\n </div>\n </div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [\n UserChooserComponent,\n UserFormFieldComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class GuiModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAA,qCAAqC,GAA8B;AAC5E,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,IAAI;;;ACLF,MAAA,0CAA0C,GAAkC;AACrF,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;;;ICNF,gBAGX;AAHD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACZ,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ACEY,MAAA,wBAAwB,GAAoB;AACrD,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,2BAA2B,EAAE,KAAK;AAClC,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,gBAAgB;IAEvB,IAAI,EAAE,eAAe,CAAC,MAAM;AAC5B,IAAA,iBAAiB,EAAE,KAAK;AAExB,IAAA,aAAa,EAAE,qCAAqC;AAEpD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,aAAa,EAAE,0CAA0C;;;MCGhD,oBAAoB,CAAA;;;AAqC/B,IAAA,WAAA,CAA4C,IAAqB,EAC7C,SAA6C,EAC7C,sBAA8C,EAC9C,iBAAoC,EAAA;QAHZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAC7C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoC;QAC7C,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;QAtC3B,IAAa,CAAA,aAAA,GAA4B,IAAI,CAAC;QAE3E,IAAU,CAAA,UAAA,GAAG,IAAI,SAAS,CAAC;YACzB,MAAM,EAAE,IAAI,WAAW,EAAE;AAC1B,SAAA,CAAC,CAAC;QAEH,IAAU,CAAA,UAAA,GAA8C,IAAI,CAAC;QAC7D,IAAM,CAAA,MAAA,GAAuB,IAAI,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAmB,IAAI,CAAC;QAgChB,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,GAAG,wBAAwB;AAC3B,YAAA,GAAG,IAAI;SACR,CAAA;KACd;;;AAhCD,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,CAAC;KACpD;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;KACrC;AAED,IAAA,IAAI,cAAc,GAAA;;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;YAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;KAC3C;IAeD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;AAIA,IAAA,oBAAoB,CAAC,OAAwB,EAAA;QAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM;YAC3C,IAAI,CAAC,eAAe,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAC9B;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,MAAqB,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI;aAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAM,MAAM,CAAC,KAAwB,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;AAErH,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,SAAA;KACF;AAED,IAAA,qBAAqB,CAAC,QAAiB,EAAA;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,GAAG,IAAI,CAAC,CAAC;KAC9E;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAClE,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;KACnC;;;IAIO,OAAO,GAAA;AACb,QAAA,MAAM,eAAe,GAAsB;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK;;gBAEb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEnB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEjG,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM;;gBAEd,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;;QAGF,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/D,SAAA;QAGD,QAAQ,CAAC,eAAe,CAAC;;aAEtB,SAAS,CAAC,IAAI,IAAG;;AAEhB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEnD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;AACxC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,IAAI,CAAC,eAAe;aACjB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAuB,CAAC;aACnC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAChE,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,IAAoB,EAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IACxB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;YACxE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,YAAA,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1D,EAAE,aAAa,CAAC;KAClB;;AAGO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY;aAC9B,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACjG,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE7B,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;AAC1E,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAE7B,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;aAC7B,OAAO,CAAC,UAAU,IAAG;YACpB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElG,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,KAAK,IAAG;YACf,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAExF,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;;AAIO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;QACvD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAE9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAChD,WAAW,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAChE,CAAC,CAAC;KACN;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;QACtD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAE7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAC9C,UAAU,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAC5D,CAAC,CAAC;KACN;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;QACjD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IACpC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAClD,CAAC,CAAC;KACN;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YACvC,OAAO,KAAK,CAAC;AACd,SAAA;;;AAID,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;YAEvB,KAAK;iBACF,MAAM,CAAC,IAAI,IACR,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAC/E;iBACA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;;AAGL,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,aAAa,CAAC;KACtB;;;AAIO,IAAA,2BAA2B,CAAC,KAAuB,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;aACjC,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,0BAA0B,CAAC,KAAuB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;AAChC,aAAA,OAAO,CAAC,UAAU,IACjB,KAAK;AACF,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AACrE,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,qBAAqB,CAAC,KAAuB,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;AAC3B,aAAA,OAAO,CAAC,KAAK,IACZ,KAAK;AACF,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;AAC3D,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;aAC3B,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAEtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,IAAoB,EAAE,MAAc,KAAI;YACzE,IAAI,MAAM,KAAK,iBAAiB,EAAE;gBAChC,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,gBAAA,MAAM,gBAAgB,GAAG,CAAE,aAAa,CAAE,CAAC;AAC3C,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACxC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACjC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACtC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC1C,iBAAA;;gBAGD,gBAAgB;qBACb,OAAO,CAAC,KAAK,IAAG;;AAEf,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAC3C,KAAK,GAAG,IAAI,CAAC;AACd,qBAAA;AACH,iBAAC,CAAC,CAAC;;AAGL,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;wBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,wBAAA,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,IAAI,CAAC;AACd,yBAAA;AACH,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAED,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACH,SAAC,CAAC;KACH;IAEO,sBAAsB,GAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY;AACxC,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,CAClB;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,UAAW,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;KAClG;AAED,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;AAC1C,YAAA,IAAI,CAAC,QAAQ;AACV,iBAAA,GAAG,CAAC,OAAO,IACV,IAAI,CAAC,MAAM;AACT,kBAAE,IAAI,CAAC,KAAK,IACV,KAAK,CAAC,iBAAiB,KAAK,OAAO,CACpC,EAAE,IAAI,CACR;iBACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,GAAG,CAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC;AACf,YAAA,EAAE,CAAC;KACN;;AA7YU,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAqCX,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGArCxB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEpB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB7B,20GAiFqB,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1DR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,20GAAA,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;;0BA4CX,MAAM;2BAAC,eAAe,CAAA;4IAnCN,aAAa,EAAA,CAAA;sBAAzC,SAAS;uBAAC,gBAAgB,CAAA;;;MERhB,sBAAsB,CAAA;;;AA0BjC,IAAA,WAAA,CAAoB,MAAiB,EACjB,sBAA8C,EAC9C,iBAAoC,EAAA;QAFpC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AA1B9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY,CAAC;QAC9C,IAAW,CAAA,WAAA,GAAG,gBAAgB,CAAC;QAC/B,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAG1B;;;;AAIgC;QAEhC,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;QAEpB,IAAK,CAAA,KAAA,GAAuB,SAAS,CAAC;QACtC,IAAM,CAAA,MAAA,GAA4B,SAAS,CAAC;KAYS;;;AAR7D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD;IAQD,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GAAG;AACrB,YAAA,GAAG,wBAAwB;YAC3B,GAAG,IAAI,CAAC,eAAe;SACxB,CAAA;;QAGD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;QAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;;;IAID,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;AAEhC,QAAA,MAAM,IAAI,GAAoB;YAC5B,GAAG,IAAI,CAAC,eAAe;YAEvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI;SACX,CAAC;AACD,aAAA,WAAW,EAAE;aACb,SAAS,CAAC,YAAY,IAAG;YACxB,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE9B,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;;;IAIO,OAAO,GAAA;AACb,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,CAAC,eAAgB,CAAC,KAAK;;gBAEzB,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,KAAK,CAAC;;AAE/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC;AAEzH,YAAA,IAAI,CAAC,eAAgB,CAAC,MAAM;;gBAE1B,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC;;AAEhC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;aACC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,OAAO,CAAC,WAAmB,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;KAC5F;AAED,IAAA,QAAQ,CAAC,WAAmB,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;AAAE,SAAA;QAEhC,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IACxB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;YACxE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,YAAA,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1D,EAAE,aAAa,CAAC;KAClB;;mHAtGU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,wMCjBnC,+7CA2BQ,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDVK,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+7CAAA,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,CAAA;qKAMjB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACE,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEoBK,SAAS,CAAA;;sGAAT,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAT,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,iBAvBlB,oBAAoB;AACpB,QAAA,sBAAsB,aAGtB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;AACd,QAAA,gBAAgB,aAGhB,oBAAoB;QACpB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAGb,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,YAnBlB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;QACd,gBAAgB,CAAA,EAAA,CAAA,CAAA;2FAOP,SAAS,EAAA,UAAA,EAAA,CAAA;kBAzBrB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;AACF,iBAAA,CAAA;;;AC1CD;;AAEG;;;;"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-gui.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-filter-options-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-pre-processing-group-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/model/default-user-chooser-config.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/gui.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/gui/src/cleavelandprice-ngx-lib-active-directory-gui.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const defaultUserChooserFilterOptionsConfig : UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n}","import { UserChooserPreProcessingGroup } from \"./user-chooser-pre-processing-group\";\r\n\r\nexport const defaultUserChooserPreProcessingGroupConfig: UserChooserPreProcessingGroup = {\r\n accountNames: [],\r\n departments: [],\r\n groups: [],\r\n titles: []\r\n}","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { defaultUserChooserFilterOptionsConfig } from \"./default-user-chooser-filter-options-config\";\r\nimport { defaultUserChooserPreProcessingGroupConfig } from \"./default-user-chooser-pre-processing-group-config\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const defaultUserChooserConfig: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n includeDisabledUsers: false,\r\n parentOu: undefined,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n\r\n mode: UserChooserMode.Single,\r\n returnUserObjects: false,\r\n\r\n filterOptions: defaultUserChooserFilterOptionsConfig,\r\n\r\n exclusions: defaultUserChooserPreProcessingGroupConfig,\r\n inclusions: defaultUserChooserPreProcessingGroupConfig,\r\n preSelections: defaultUserChooserPreProcessingGroupConfig\r\n}","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService, Group } from '@cleavelandprice/ngx-lib/active-directory';\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../public_api';\n\n@Component({\n selector: 'user-chooser',\n templateUrl: './user-chooser.component.html',\n styleUrls: [\n './user-chooser.component.css',\n '../../../../../styles/mat-icon.css'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n //#region Fields\n @ViewChild(MatSelectionList) selectionList: MatSelectionList | null = null;\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource: MatTableDataSource<SelectableUser> | null = null;\n photos: PhotoItem[] | null = null;\n groups: Group[] | null = null; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this.data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList?.options.filter(o => o.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return this.data.showGroupMembershipTooltips ||\n this.data.exclusions.groups.length > 0 ||\n this.data.inclusions.groups.length > 0 ||\n this.data.preSelections.groups.length > 0 ||\n this.data.filterOptions.groupMembership;\n }\n //#endregion\n\n //#region Lifecycle\n constructor(@Inject(MAT_DIALOG_DATA) public data: UserChooserData,\n private dialogRef: MatDialogRef<UserChooserComponent>,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) {\n\n this.data = {\n ...defaultUserChooserConfig,\n ...data\n }\n }\n\n ngOnInit(): void {\n this.getData();\n this.listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this.data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this.data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList?.selectAll();\n\n if (this.selectionList?.options) {\n this.listSelectionChanged(this.selectionList?.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n const dataObservables: Observable<any>[] = [\n this.data.users ?\n // Users were passed in\n of(this.data.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.data.includeDisabledUsers, this.data.parentOu),\n\n this.data.photos ?\n // Photos were passed in\n of(this.data.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n this.data.groups ?\n // Groups were passed in\n of(this.data.groups) :\n // Groups need to be retrieved\n dataObservables.push(this.activeDirectoryService.getGroups());\n }\n\n\n forkJoin(dataObservables)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ? data[2] : null;\n\n let users = data[0] as SelectableUser[];\n users = this.includeUsersByAccountName(users);\n users = this.includeUsersByGroupName(users);\n users = this.includeUsersByDepartment(users);\n users = this.includeUsersByTitle(users);\n\n users = this.excludeUsersByAccountName(users);\n users = this.excludeUsersByGroupName(users);\n users = this.excludeUsersByDepartment(users);\n users = this.excludeUsersByTitle(users);\n\n users = this.preSelectUsersByAccountName(users);\n users = this.preSelectUsersByGroupName(users);\n users = this.preSelectUsersByDepartment(users);\n users = this.preSelectUsersByTitle(users);\n\n this.dataSource = new MatTableDataSource(users);\n \n this.photos = data[1];\n\n this.setFilterPredicate();\n });\n }\n\n close(): void {\n this.dialogRef.close(\n this.selectedOptions\n .map(o => o.value as SelectableUser)\n .map(u => this.data.returnUserObjects ? u : u.sAMAccountName)\n );\n }\n\n getPhoto(user: SelectableUser): string | undefined {\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n private excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.accountNames\n .forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n private excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.departments\n .forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n private excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.exclusions.titles\n .forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n private includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.accountNames.length === 0 || // No account inclusions specified\n\n this.data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n private includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.departments.length === 0 || // No department inclusions specified\n\n this.data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n private includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n this.data.inclusions.titles.length === 0 || // No title inclusions specified\n\n this.data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n private includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this.data.inclusions.groups.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this.data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n private preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.accountNames\n .forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n private preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.departments\n .forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.titles\n .forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n private preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this.data.preSelections.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n private setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: SelectableUser, filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this.data.filterOptions.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this.data.filterOptions.title) {\n filterProperties.push('title');\n }\n if (this.data.filterOptions.department) {\n filterProperties.push('department');\n }\n if (this.data.filterOptions.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this.data.filterOptions.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n private listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(500)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser): string {\n return this.data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}\n","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ data.title }}</h2>\n\n <div>\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n <div *ngIf=\"!(dataSource && photos)\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n\n <ng-container *ngIf=\"dataSource && photos\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field *ngIf=\"dataSource\">\n <input matInput placeholder=\"Search\" formControlName=\"filter\">\n\n <button *ngIf=\"filterForm.value.filter\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n\n <mat-list-option *ngFor=\"let user of dataSource?.filteredData\" [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n\n <img *ngIf=\"getPhoto(user)\" matListAvatar alt=\"\" [src]=\"getPhoto(user)\">\n\n <mat-icon *ngIf=\"!getPhoto(user)\" matListAvatar class=\"no-photo\"\n fontIcon=\"account_circle\">\n </mat-icon>\n \n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n <div *ngIf=\"data.showPhone && user.telephoneNumber\">{{ user.telephoneNumber }}</div>\n </div>\n \n <div>{{ user.department }}</div>\n \n <div class=\"title\">{{ user.title }}</div>\n </div>\n </mat-list-option>\n </mat-selection-list>\n </ng-container>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"dataSource && photos\">\n <mat-slide-toggle *ngIf=\"selectedOptions.length\" (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n *ngIf=\"isMultiMode\">\n <mat-icon fontIcon=\"select_all\"></mat-icon>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n \n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n *ngIf=\"isMultiMode && selectedOptions.length\">\n <mat-icon fontIcon=\"clear_all\"></mat-icon>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!selectedOptions.length\">\n <mat-icon fontIcon=\"check\"></mat-icon>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n </ng-container>\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { defaultUserChooserConfig } from '../../model/default-user-chooser-config';\n\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'user-form-field',\n templateUrl: './user-form-field.component.html',\n styleUrls: ['./user-form-field.component.css']\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n @Output() usersSelected = new EventEmitter<string[]>();\n @Input() placeholder = 'Select User(s)';\n @Input() clickable = true;\n\n @Input() userChooserData!: UserChooserData;\n /*\n @Input() mode = UserChooserMode.Multiple;\n @Input() preSelectAccountNames = true;\n @Input() includeDisabledUsers = false;\n @Input() parentOu = undefined;*/\n\n accountNames: string[] = [];\n\n private users: User[] | undefined = undefined;\n private photos: PhotoItem[] | undefined = undefined;\n //#endregion\n\n //#region Properties\n get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }\n //#endregion\n \n //#region Lifecycle\n constructor(private dialog: MatDialog,\n private activeDirectoryService: ActiveDirectoryService,\n private sharePointService: SharePointService) { }\n\n ngOnInit(): void {\n this.userChooserData = {\n ...defaultUserChooserConfig,\n ...this.userChooserData\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this.userChooserData.preSelections.accountNames;\n\n this.getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable) { return; }\n\n const data: UserChooserData = {\n ...this.userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe(accountNames => {\n if (!accountNames) { return; }\n\n this.accountNames = accountNames;\n this.usersSelected.emit(accountNames);\n });\n }\n //#endregion\n\n //#region Utilities\n private getData(): void {\n forkJoin([\n this.userChooserData!.users ?\n // Users were passed in\n of(this.userChooserData!.users) :\n // Users need to be retrieved\n this.activeDirectoryService.getUsers(false, this.userChooserData!.includeDisabledUsers, this.userChooserData!.parentOu),\n\n this.userChooserData!.photos ?\n // Photos were passed in\n of(this.userChooserData!.photos) :\n // Photos need to be retrieved\n this.sharePointService.getPhotos()\n ])\n .subscribe(([users, photos]) => {\n this.users = users;\n this.photos = photos;\n });\n }\n\n getUser(accountName: string): User | undefined {\n return this.users?.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}\n","<!-- In Microsoft Edge, selectEmployee() never gets called if the input fields are disabled\n So... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\n It's definitely a better experience if the field IS disabled.\n Otherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n\n<div (click)=\"selectUser()\" [class.clickable]=\"clickable\">\n <mat-form-field *ngIf=\"!accountNames?.length\">\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"placeholder\">\n </mat-form-field>\n \n <div *ngIf=\"accountNames?.length\"\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\n <div *ngFor=\"let accountName of accountNames; let i=index\" class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n <img *ngIf=\"getPhoto(accountName)\" matListAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n \n <mat-form-field>\n <input matInput [disabled]=\"!isEdge\" [placeholder]=\"i === 0 ? placeholder : ''\"\n [value]=\"accountName ? getUser(accountName)?.displayName : accountName\">\n </mat-form-field>\n </div>\n </div>\n </div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [\n UserChooserComponent,\n UserFormFieldComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class GuiModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAA,qCAAqC,GAA8B;AAC5E,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,IAAI;;;ACLF,MAAA,0CAA0C,GAAkC;AACrF,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;;;ICNF,gBAGX;AAHD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACZ,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ACEY,MAAA,wBAAwB,GAAoB;AACrD,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,2BAA2B,EAAE,KAAK;AAClC,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,gBAAgB;IAEvB,IAAI,EAAE,eAAe,CAAC,MAAM;AAC5B,IAAA,iBAAiB,EAAE,KAAK;AAExB,IAAA,aAAa,EAAE,qCAAqC;AAEpD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,UAAU,EAAE,0CAA0C;AACtD,IAAA,aAAa,EAAE,0CAA0C;;;MCGhD,oBAAoB,CAAA;;;AAqC/B,IAAA,WAAA,CAA4C,IAAqB,EAC7C,SAA6C,EAC7C,sBAA8C,EAC9C,iBAAoC,EAAA;QAHZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAC7C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoC;QAC7C,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;QAtC3B,IAAa,CAAA,aAAA,GAA4B,IAAI,CAAC;QAE3E,IAAU,CAAA,UAAA,GAAG,IAAI,SAAS,CAAC;YACzB,MAAM,EAAE,IAAI,WAAW,EAAE;AAC1B,SAAA,CAAC,CAAC;QAEH,IAAU,CAAA,UAAA,GAA8C,IAAI,CAAC;QAC7D,IAAM,CAAA,MAAA,GAAuB,IAAI,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAmB,IAAI,CAAC;QAgChB,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,GAAG,wBAAwB;AAC3B,YAAA,GAAG,IAAI;SACR,CAAA;KACd;;;AAhCD,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,CAAC;KACpD;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAClE;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;KACrC;AAED,IAAA,IAAI,cAAc,GAAA;;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;YAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;KAC3C;IAeD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;AAIA,IAAA,oBAAoB,CAAC,OAAwB,EAAA;QAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM;YAC3C,IAAI,CAAC,eAAe,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAC9B;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;KACF;AAED,IAAA,sBAAsB,CAAC,MAAqB,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI;aAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAM,MAAM,CAAC,KAAwB,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;AAErH,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,SAAA;KACF;AAED,IAAA,qBAAqB,CAAC,QAAiB,EAAA;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,GAAG,IAAI,CAAC,CAAC;KAC9E;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAClE,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;KACnC;;;IAIO,OAAO,GAAA;AACb,QAAA,MAAM,eAAe,GAAsB;AACzC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK;;gBAEb,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEnB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEjG,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM;;gBAEd,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAEpB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;;QAGF,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM;;gBAEd,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;gBAEpB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC;AACjE,SAAA;QAGD,QAAQ,CAAC,eAAe,CAAC;;aAEtB,SAAS,CAAC,IAAI,IAAG;;AAEhB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAEnD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;AACxC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAExC,YAAA,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAC/C,YAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,IAAI,CAAC,eAAe;aACjB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAuB,CAAC;aACnC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAChE,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,IAAoB,EAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IACxB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;YACxE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,YAAA,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1D,EAAE,aAAa,CAAC;KAClB;;AAGO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY;aAC9B,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACjG,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE7B,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;AAC1E,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAE7B,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;aAC7B,OAAO,CAAC,UAAU,IAAG;YACpB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAElG,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,KAAK,IAAG;YACf,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAExF,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;;AAIO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;QACvD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAE9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,IAChD,WAAW,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAChE,CAAC,CAAC;KACN;AAEO,IAAA,wBAAwB,CAAC,KAAuB,EAAA;QACtD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAE7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAC9C,UAAU,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAC5D,CAAC,CAAC;KACN;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;QACjD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IACpC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAClD,CAAC,CAAC;KACN;AAEO,IAAA,uBAAuB,CAAC,KAAuB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;YACvC,OAAO,KAAK,CAAC;AACd,SAAA;;;AAID,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;aACxB,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;YAEvB,KAAK;iBACF,MAAM,CAAC,IAAI,IACR,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAC/E;iBACA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;;AAGL,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE1D,QAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,aAAa,CAAC;KACtB;;;AAIO,IAAA,2BAA2B,CAAC,KAAuB,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;aACjC,OAAO,CAAC,WAAW,IAAG;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,0BAA0B,CAAC,KAAuB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;AAChC,aAAA,OAAO,CAAC,UAAU,IACjB,KAAK;AACF,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AACrE,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,qBAAqB,CAAC,KAAuB,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;AAC3B,aAAA,OAAO,CAAC,KAAK,IACZ,KAAK;AACF,aAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;AAC3D,aAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CACzC,CAAC;AAEJ,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;aAC3B,OAAO,CAAC,SAAS,IAAG;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;AAAE,aAAA;AAEvB,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAG;AACnC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,KAAK,aAAa,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;AAAE,iBAAA;AAEtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEL,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,IAAoB,EAAE,MAAc,KAAI;YACzE,IAAI,MAAM,KAAK,iBAAiB,EAAE;gBAChC,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,gBAAA,MAAM,gBAAgB,GAAG,CAAE,aAAa,CAAE,CAAC;AAC3C,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACxC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACjC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACtC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACvC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC1C,iBAAA;;gBAGD,gBAAgB;qBACb,OAAO,CAAC,KAAK,IAAG;;AAEf,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBAC3C,KAAK,GAAG,IAAI,CAAC;AACd,qBAAA;AACH,iBAAC,CAAC,CAAC;;AAGL,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;wBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,wBAAA,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,IAAI,CAAC;AACd,yBAAA;AACH,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAED,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACH,SAAC,CAAC;KACH;IAEO,sBAAsB,GAAA;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY;AACxC,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,CAClB;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,UAAW,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;KAClG;AAED,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B;AAC1C,YAAA,IAAI,CAAC,QAAQ;AACV,iBAAA,GAAG,CAAC,OAAO,IACV,IAAI,CAAC,MAAM;AACT,kBAAE,IAAI,CAAC,KAAK,IACV,KAAK,CAAC,iBAAiB,KAAK,OAAO,CACpC,EAAE,IAAI,CACR;iBACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,GAAG,CAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,iBAAA,IAAI,CAAC,IAAI,CAAC;AACf,YAAA,EAAE,CAAC;KACN;;AAjZU,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kBAqCX,eAAe,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGArCxB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEpB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB7B,20GAiFqB,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FD1DR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,20GAAA,EAAA,MAAA,EAAA,CAAA,2xBAAA,EAAA,qWAAA,CAAA,EAAA,CAAA;;0BA4CX,MAAM;2BAAC,eAAe,CAAA;4IAnCN,aAAa,EAAA,CAAA;sBAAzC,SAAS;uBAAC,gBAAgB,CAAA;;;MERhB,sBAAsB,CAAA;;;AA0BjC,IAAA,WAAA,CAAoB,MAAiB,EACjB,sBAA8C,EAC9C,iBAAoC,EAAA;QAFpC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;QACjB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;;AA1B9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY,CAAC;QAC9C,IAAW,CAAA,WAAA,GAAG,gBAAgB,CAAC;QAC/B,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAG1B;;;;AAIgC;QAEhC,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;QAEpB,IAAK,CAAA,KAAA,GAAuB,SAAS,CAAC;QACtC,IAAM,CAAA,MAAA,GAA4B,SAAS,CAAC;KAYS;;;AAR7D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KACxD;IAQD,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GAAG;AACrB,YAAA,GAAG,wBAAwB;YAC3B,GAAG,IAAI,CAAC,eAAe;SACxB,CAAA;;QAGD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;QAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;;;IAID,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;AAEhC,QAAA,MAAM,IAAI,GAAoB;YAC5B,GAAG,IAAI,CAAC,eAAe;YAEvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI;SACX,CAAC;AACD,aAAA,WAAW,EAAE;aACb,SAAS,CAAC,YAAY,IAAG;YACxB,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;AAAE,aAAA;AAE9B,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;;;IAIO,OAAO,GAAA;AACb,QAAA,QAAQ,CAAC;AACP,YAAA,IAAI,CAAC,eAAgB,CAAC,KAAK;;gBAEzB,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,KAAK,CAAC;;AAE/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC;AAEzH,YAAA,IAAI,CAAC,eAAgB,CAAC,MAAM;;gBAE1B,EAAE,CAAC,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC;;AAEhC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;SACrC,CAAC;aACC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,OAAO,CAAC,WAAmB,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;KAC5F;AAED,IAAA,QAAQ,CAAC,WAAmB,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;AAAE,SAAA;QAEhC,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IACxB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc;YACxE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YAClE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC/D,YAAA,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1D,EAAE,aAAa,CAAC;KAClB;;mHAtGU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,wMCjBnC,+7CA2BQ,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDVK,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,+7CAAA,EAAA,MAAA,EAAA,CAAA,+bAAA,CAAA,EAAA,CAAA;qKAMjB,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACE,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEoBK,SAAS,CAAA;;sGAAT,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAT,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,iBAvBlB,oBAAoB;AACpB,QAAA,sBAAsB,aAGtB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;AACd,QAAA,gBAAgB,aAGhB,oBAAoB;QACpB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAGb,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,YAnBlB,YAAY;QACZ,mBAAmB;QAEnB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,aAAa;QACb,cAAc;QACd,aAAa;QACb,wBAAwB;QACxB,oBAAoB;QACpB,cAAc;QACd,gBAAgB,CAAA,EAAA,CAAA,CAAA;2FAOP,SAAS,EAAA,UAAA,EAAA,CAAA;kBAzBrB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBAEnB,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,oBAAoB;wBACpB,cAAc;wBACd,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,sBAAsB;AACvB,qBAAA;AACF,iBAAA,CAAA;;;AC1CD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "comment": "NGX-LIB primary entry point package.json",
3
3
  "name": "@cleavelandprice/ngx-lib",
4
- "version": "3.1.11",
4
+ "version": "3.1.12",
5
5
  "description": "Angular 14+ library providing foundational functionality to Cleaveland-Price applications",
6
6
  "peerDependencies": {
7
7
  "@angular/common": "^14.2.1",