@ieeesa-npm/groups 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -223,12 +223,14 @@ export class TreeViewComponent {
223
223
  return this.deletedGroupId;
224
224
  }
225
225
  // eslint-disable-next-line no-unused-vars, no-empty-function
226
- constructor(database) {
226
+ constructor(database, elementRef) {
227
227
  this.database = database;
228
+ this.elementRef = elementRef;
228
229
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
229
230
  this.constants = constants;
230
231
  this.buttons = this.constants?.viewGroups?.buttons;
231
232
  this.treePaddingIndent = this.constants?.viewGroups?.treePaddingIndent;
233
+ this.destroy$ = new Subject();
232
234
  this.plusCircleIconButton = this.buttons[4];
233
235
  this.minusCircleIconButton = this.buttons[5];
234
236
  this.menuItems = this.buttons.filter((e) => e.id !== GroupAction.EXPAND_GROUP_VIEW &&
@@ -266,6 +268,16 @@ export class TreeViewComponent {
266
268
  ngOnInit() {
267
269
  this.setGroupDataSource();
268
270
  }
271
+ /**
272
+ * Assign ARIA role for all mat tree nodes as "row"
273
+ * @memberof TreeViewComponent
274
+ */
275
+ ngAfterViewInit() {
276
+ this.dataSource.dataChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
277
+ const treeItemNodes = this.elementRef.nativeElement.querySelectorAll('[role=treeitem]');
278
+ treeItemNodes?.forEach((node) => (node.role = 'row'));
279
+ });
280
+ }
269
281
  /**
270
282
  * Emits the group info when the toggle group is clicked or toggles the group view
271
283
  * @param {GroupNode} group
@@ -384,8 +396,16 @@ export class TreeViewComponent {
384
396
  trackByFn(index, iconButton) {
385
397
  return iconButton.id;
386
398
  }
387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }], target: i0.ɵɵFactoryTarget.Component }); }
388
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
399
+ /**
400
+ * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
401
+ * @memberof GroupsComponent
402
+ */
403
+ ngOnDestroy() {
404
+ this.destroy$.next(true);
405
+ this.destroy$.unsubscribe();
406
+ }
407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
408
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.3", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems"], outputs: ["menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton"], outputs: ["iconButtonClick"] }] }); }
389
409
  }
390
410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TreeViewComponent, decorators: [{
391
411
  type: Component,
@@ -396,8 +416,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
396
416
  MatButtonModule,
397
417
  MenuComponent,
398
418
  IconButtonComponent,
399
- ], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n ></div>\r\n <div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div>\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
400
- }], ctorParameters: function () { return [{ type: Groups }]; }, propDecorators: { parentGroupsInfo: [{
419
+ ], template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex justify-content-between gap-3 my-0\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <div role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n <div class=\"d-none gap-3 d-sm-flex d-md-flex d-lg-flex\" role=\"gridcell\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n >\r\n <div\r\n [ngClass]=\"\r\n treeControl.isExpanded(node)\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n class=\"ieeesa-tree__node w-100 d-flex my-0 gap-3\"\r\n [ngStyle]=\"getBoxShadow(node.item.groupTypeInfo.legendColor)\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupInfoOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"w-100\">\r\n <div\r\n class=\"ieeesa-tree__group-info d-flex flex-column flex-sm-row flex-md-row flex-lg-row align-items-start align-items-sm-baseline align-items-md-baseline align-items-lg-baseline gap-2 mb-1\"\r\n >\r\n <p class=\"ieeesa-tree__node-group-name ieeesa-headline-sm-26\">\r\n {{ node.item.groupName }}\r\n </p>\r\n <p class=\"ieeesa-tree__node-group-acronym ieeesa-title-lg-24\">\r\n {{ node.item.groupAcronym }}\r\n </p>\r\n </div>\r\n <div class=\"ieeesa-body-md-16 ieeesa-tree__node-group-desc\">\r\n {{ node.item.groupTypeInfo.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.56em;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25em;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625em;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375em;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375em;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125em;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875em;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625em;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5em;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125em;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1em;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875em;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5em;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:rgba(29,25,43,.12)}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:rgba(103,80,164,.12)}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1em;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125em;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree__node-group-acronym{color:#63666a}.ieeesa-tree__node-group-desc{color:#4a4d50}.ieeesa-tree__node{background:#f4f8fe;padding:.75em 1.5em .75em 1.125em}.ieeesa-tree__root-node-white-bg{background:#ffffff;box-shadow:0 1px #00b5e2 inset,6px 0 #379dfc inset}.ieeesa-tree__collapse-icon{min-width:3.5em}\n"] }]
420
+ }], ctorParameters: function () { return [{ type: Groups }, { type: i0.ElementRef }]; }, propDecorators: { parentGroupsInfo: [{
401
421
  type: Input
402
422
  }], childGroupsInfo: [{
403
423
  type: Input
@@ -414,4 +434,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
414
434
  }], deleteGroupClick: [{
415
435
  type: Output
416
436
  }] } });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7SUFDRSwwQ0FBMEM7SUFDbkMsSUFBZTtJQUN0QiwwQ0FBMEM7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WSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsVUFBc0I7UUFDN0MsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OEdBbE5VLGlCQUFpQjtrR0FBakIsaUJBQWlCLG9hQzlPOUIsaTFJQTRIQSxncE1Ed0dJLFlBQVkseWxCQUNaLGFBQWEsZ2hCQUNiLGFBQWEsOEJBQ2IsZUFBZSwrQkFDZixhQUFhLDJHQUNiLG1CQUFtQjs7MkZBS1YsaUJBQWlCO2tCQWQ3QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG1CQUFtQjtxQkFDcEI7MEZBdUJHLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLDJCQUEyQjtzQkFEOUIsS0FBSztnQkFTRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBU0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTWVudUNvbXBvbmVudCxcclxuICBNZW51LFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgRmxhdCBub2RlIGNyZWF0ZXMgYSBub2RlIHN0cnVjdHVyZVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cE5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXRlbTogR3JvdXBJbmZvLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbGV2ZWwgPSAxLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzIHN0b3JlcyB0aGUgcGFyZW50IG5vZGVzIGFuZCBjaGlsZCBub2Rlc1xyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cHNcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHMge1xyXG4gIHJvb3RMZXZlbE5vZGVzITogR3JvdXBJbmZvW107XHJcbiAgLyoqIEluaXRpYWwgZGF0YSBmcm9tIGRhdGFiYXNlICovXHJcbiAgcHJpdmF0ZSBjaGlsZEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBnZXRDaGlsZEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRHcm91cHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBncm91cHMgZGF0YSBhbmQgY3JlYXRlcyB0aGUgbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZGF0YVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGluaXRpYWxEYXRhKGRhdGE6IEdyb3VwSW5mb1tdKTogR3JvdXBOb2RlW10ge1xyXG4gICAgdGhpcy5yb290TGV2ZWxOb2RlcyA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcy5yb290TGV2ZWxOb2Rlcy5tYXAoXHJcbiAgICAgIChub2RlKSA9PiBuZXcgR3JvdXBOb2RlKG5vZGUsIDAsIHRoaXMuaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IG5vZGVcclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZShub2RlOiBHcm91cEluZm8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgbm9kZS5oYXNDaGlsZHJlbjtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIER5bmFtaWMgRGF0YSBTb3VyY2UgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiB3aXRoIGR5bmFtaWMgZGF0YSBiYXNlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2VcclxuICogQGltcGxlbWVudHMge0RhdGFTb3VyY2U8R3JvdXBOb2RlPn1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxHcm91cE5vZGU+IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBOb2RlW10+KFtdKTtcclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1cGRhdGVkIHRyZWUgY29udHJvbCBkYXRhXHJcbiAgICogQHR5cGUge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgZ2V0IGRhdGEoKTogR3JvdXBOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikuYWRkZWQgfHxcclxuICAgICAgICAgIChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pLnJlbW92ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtZXJnZShjb2xsZWN0aW9uVmlld2VyLnZpZXdDaGFuZ2UsIHRoaXMuZGF0YUNoYW5nZSkucGlwZShcclxuICAgICAgbWFwKCgpID0+IHRoaXMuZGF0YSlcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gd2l0aCBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblZpZXdlcn0gY29sbGVjdGlvblZpZXdlclxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgbm8tZW1wdHktZnVuY3Rpb24sIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMvcmVtb3ZlcyB0aGUgY2hpbGQgbm9kZXMgd2hpbGUgZXhwYW5kcy9jb2xsYXBzZXMgdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHBhcmFtIHtTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPn0gY2hhbmdlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBoYW5kbGVUcmVlQ29udHJvbChjaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KSB7XHJcbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZC5mb3JFYWNoKChub2RlKSA9PiB0aGlzLnRvZ2dsZU5vZGUobm9kZSwgdHJ1ZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XHJcbiAgICAgIGNoYW5nZS5yZW1vdmVkXHJcbiAgICAgICAgLnNsaWNlKClcclxuICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgLmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBub2RlLCBhZGQvcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGRpc3BsYXlcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gY2xpY2tlZE5vZGVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGFuZFxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICB0b2dnbGVOb2RlKGNsaWNrZWROb2RlOiBHcm91cE5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuaW5kZXhPZihjbGlja2VkTm9kZSk7XHJcbiAgICBpZiAoIWNoaWxkcmVuIHx8IGluZGV4IDwgMCkge1xyXG4gICAgICAvLyBJZiBubyBjaGlsZHJlbiwgb3IgY2Fubm90IGZpbmQgdGhlIG5vZGUsIG5vIG9wXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXhwYW5kKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGUubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhLmxlbmd0aCAmJiB0aGlzLmRhdGFbaV0ubGV2ZWwgPiBjbGlja2VkTm9kZS5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCArIDEsIGNvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhlIGNoYW5nZVxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSBncm91cHMgd2hlcmUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcHMgYXJlIHJlcHJlc2VudGVkIGluIGEgdHJlZSB2aWV3L2hpZXJhcmNoeS5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVHJlZVZpZXdDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXRyZWUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0VHJlZU1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyZWUtdmlldy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgYnV0dG9uczogTWVudVtdID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LmJ1dHRvbnM7XHJcbiAgdHJlZVBhZGRpbmdJbmRlbnQ6IG51bWJlciA9IHRoaXMuY29uc3RhbnRzPy52aWV3R3JvdXBzPy50cmVlUGFkZGluZ0luZGVudDtcclxuICBzZWxlY3RlZEdyb3VwITogR3JvdXBOb2RlO1xyXG4gIHNlbGVjdGVkR3JvdXBBY3Rpb24hOiBNZW51IHwgSWNvbkJ1dHRvbjtcclxuICB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+O1xyXG4gIGRhdGFTb3VyY2UhOiBHcm91cHNEYXRhU291cmNlO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBtZW51SXRlbXM6IE1lbnVbXSA9IHRoaXMuYnV0dG9ucy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24uRVhQQU5EX0dST1VQX1ZJRVcgJiZcclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24uQ09MTEFQU0VfR1JPVVBfVklFV1xyXG4gICk7XHJcbiAgcHJpdmF0ZSBwYXJlbnRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJlbnRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5wYXJlbnRHcm91cHMgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgZ2V0IHBhcmVudEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50R3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgQElucHV0KClcclxuICBzZXQgY2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRHcm91cHMoKTtcclxuICB9XHJcbiAgZ2V0IGNoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZGVsZXRlZEdyb3VwSWQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZGVsZXRlZEdyb3VwSWRJbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSBpZDtcclxuICAgIHRoaXMuZGVsZXRlR3JvdXBOb2RlKHRoaXMuZGVsZXRlZEdyb3VwSWQpO1xyXG4gIH1cclxuICBnZXQgZGVsZXRlZEdyb3VwSWRJbmZvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVkR3JvdXBJZDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YWJhc2U6IEdyb3Vwcykge31cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZS5sZXZlbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBwYXNzZWQgbm9kZSBoYXMgY2hpbGRyZW4gb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhc0NoaWxkR3JvdXBzID0gKGluZGV4OiBudW1iZXIsIF9ub2RlRGF0YTogR3JvdXBOb2RlKSA9PlxyXG4gICAgX25vZGVEYXRhLmV4cGFuZGFibGU7XHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIGdyb3VwIGluZm8gd2hlbiB0aGUgdG9nZ2xlIGdyb3VwIGlzIGNsaWNrZWQgb3IgdG9nZ2xlcyB0aGUgZ3JvdXAgdmlld1xyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHZpZXdDaGlsZEdyb3Vwcyhub2RlOiBHcm91cE5vZGUpIHtcclxuICAgIGlmICghbm9kZS5pdGVtLmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvZ2dsZUdyb3VwQ2xpY2suZW1pdChub2RlLml0ZW0pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBub2RlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBib3ggc2hhZG93IGJhc2VkIG9uIHRoZSBncm91cCB0eXBlIGxlZ2VuZCBjb2xvclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRCb3hTaGFkb3coY29sb3I6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3hTaGFkb3c6XHJcbiAgICAgICAgJzBweCAxcHggMHB4IDBweCAjYzljYmQwIGluc2V0LCA2cHggMHB4IDBweCAwcHggJyArIGNvbG9yICsgJyBpbnNldCcsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdpdGggcGFyZW50IGdyb3VwcyBkYXRhXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0R3JvdXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPihcclxuICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhYmFzZS5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZS5zZXRDaGlsZEdyb3Vwc0luZm8odGhpcy5jaGlsZEdyb3Vwc0luZm8pO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cCkgdGhpcy50cmVlQ29udHJvbC50b2dnbGUodGhpcy5zZWxlY3RlZEdyb3VwKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVsZXRlZEdyb3VwSWRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBkZWxldGVHcm91cE5vZGUoZGVsZXRlZEdyb3VwSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wgJiYgZGVsZXRlZEdyb3VwSWQpIHtcclxuICAgICAgY29uc3QgZ3JvdXBEYXRhU291cmNlOiBHcm91cE5vZGVbXSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihcclxuICAgICAgICAoZSkgPT4gZS5pdGVtLmdyb3VwSWQgIT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBEYXRhU291cmNlO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChncm91cCkpIHJldHVybiB0aGlzLm1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICAgIHJldHVybiB0aGlzLnBsdXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBlbWl0dGVkIGdyb3VwIGFjdGlvbnMgZXZlbnRcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld0NoaWxkR3JvdXBzKGdyb3VwKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uRURJVF9HUk9VUCkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQoZ3JvdXAuaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZUdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaCgoZSkgPT4gKGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2UpKTtcclxuICAgIHJldHVybiB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgIChlKSA9PlxyXG4gICAgICAgIChlLmlkICE9PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVAgJiYgZ3JvdXAuaXRlbS5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZS5pZCAhPT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCAmJiAhZ3JvdXAuaXRlbS5oYXNDaGlsZHJlbilcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBteS0wXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3cobm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubGVnZW5kQ29sb3IpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJcclxuICAgICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZEdyb3Vwc1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXggbXktMCBnYXAtM1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KG5vZGUuaXRlbS5ncm91cFR5cGVJbmZvLmxlZ2VuZENvbG9yKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmVcIlxyXG4gICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cInZpZXdDaGlsZEdyb3Vwcyhub2RlKVwiXHJcbiAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbkluZm8obm9kZSlcIlxyXG4gICAgICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwSW5mb091dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXhcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIlxyXG4gICAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBJbmZvT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNtLXJvdyBmbGV4LW1kLXJvdyBmbGV4LWxnLXJvdyBhbGlnbi1pdGVtcy1zdGFydCBhbGlnbi1pdGVtcy1zbS1iYXNlbGluZSBhbGlnbi1pdGVtcy1tZC1iYXNlbGluZSBhbGlnbi1pdGVtcy1sZy1iYXNlbGluZSBnYXAtMiBtYi0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLWhlYWRsaW5lLXNtLTI2XCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuaXRlbS5ncm91cE5hbWUgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtbGctMjRcIj5cclxuICAgICAgICAgICAge3sgbm9kZS5pdGVtLmdyb3VwQWNyb255bSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlLml0ZW0uZ3JvdXBUeXBlSW5mby5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7SUFDRSwwQ0FBMEM7SUFDbkMsSUFBZTtJQUN0QiwwQ0FBMEM7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QkFkN0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixtQkFBbUI7cUJBQ3BCO21IQXdCRyxnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBVUYsZUFBZTtzQkFEbEIsS0FBSztnQkFVRiwyQkFBMkI7c0JBRDlCLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQVNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTWVudUNvbXBvbmVudCxcclxuICBNZW51LFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgRmxhdCBub2RlIGNyZWF0ZXMgYSBub2RlIHN0cnVjdHVyZVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cE5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXRlbTogR3JvdXBJbmZvLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbGV2ZWwgPSAxLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzIHN0b3JlcyB0aGUgcGFyZW50IG5vZGVzIGFuZCBjaGlsZCBub2Rlc1xyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cHNcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHMge1xyXG4gIHJvb3RMZXZlbE5vZGVzITogR3JvdXBJbmZvW107XHJcbiAgLyoqIEluaXRpYWwgZGF0YSBmcm9tIGRhdGFiYXNlICovXHJcbiAgcHJpdmF0ZSBjaGlsZEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBnZXRDaGlsZEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRHcm91cHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBncm91cHMgZGF0YSBhbmQgY3JlYXRlcyB0aGUgbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZGF0YVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGluaXRpYWxEYXRhKGRhdGE6IEdyb3VwSW5mb1tdKTogR3JvdXBOb2RlW10ge1xyXG4gICAgdGhpcy5yb290TGV2ZWxOb2RlcyA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcy5yb290TGV2ZWxOb2Rlcy5tYXAoXHJcbiAgICAgIChub2RlKSA9PiBuZXcgR3JvdXBOb2RlKG5vZGUsIDAsIHRoaXMuaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IG5vZGVcclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZShub2RlOiBHcm91cEluZm8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgbm9kZS5oYXNDaGlsZHJlbjtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIER5bmFtaWMgRGF0YSBTb3VyY2UgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiB3aXRoIGR5bmFtaWMgZGF0YSBiYXNlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2VcclxuICogQGltcGxlbWVudHMge0RhdGFTb3VyY2U8R3JvdXBOb2RlPn1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxHcm91cE5vZGU+IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBOb2RlW10+KFtdKTtcclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1cGRhdGVkIHRyZWUgY29udHJvbCBkYXRhXHJcbiAgICogQHR5cGUge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgZ2V0IGRhdGEoKTogR3JvdXBOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikuYWRkZWQgfHxcclxuICAgICAgICAgIChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pLnJlbW92ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcclxuICAgICAgY2hhbmdlLmFkZGVkLmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCB0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2UuZ2V0Q2hpbGRHcm91cHNJbmZvKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKGNsaWNrZWROb2RlKTtcclxuICAgIGlmICghY2hpbGRyZW4gfHwgaW5kZXggPCAwKSB7XHJcbiAgICAgIC8vIElmIG5vIGNoaWxkcmVuLCBvciBjYW5ub3QgZmluZCB0aGUgbm9kZSwgbm8gb3BcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHBhbmQpIHtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbi5tYXAoXHJcbiAgICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgICBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBjbGlja2VkTm9kZS5sZXZlbCArIDEsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXggKyAxLCAwLCAuLi5ub2Rlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICBmb3IgKFxyXG4gICAgICAgIGxldCBpID0gaW5kZXggKyAxO1xyXG4gICAgICAgIGkgPCB0aGlzLmRhdGEubGVuZ3RoICYmIHRoaXMuZGF0YVtpXS5sZXZlbCA+IGNsaWNrZWROb2RlLmxldmVsO1xyXG4gICAgICAgIGkrKywgY291bnQrKyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgKSB7fVxyXG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4ICsgMSwgY291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGUgY2hhbmdlXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIGJ1dHRvbnM6IE1lbnVbXSA9IHRoaXMuY29uc3RhbnRzPy52aWV3R3JvdXBzPy5idXR0b25zO1xyXG4gIHRyZWVQYWRkaW5nSW5kZW50OiBudW1iZXIgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8udHJlZVBhZGRpbmdJbmRlbnQ7XHJcbiAgc2VsZWN0ZWRHcm91cCE6IEdyb3VwTm9kZTtcclxuICBzZWxlY3RlZEdyb3VwQWN0aW9uITogTWVudSB8IEljb25CdXR0b247XHJcbiAgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPjtcclxuICBkYXRhU291cmNlITogR3JvdXBzRGF0YVNvdXJjZTtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgbWF0VHJlZU5vZGVQYWRkaW5nITogTWF0VHJlZU5vZGVQYWRkaW5nPEdyb3VwTm9kZT47XHJcbiAgcGx1c0NpcmNsZUljb25CdXR0b246IEljb25CdXR0b24gPSB0aGlzLmJ1dHRvbnNbNF07XHJcbiAgbWludXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzVdO1xyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zLmZpbHRlcihcclxuICAgIChlKSA9PlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbi5FWFBBTkRfR1JPVVBfVklFVyAmJlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbi5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHRvZ2dsZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgY3JlYXRlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0R3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhYmFzZTogR3JvdXBzLCBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQXNzaWduIEFSSUEgcm9sZSBmb3IgYWxsIG1hdCB0cmVlIG5vZGVzIGFzIFwicm93XCJcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgY29uc3QgdHJlZUl0ZW1Ob2RlcyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgIHRyZWVJdGVtTm9kZXM/LmZvckVhY2goKG5vZGU6IEhUTUxFbGVtZW50KSA9PiAobm9kZS5yb2xlID0gJ3JvdycpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsZXZlbCBvZiB0aGUgbm9kZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlLmxldmVsO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcm91cE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlLml0ZW0uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlR3JvdXBDbGljay5lbWl0KG5vZGUuaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdyhjb2xvcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJveFNoYWRvdzpcclxuICAgICAgICAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQsIDZweCAwcHggMHB4IDBweCAnICsgY29sb3IgKyAnIGluc2V0JyxcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRhdGFTb3VyY2Ugd2l0aCBwYXJlbnQgZ3JvdXBzIGRhdGFcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRHcm91cERhdGFTb3VyY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+KFxyXG4gICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBHcm91cHNEYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlLmluaXRpYWxEYXRhKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBjaGlsZCBncm91cHMgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBsb2FkQ2hpbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmRhdGFiYXNlLnNldENoaWxkR3JvdXBzSW5mbyh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwKSB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBncm91cERhdGFTb3VyY2U6IEdyb3VwTm9kZVtdID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKFxyXG4gICAgICAgIChlKSA9PiBlLml0ZW0uZ3JvdXBJZCAhPT0gZGVsZXRlZEdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cERhdGFTb3VyY2U7XHJcbiAgICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBtZW51IGdyb3VwIGFjdGlvblxyXG4gICAqIEBwYXJhbSB7TWVudX0gbWVudVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uR3JvdXBBY3Rpb25zQ2xpY2sobWVudTogTWVudSB8IEljb25CdXR0b24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbiA9IG1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENoYW5nZXMgdGhlIGV4cGFuZC9jb2xsYXBzZSBpY29uIGJhc2VkIG9uIHRoZSB0b2dnbGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAgeyp9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0VG9nZ2xlQnV0dG9uSW5mbyhncm91cDogR3JvdXBOb2RlKTogSWNvbkJ1dHRvbiB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGdyb3VwKSkgcmV0dXJuIHRoaXMubWludXNDaXJjbGVJY29uQnV0dG9uO1xyXG4gICAgcmV0dXJuIHRoaXMucGx1c0NpcmNsZUljb25CdXR0b247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGVtaXR0ZWQgZ3JvdXAgYWN0aW9ucyBldmVudFxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uVklFV19ST1NURVIpIHtcclxuICAgICAgdGhpcy52aWV3Q2hpbGRHcm91cHMoZ3JvdXApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlR3JvdXBDbGljay5lbWl0KGdyb3VwLml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQ2xpY2suZW1pdChncm91cC5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlR3JvdXBDbGljay5lbWl0KGdyb3VwLml0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBtZW51IGl0ZW1zIGJhc2VkIG9uIGdyb3VwcyBoYXNDaGlsZHJlbi5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHtNZW51W119XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IE1lbnVbXSB7XHJcbiAgICB0aGlzLm1lbnVJdGVtcy5mb3JFYWNoKChlKSA9PiAoZS5pc1Rvb2xUaXBOZWVkZWQgPSBmYWxzZSkpO1xyXG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgKGUpID0+XHJcbiAgICAgICAgKGUuaWQgIT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJiBncm91cC5pdGVtLmhhc0NoaWxkcmVuKSB8fFxyXG4gICAgICAgIChlLmlkICE9PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQICYmICFncm91cC5pdGVtLmhhc0NoaWxkcmVuKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGFrZXMgdGhlIGluZGV4IGFuZCB0aGUgaWNvbiBidXR0b24gYXMgYXJndW1lbnRzIGFuZCBuZWVkcyB0byByZXR1cm4gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGljb24gYnV0dG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7SWNvbkJ1dHRvbn0gaWNvbkJ1dHRvblxyXG4gICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaWNvbkJ1dHRvbjogSWNvbkJ1dHRvbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaWNvbkJ1dHRvbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS10cmVlXCI+XHJcbiAgPG1hdC10cmVlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiXHJcbiAgICBjbGFzcz1cImllZWVzYS10cmVlX19yb290XCJcclxuICAgICNyb290U2VsZWN0b3JcclxuICAgIHJvbGU9XCJ0cmVlZ3JpZFwiXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBteS0wXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3cobm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubGVnZW5kQ29sb3IpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJcclxuICAgICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleFwiIHJvbGU9XCJncmlkY2VsbFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgIGllZWVzYUdyb3VwQWN0aW9uc091dGxldDtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4IG15LTAgZ2FwLTNcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdyhub2RlLml0ZW0uZ3JvdXBUeXBlSW5mby5sZWdlbmRDb2xvcilcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEluZm9PdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleFwiXHJcbiAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIlxyXG4gICAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mbyBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1zbS1yb3cgZmxleC1tZC1yb3cgZmxleC1sZy1yb3cgYWxpZ24taXRlbXMtc3RhcnQgYWxpZ24taXRlbXMtc20tYmFzZWxpbmUgYWxpZ24taXRlbXMtbWQtYmFzZWxpbmUgYWxpZ24taXRlbXMtbGctYmFzZWxpbmUgZ2FwLTIgbWItMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1uYW1lIGllZWVzYS1oZWFkbGluZS1zbS0yNlwiPlxyXG4gICAgICAgICAgICB7eyBub2RlLml0ZW0uZ3JvdXBOYW1lIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWFjcm9ueW0gaWVlZXNhLXRpdGxlLWxnLTI0XCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuaXRlbS5ncm91cEFjcm9ueW0gfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtZGVzY1wiPlxyXG4gICAgICAgICAge3sgbm9kZS5pdGVtLmdyb3VwVHlwZUluZm8ubmFtZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwQWN0aW9uc091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIml0ZW1cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwiXHJcbiAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -151,6 +151,7 @@ export class GroupsComponent {
151
151
  this.dialogRef = this.dialog.open(ModalConfirmationComponent, {
152
152
  data: deleteGroupModalOptions,
153
153
  width: 'auto',
154
+ autoFocus: 'dialog'
154
155
  });
155
156
  this.dialogRef
156
157
  .afterClosed()
@@ -390,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
390
391
  }], permissions: [{
391
392
  type: Input
392
393
  }] } });
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2dyb3Vwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9ncm91cHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUVkLGVBQWUsRUFFZixtQkFBbUIsRUFFbkIsU0FBUyxFQUNULDBCQUEwQixFQUMxQixlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsYUFBYSxHQUNkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUl2RTs7O0dBR0c7QUFvQkgsTUFBTSxPQUFPLGVBQWU7SUErQzFCO0lBQ0UsMENB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QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0FoWFUsZUFBZTtrR0FBZixlQUFlLGdNQUZmLENBQUMsYUFBYSxDQUFDLDBCQzlENUIsdTNIQXlHQSwrcU9EdkRJLFlBQVksZ09BQ1osZUFBZSw4QkFDZixlQUFlLDRRQUNmLGVBQWUsaUtBQ2YsZUFBZSwrU0FDZixpQkFBaUIsdVBBQ2pCLGVBQWUsK0VBQ2YsbUJBQW1COzsyRkFPVixlQUFlO2tCQW5CM0IsU0FBUzsrQkFFRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsbUJBQW1CO3FCQUNwQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDO3dPQW1DakIsY0FBYztzQkFBdEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENyZWF0ZUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NyZWF0ZS1ncm91cC9jcmVhdGUtZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoQ29tcG9uZW50LFxyXG4gIE1vZGFsQ29tcG9uZW50LFxyXG4gIFNlbGVjdE9wdGlvbixcclxuICBTZWxlY3RDb21wb25lbnQsXHJcbiAgTGVnZW5kLFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxuICBBbGlnblR5cGUsXHJcbiAgTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsXHJcbiAgTGVnZW5kQ29tcG9uZW50LFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7IFRyZWVWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBUeXBlIH0gZnJvbSAnLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIE1vZGFsVHlwZSxcclxuICBBbGVydFR5cGUsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR2V0R3JvdXBzUGF5bG9hZCB9IGZyb20gJy4vbW9kZWxzL3ZpZXctZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWxldGVHcm91cFBheWxvYWQgfSBmcm9tICcuL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBjb21wb25lbnQgaXMgYSB3cmFwcGVyIG9yIGNvbnRhaW5lciBjb21wb25lbnQgZm9yIGdyb3VwcyBtYW5hZ2VtZW50IHJldXNhYmxlIGNvbXBvbmVudCBhbmQgaW4gdGhpcyBjb21wb25lbnQgaW50ZWdyYXRlcyBhbGwgZ3JvdXAgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXRpZXMgYW5kIHRoaXMgd2lsbCBiZSBlbnRyeSBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGdyb3VwcyB3aGVuIGl0IGlzIGNvbnN1bWVkIGluIG90aGVyIGFwcGxpY2F0aW9ucy5cclxuICogQGNsYXNzIEdyb3Vwc0NvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2llZWVzYS1ncm91cHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgU2VhcmNoQ29tcG9uZW50LFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgVHJlZVZpZXdDb21wb25lbnQsXHJcbiAgICBMZWdlbmRDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyb3Vwcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXBzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtBbGVydHNTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkaWFsb2dSZWY6IGFueTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcbiAgdmlld0dyb3VwVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3VwcztcclxuICBpc0dyb3VwU2VhcmNoQWN0aXZlID0gZmFsc2U7XHJcbiAgaXNHcm91cEZpbHRlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIGlzTW9iaWxlVmlldyA9IGZhbHNlO1xyXG4gIGNoaWxkR3JvdXBzSW5mbyE6IEdyb3VwSW5mb1tdO1xyXG4gIHNlbGVjdGVkR3JvdXBUeXBlITogU2VsZWN0T3B0aW9uO1xyXG4gIHBhcmVudEdyb3Vwc0luZm8hOiBHcm91cEluZm9bXTtcclxuICBzZWxlY3RHcm91cE9wdGlvbnMhOiBTZWxlY3RPcHRpb25bXTtcclxuICBkZWxldGVkR3JvdXBJZCE6IHN0cmluZztcclxuICBncm91cFR5cGVzITogeyBba2V5OiBzdHJpbmddOiBHcm91cFR5cGUgfTtcclxuICBzZWFyY2hQbGFjZUhvbGRlclRleHQ6IHN0cmluZyA9IHRoaXMudmlld0dyb3VwVGV4dHM/LnBsYWNlaG9sZGVyVGV4dD8uc2VhcmNoO1xyXG4gIGZpbHRlclBsYWNlSG9sZGVyVGV4dDogc3RyaW5nID0gdGhpcy52aWV3R3JvdXBUZXh0cz8ucGxhY2Vob2xkZXJUZXh0Py5maWx0ZXI7XHJcbiAgY3JlYXRlR3JvdXBJY29uOiBJY29uQnV0dG9uID0ge1xyXG4gICAgaWQ6IDEsXHJcbiAgICBhcmlhTGFiZWw6IHRoaXMudmlld0dyb3VwVGV4dHM/LmFyaWFMYWJlbC5hZGQsXHJcbiAgICBpY29uVVJMOiB0aGlzLnZpZXdHcm91cFRleHRzPy5jcmVhdGVHcm91cEljb24sXHJcbiAgICB0b29sVGlwOiB0aGlzLnZpZXdHcm91cFRleHRzPy5hcmlhTGFiZWwuYWRkLFxyXG4gIH07XHJcbiAgZmlsdGVyR3JvdXBJY29uOiBJY29uQnV0dG9uID0ge1xyXG4gICAgaWQ6IDIsXHJcbiAgICBhcmlhTGFiZWw6IHRoaXMudmlld0dyb3VwVGV4dHM/LmFyaWFMYWJlbC5maWx0ZXIsXHJcbiAgICBpY29uVVJMOiB0aGlzLnZpZXdHcm91cFRleHRzPy5maWx0ZXJHcm91cEljb24sXHJcbiAgICB0b29sVGlwOiB0aGlzLnZpZXdHcm91cFRleHRzPy5hcmlhTGFiZWwuZmlsdGVyLFxyXG4gIH07XHJcbiAgZ3JvdXBzTGVnZW5kczogTGVnZW5kW10gPSBbXTtcclxuICBnZXRHcm91cHNQYXlsb2FkOiBHZXRHcm91cHNQYXlsb2FkID0geyBncm91cElkOiAnJywgZ3JvdXBUeXBlSWQ6ICcnIH07XHJcbiAgQElucHV0KCkgZ3JvdXBzUGFnZUluZm86IHtcclxuICAgIGdyb3Vwc1RpdGxlOiBzdHJpbmc7XHJcbiAgICBncm91cHNEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH0gPSB7XHJcbiAgICBncm91cHNUaXRsZTogdGhpcy52aWV3R3JvdXBUZXh0cz8uZ3JvdXBzVGl0bGUsXHJcbiAgICBncm91cHNEZXNjcmlwdGlvbjogdGhpcy52aWV3R3JvdXBUZXh0cz8uZ3JvdXBzRGVzY3JpcHRpb24sXHJcbiAgfTtcclxuICBASW5wdXQoKSBhcHBsaWNhdGlvbklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwaUJhc2VVUkwhOiBzdHJpbmc7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBASW5wdXQoKSBwZXJtaXNzaW9ucyE6IGFueTtcclxuICBjcmVhdGVHcm91cFRleHQgPSBzY3JlZW5UZXh0cz8uY3JlYXRlR3JvdXA7XHJcbiAgZnVuY3Rpb25UeXBlITogR3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgYWxpZ25tZW50VHlwZSA9IEFsaWduVHlwZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3Vwc1NlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyU2VydmljZTogQnJlYWtwb2ludE9ic2VydmVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlOiBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gcmVzdWx0Lm1hdGNoZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGNvbXBvbmVudC5cclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0QXBwQ29uZmlnKHRoaXMuYXBpQmFzZVVSTCwgdGhpcy5wZXJtaXNzaW9ucyk7XHJcbiAgICB0aGlzLmdldEdyb3VwVHlwZXMoKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkaWFsb2cgb3B0aW9ucyBmb3IgY3JlYXRlIGdyb3VwIG1vZGFsIGFuZCBjYWxscyBvcGVuTW9kYWwgbWV0aG9kLlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvcGVuQ3JlYXRlR3JvdXBGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGluZzogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmhlYWRpbmcsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudFJlZmVyZW5jZTogQ3JlYXRlR3JvdXBDb21wb25lbnQsXHJcbiAgICAgIG1vZGFsVHlwZTogTW9kYWxUeXBlLkZPUk0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEU7XHJcbiAgICB0aGlzLm9wZW5Nb2RhbChkaWFsb2dPcHRpb25zLCAnaWVlZXNhLWNyZWF0ZS1ncm91cCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgbW9kYWwgY29tcG9uZW50IHdpdGggZm9yIHJlY2VpdmVkIHBhcmFtcyBhbmQgaGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24gc3VjY2VzcyBhbmQgZXJyb3JzLlxyXG4gICAqIEBwYXJhbSB7Kn0gZGlhbG9nT3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcclxuICBvcGVuTW9kYWwoZGlhbG9nT3B0aW9uczogYW55LCBjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSA/PyAnJztcclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiBkaWFsb2dPcHRpb25zLFxyXG4gICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2llZWVzYS1tb2RhbC1kaWFsb2cnLCBjbGFzc05hbWVdLFxyXG4gICAgICBhcmlhTW9kYWw6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVmPy5jb21wb25lbnRJbnN0YW5jZT8uc3VibWl0Rm9ybVJlc3BvbnNlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnNcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZ1bmN0aW9uVHlwZSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuQ1JFQVRFKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLlNVQ0NFU1MsXHJcbiAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5zdWNjZXNzPy5zdWJtaXNzaW9uLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVmPy5jb21wb25lbnRJbnN0YW5jZT8uZm9ybUNhbmNlbFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIG1vZGFsIHRvIGdldCB1c2VyIGNvbmZpcm1hdGlvbiB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9wZW5EZWxldGVDb25maXJtYXRpb25Nb2RhbChncm91cEluZm86IEdyb3VwSW5mbyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29uZmlybWF0aW9uSW5mbyA9IHNjcmVlblRleHRzPy5kZWxldGVHcm91cD8uY29uZmlybWF0aW9uSW5mbztcclxuICAgIGNvbnN0IGRlbGV0ZUdyb3VwTW9kYWxPcHRpb25zID0ge1xyXG4gICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgcmlnaHRCdXR0b25MYWJlbDogY29uZmlybWF0aW9uSW5mbz8ucmlnaHRCdXR0b25MYWJlbCxcclxuICAgICAgcHJvbXB0TWVzc2FnZTpcclxuICAgICAgICBjb25maXJtYXRpb25JbmZvPy5wcm9tcHRNZXNzYWdlICsgZ3JvdXBJbmZvLmdyb3VwTmFtZSArICc/JyxcclxuICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZS5NSURETEUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE1vZGFsQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IGRlbGV0ZUdyb3VwTW9kYWxPcHRpb25zLFxyXG4gICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZlxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlR3JvdXAoZ3JvdXBJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgQVBJIFJlcXVlc3QgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgaGFuZGxlcyB0aGUgc3VjY2VzcyBhbmQgZXJyb3IgcmVzcG9uc2Ugb2YgdGhlIGh0dHAgcmVxdWVzdC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBDb21wb25lbnRcclxuICAgKi9cclxuICBkZWxldGVHcm91cChncm91cEluZm86IEdyb3VwSW5mbyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVsZXRlR3JvdXBUZXh0ID0gc2NyZWVuVGV4dHM/LmRlbGV0ZUdyb3VwO1xyXG4gICAgY29uc3QgZGVsZXRlR3JvdXBQYXlsb2FkOiBEZWxldGVHcm91cFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBncm91cElkOiBncm91cEluZm8uZ3JvdXBJZCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgLmRlbGV0ZUdyb3VwKGRlbGV0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWY/LmNsb3NlKCk7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGdyb3VwSW5mby5ncm91cElkO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5TVUNDRVNTLFxyXG4gICAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIGdyb3VwSW5mby5ncm91cE5hbWUgK1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5zdWNjZXNzPy5kZWxldGlvbixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93cyB0aGUgc2VhcmNoIGZpZWxkIG9uIGNsaWNrIG9mIHNlYXJjaCBpY29uIGluIGNhc2Ugb2YgbW9iaWxlIHZpZXdcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaEFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmlzR3JvdXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBGaWx0ZXIgYnkgZHJvcGRvd24gb3B0aW9ucyBvbiBjbGljayBvZiBmaWx0ZXIgaWNvbiBpbiBjYXNlIG9mIG1vYmlsZSB2aWV3XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNob3dHcm91cEZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNHcm91cEZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmlzR3JvdXBTZWFyY2hBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlIHRvIHRydWUgYW5kIGxvYWRzIHRoZSBncm91cHMgdGhvc2UgYXJlIGNvbmZpZ3VyZWQgd2l0aCBzZWxlY3RlZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uR3JvdXBTZWFyY2hDbGljayhzZWFyY2hUZXJtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID0gISFzZWFyY2hUZXJtO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdCBncm91cCB0eXBlIG9wdGlvbnMgZnJvbSBncm91cFR5cGVzIHJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7Kn0gIHtTZWxlY3RPcHRpb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlT3B0aW9ucygpOiBTZWxlY3RPcHRpb25bXSB7XHJcbiAgICB0aGlzLmxlZ2VuZENvbG9yKCk7XHJcbiAgICBjb25zdCBncm91cFR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5ncm91cFR5cGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGdyb3VwVHlwZU9wdGlvbnMucHVzaCh7IGlkOiBub2RlWzBdLCBuYW1lOiBub2RlWzFdLm5hbWUgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cFR5cGVPcHRpb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIGxlZ2VuZCBjb2xvciBmcm9tIGdyb3VwVHlwZXMgcmVzcG9uc2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbGVnZW5kQ29sb3IoKTogdm9pZCB7XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmdyb3VwVHlwZXMpLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cHNMZWdlbmRzLnB1c2goe1xyXG4gICAgICAgIGNvbG9yOiBub2RlWzFdLmxlZ2VuZENvbG9yLFxyXG4gICAgICAgIGxhYmVsOiBub2RlWzFdLm5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSBmbGFnIGFuZCBsb2FkcyBwYXJlbnQgZ3JvdXAgaW5mbyBhcyBwZXIgc2VsZWN0ZWQgZmlsdGVyIG9wdGlvbi5cclxuICAgKiBAcGFyYW0ge1NlbGVjdE9wdGlvbn0gZXZlbnRcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFR5cGVGaWx0ZXJlZChldmVudDogU2VsZWN0T3B0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBUeXBlID0gZXZlbnQ7XHJcbiAgICB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmdldEdyb3Vwc1BheWxvYWQgPSB7XHJcbiAgICAgIGdyb3VwSWQ6ICcnLFxyXG4gICAgICBncm91cFR5cGVJZDogdGhpcy5zZWxlY3RlZEdyb3VwVHlwZT8uaWQgYXMgc3RyaW5nLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyBhbGwgdGhlIHBhcmVudCBncm91cHMgaW5mb3JtYXRpb24uXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEdyb3Vwcyhncm91cD86IEdyb3VwSW5mbyk6IHZvaWQge1xyXG4gICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzUGF5bG9hZCA9IHtcclxuICAgICAgICBncm91cElkOiBncm91cD8uZ3JvdXBJZCA/PyAnJyxcclxuICAgICAgICBncm91cFR5cGVJZDogJycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgLmdldEdyb3Vwcyh0aGlzLmdldEdyb3Vwc1BheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cykge1xyXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoaWxkR3JvdXBzSW5mbyA9IHRoaXMudmlld0dyb3VwUmVzcG9uc2UocmVzcG9uc2U/LmJvZHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFyZW50R3JvdXBzSW5mbyA9IHRoaXMudmlld0dyb3VwUmVzcG9uc2UocmVzcG9uc2U/LmJvZHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzOiBzdHJpbmdbXSA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cFR5cGUgaW5mbyB3aXRoIGdyb3VwIHJlc3BvbnNlIGZyb20gZ3JvdXBUeXBlIHJlc3BvbnNlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gcmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICB2aWV3R3JvdXBSZXNwb25zZShyZXNwb25zZTogR3JvdXBJbmZvW10pOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXNwb25zZS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGdyb3VwVHlwZUluZm86IEdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBUeXBlc1tub2RlLmdyb3VwVHlwZV07XHJcbiAgICAgIG5vZGUuZ3JvdXBUeXBlSW5mbyA9IGdyb3VwVHlwZUluZm87XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBncm91cCB0eXBlcy5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBUeXBlcygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBUeXBlcyA9IHJlcz8uYm9keT8uY29uZmlnRmllbGRWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cE9wdGlvbnMgPSB0aGlzLmdldEdyb3VwVHlwZU9wdGlvbnMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXM6IHN0cmluZ1tdID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5FUlJPUixcclxuICAgICAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLWdyb3VwcyBwLTMgcC1zbS00IHAtbWQtNCBwLWxnLTRcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImllZWVzYS1ncm91cHNfX2luZm8gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBiLTNcIlxyXG4gICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgIGlzTW9iaWxlVmlld1xyXG4gICAgICAgID8gJ2llZWVzYS1ncm91cHNfX2luZm8tLXdoaXRlLWJnJ1xyXG4gICAgICAgIDogJ2llZWVzYS1ncm91cHNfX2luZm8tLWJsdWUtYmcnXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxwXHJcbiAgICAgIFtuZ0NsYXNzXT1cImlzTW9iaWxlVmlldyA/ICdpZWVlc2EtdGl0bGUtbGctMjQnIDogJ2llZWVzYS1oZWFkbGluZS1sZy0zNCdcIlxyXG4gICAgPlxyXG4gICAgICB7eyBncm91cHNQYWdlSW5mby5ncm91cHNUaXRsZSB9fVxyXG4gICAgPC9wPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICBjbGFzcz1cImllZWVzYS1ncm91cHNfX2NyZWF0ZS1zdWJncm91cCBtYXQtdGVydGlhcnktYnV0dG9uIGQtbm9uZSBkLXNtLW5vbmUgZC1tZC1ibG9jayBkLWxnLWJsb2NrIGQteGwtYmxvY2tcIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQ3JlYXRlR3JvdXBGb3JtKClcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzLnZpZXdHcm91cHMuYXJpYUxhYmVsLmFkZEdyb3VwXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGNvbnN0YW50cy52aWV3R3JvdXBzLmFkZEdyb3VwIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGQtc20tZmxleCBkLW1kLW5vbmUgZC1sZy1ub25lIGQteGwtbm9uZSBpZWVlc2EtZ3JvdXBzX19tb2JpbGUtaWNvbnMgZ2FwLTJcIlxyXG4gICAgPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiY3JlYXRlR3JvdXBJY29uXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9wZW5DcmVhdGVHcm91cEZvcm0oKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJmaWx0ZXJHcm91cEljb25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwic2hvd0dyb3VwRmlsdGVyKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzLnZpZXdHcm91cHMuYXJpYUxhYmVsLnNlYXJjaFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBTZWFyY2goKVwiXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgID5cclxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLW1hZ25pZnlpbmctZ2xhc3Mgc2VhcmNoLWdyb3VwLWljb25cIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtZ3JvdXBzX19hY3Rpb25zXCJcclxuICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICBpc01vYmlsZVZpZXdcclxuICAgICAgICA/ICdpZWVlc2EtZ3JvdXBzX19hY3Rpb25zLS13aGl0ZS1iZydcclxuICAgICAgICA6ICdpZWVlc2EtZ3JvdXBzX19hY3Rpb25zLS1ibHVlLWJnJ1xyXG4gICAgXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLWdyb3Vwc19fYWN0aW9ucy0tc2VhcmNoIHJvd1wiPlxyXG4gICAgICA8cFxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgb3JkZXItMiBvcmRlci1zbS0xIGNvbC0xMiBjb2wtbWQtNyBjb2wtbGctNyBjb2wteGwtN1wiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBncm91cHNQYWdlSW5mby5ncm91cHNEZXNjcmlwdGlvbiB9fVxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgKChpc0dyb3VwU2VhcmNoQWN0aXZlIHx8IGlzR3JvdXBGaWx0ZXJBY3RpdmUpICYmIGlzTW9iaWxlVmlldykgfHxcclxuICAgICAgICAgICFpc01vYmlsZVZpZXdcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwib3JkZXItMSBvcmRlci1zbS0yIGNvbC0xMiBjb2wtbWQtNSBjb2wtbGctNSBjb2wteGwtNSBkLWZsZXggZmxleC1jb2x1bW5cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGllZWVzYS1zZWFyY2hcclxuICAgICAgICAgICpuZ0lmPVwiaXNHcm91cFNlYXJjaEFjdGl2ZSB8fCAhaXNNb2JpbGVWaWV3XCJcclxuICAgICAgICAgIChzZWFyY2hWYWx1ZSk9XCJvbkdyb3VwU2VhcmNoQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJzZWFyY2hQbGFjZUhvbGRlclRleHRcIlxyXG4gICAgICAgID48L2llZWVzYS1zZWFyY2g+XHJcbiAgICAgICAgPGllZWVzYS1zZWxlY3RcclxuICAgICAgICAgICpuZ0lmPVwiaXNHcm91cEZpbHRlckFjdGl2ZSB8fCAhaXNNb2JpbGVWaWV3XCJcclxuICAgICAgICAgIGNsYXNzPVwiYWxpZ24tc2VsZi1lbmQgcHQtbGctNCBwdC1tZC00IHB0LXhsLTRcIlxyXG4gICAgICAgICAgW2Ryb3Bkb3duT3B0aW9uc109XCJzZWxlY3RHcm91cE9wdGlvbnNcIlxyXG4gICAgICAgICAgW2lzTGFiZWxBbGlnbmVkTGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzZWxlY3RMYWJlbF09XCJjb25zdGFudHMudmlld0dyb3Vwcy5maWx0ZXJCeUxhYmVsXCJcclxuICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbkdyb3VwVHlwZUZpbHRlcmVkKCRldmVudClcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyVGV4dF09XCJmaWx0ZXJQbGFjZUhvbGRlclRleHRcIlxyXG4gICAgICAgID48L2llZWVzYS1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aWVlZXNhLXRyZWVcclxuICAgICAgKm5nSWY9XCJwYXJlbnRHcm91cHNJbmZvICYmIHBhcmVudEdyb3Vwc0luZm8ubGVuZ3RoID4gMFwiXHJcbiAgICAgIFtwYXJlbnRHcm91cHNJbmZvXT1cInBhcmVudEdyb3Vwc0luZm9cIlxyXG4gICAgICBbY2hpbGRHcm91cHNJbmZvXT1cImNoaWxkR3JvdXBzSW5mb1wiXHJcbiAgICAgIFtkZWxldGVkR3JvdXBJZEluZm9dPVwiZGVsZXRlZEdyb3VwSWRcIlxyXG4gICAgICBbaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXT1cImlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZVwiXHJcbiAgICAgICh0b2dnbGVHcm91cENsaWNrKT1cImdldEdyb3VwcygkZXZlbnQpXCJcclxuICAgICAgKGNyZWF0ZUdyb3VwQ2xpY2spPVwib3BlbkNyZWF0ZUdyb3VwRm9ybSgpXCJcclxuICAgICAgKGRlbGV0ZUdyb3VwQ2xpY2spPVwib3BlbkRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsKCRldmVudClcIlxyXG4gICAgPjwvaWVlZXNhLXRyZWU+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwicGFyZW50R3JvdXBzSW5mbyAmJiBwYXJlbnRHcm91cHNJbmZvLmxlbmd0aCA+IDBcIlxyXG4gICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNtLXJvdyBmbGV4LW1kLXJvdyBtdC00IGp1c3RpZnktY29udGVudC1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtc20tZW5kXCJcclxuICAgID5cclxuICAgICAgPHAgY2xhc3M9XCJweC1zbS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaWVlZXNhLWxhYmVsLWxnLWJvbGQtMTZcIj5cclxuICAgICAgICB7eyBjb25zdGFudHMudmlld0dyb3Vwcy5sZWdlbmQgfX1cclxuICAgICAgPC9wPlxyXG4gICAgICA8aWVlZXNhLWxlZ2VuZCBbbGVnZW5kc109XCJncm91cHNMZWdlbmRzXCI+PC9pZWVlc2EtbGVnZW5kPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2dyb3Vwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9ncm91cHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUVkLGVBQWUsRUFFZixtQkFBbUIsRUFFbkIsU0FBUyxFQUNULDBCQUEwQixFQUMxQixlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBR1QsYUFBYSxHQUNkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUl2RTs7O0dBR0c7QUFvQkgsTUFBTSxPQUFPLGVBQWU7SUErQzFCO0lBQ0UsMENB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Q0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0FqWFUsZUFBZTtrR0FBZixlQUFlLGdNQUZmLENBQUMsYUFBYSxDQUFDLDBCQzlENUIsdTNIQXlHQSwrcU9EdkRJLFlBQVksZ09BQ1osZUFBZSw4QkFDZixlQUFlLDRRQUNmLGVBQWUsaUtBQ2YsZUFBZSwrU0FDZixpQkFBaUIsdVBBQ2pCLGVBQWUsK0VBQ2YsbUJBQW1COzsyRkFPVixlQUFlO2tCQW5CM0IsU0FBUzsrQkFFRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsbUJBQW1CO3FCQUNwQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDO3dPQW1DakIsY0FBYztzQkFBdEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENyZWF0ZUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NyZWF0ZS1ncm91cC9jcmVhdGUtZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoQ29tcG9uZW50LFxyXG4gIE1vZGFsQ29tcG9uZW50LFxyXG4gIFNlbGVjdE9wdGlvbixcclxuICBTZWxlY3RDb21wb25lbnQsXHJcbiAgTGVnZW5kLFxyXG4gIEljb25CdXR0b25Db21wb25lbnQsXHJcbiAgSWNvbkJ1dHRvbixcclxuICBBbGlnblR5cGUsXHJcbiAgTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsXHJcbiAgTGVnZW5kQ29tcG9uZW50LFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCB7IFRyZWVWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBUeXBlIH0gZnJvbSAnLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIE1vZGFsVHlwZSxcclxuICBBbGVydFR5cGUsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR2V0R3JvdXBzUGF5bG9hZCB9IGZyb20gJy4vbW9kZWxzL3ZpZXctZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWxldGVHcm91cFBheWxvYWQgfSBmcm9tICcuL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBjb21wb25lbnQgaXMgYSB3cmFwcGVyIG9yIGNvbnRhaW5lciBjb21wb25lbnQgZm9yIGdyb3VwcyBtYW5hZ2VtZW50IHJldXNhYmxlIGNvbXBvbmVudCBhbmQgaW4gdGhpcyBjb21wb25lbnQgaW50ZWdyYXRlcyBhbGwgZ3JvdXAgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXRpZXMgYW5kIHRoaXMgd2lsbCBiZSBlbnRyeSBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGdyb3VwcyB3aGVuIGl0IGlzIGNvbnN1bWVkIGluIG90aGVyIGFwcGxpY2F0aW9ucy5cclxuICogQGNsYXNzIEdyb3Vwc0NvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2llZWVzYS1ncm91cHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgU2VhcmNoQ29tcG9uZW50LFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgVHJlZVZpZXdDb21wb25lbnQsXHJcbiAgICBMZWdlbmRDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyb3Vwcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXBzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtBbGVydHNTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkaWFsb2dSZWY6IGFueTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcbiAgdmlld0dyb3VwVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3VwcztcclxuICBpc0dyb3VwU2VhcmNoQWN0aXZlID0gZmFsc2U7XHJcbiAgaXNHcm91cEZpbHRlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIGlzTW9iaWxlVmlldyA9IGZhbHNlO1xyXG4gIGNoaWxkR3JvdXBzSW5mbyE6IEdyb3VwSW5mb1tdO1xyXG4gIHNlbGVjdGVkR3JvdXBUeXBlITogU2VsZWN0T3B0aW9uO1xyXG4gIHBhcmVudEdyb3Vwc0luZm8hOiBHcm91cEluZm9bXTtcclxuICBzZWxlY3RHcm91cE9wdGlvbnMhOiBTZWxlY3RPcHRpb25bXTtcclxuICBkZWxldGVkR3JvdXBJZCE6IHN0cmluZztcclxuICBncm91cFR5cGVzITogeyBba2V5OiBzdHJpbmddOiBHcm91cFR5cGUgfTtcclxuICBzZWFyY2hQbGFjZUhvbGRlclRleHQ6IHN0cmluZyA9IHRoaXMudmlld0dyb3VwVGV4dHM/LnBsYWNlaG9sZGVyVGV4dD8uc2VhcmNoO1xyXG4gIGZpbHRlclBsYWNlSG9sZGVyVGV4dDogc3RyaW5nID0gdGhpcy52aWV3R3JvdXBUZXh0cz8ucGxhY2Vob2xkZXJUZXh0Py5maWx0ZXI7XHJcbiAgY3JlYXRlR3JvdXBJY29uOiBJY29uQnV0dG9uID0ge1xyXG4gICAgaWQ6IDEsXHJcbiAgICBhcmlhTGFiZWw6IHRoaXMudmlld0dyb3VwVGV4dHM/LmFyaWFMYWJlbC5hZGQsXHJcbiAgICBpY29uVVJMOiB0aGlzLnZpZXdHcm91cFRleHRzPy5jcmVhdGVHcm91cEljb24sXHJcbiAgICB0b29sVGlwOiB0aGlzLnZpZXdHcm91cFRleHRzPy5hcmlhTGFiZWwuYWRkLFxyXG4gIH07XHJcbiAgZmlsdGVyR3JvdXBJY29uOiBJY29uQnV0dG9uID0ge1xyXG4gICAgaWQ6IDIsXHJcbiAgICBhcmlhTGFiZWw6IHRoaXMudmlld0dyb3VwVGV4dHM/LmFyaWFMYWJlbC5maWx0ZXIsXHJcbiAgICBpY29uVVJMOiB0aGlzLnZpZXdHcm91cFRleHRzPy5maWx0ZXJHcm91cEljb24sXHJcbiAgICB0b29sVGlwOiB0aGlzLnZpZXdHcm91cFRleHRzPy5hcmlhTGFiZWwuZmlsdGVyLFxyXG4gIH07XHJcbiAgZ3JvdXBzTGVnZW5kczogTGVnZW5kW10gPSBbXTtcclxuICBnZXRHcm91cHNQYXlsb2FkOiBHZXRHcm91cHNQYXlsb2FkID0geyBncm91cElkOiAnJywgZ3JvdXBUeXBlSWQ6ICcnIH07XHJcbiAgQElucHV0KCkgZ3JvdXBzUGFnZUluZm86IHtcclxuICAgIGdyb3Vwc1RpdGxlOiBzdHJpbmc7XHJcbiAgICBncm91cHNEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH0gPSB7XHJcbiAgICBncm91cHNUaXRsZTogdGhpcy52aWV3R3JvdXBUZXh0cz8uZ3JvdXBzVGl0bGUsXHJcbiAgICBncm91cHNEZXNjcmlwdGlvbjogdGhpcy52aWV3R3JvdXBUZXh0cz8uZ3JvdXBzRGVzY3JpcHRpb24sXHJcbiAgfTtcclxuICBASW5wdXQoKSBhcHBsaWNhdGlvbklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwaUJhc2VVUkwhOiBzdHJpbmc7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBASW5wdXQoKSBwZXJtaXNzaW9ucyE6IGFueTtcclxuICBjcmVhdGVHcm91cFRleHQgPSBzY3JlZW5UZXh0cz8uY3JlYXRlR3JvdXA7XHJcbiAgZnVuY3Rpb25UeXBlITogR3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgYWxpZ25tZW50VHlwZSA9IEFsaWduVHlwZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3Vwc1NlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyU2VydmljZTogQnJlYWtwb2ludE9ic2VydmVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlOiBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gcmVzdWx0Lm1hdGNoZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGNvbXBvbmVudC5cclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0QXBwQ29uZmlnKHRoaXMuYXBpQmFzZVVSTCwgdGhpcy5wZXJtaXNzaW9ucyk7XHJcbiAgICB0aGlzLmdldEdyb3VwVHlwZXMoKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkaWFsb2cgb3B0aW9ucyBmb3IgY3JlYXRlIGdyb3VwIG1vZGFsIGFuZCBjYWxscyBvcGVuTW9kYWwgbWV0aG9kLlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvcGVuQ3JlYXRlR3JvdXBGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGluZzogdGhpcy5jcmVhdGVHcm91cFRleHQ/LmhlYWRpbmcsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudFJlZmVyZW5jZTogQ3JlYXRlR3JvdXBDb21wb25lbnQsXHJcbiAgICAgIG1vZGFsVHlwZTogTW9kYWxUeXBlLkZPUk0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEU7XHJcbiAgICB0aGlzLm9wZW5Nb2RhbChkaWFsb2dPcHRpb25zLCAnaWVlZXNhLWNyZWF0ZS1ncm91cCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgbW9kYWwgY29tcG9uZW50IHdpdGggZm9yIHJlY2VpdmVkIHBhcmFtcyBhbmQgaGFuZGxlcyBmb3JtIHN1Ym1pc3Npb24gc3VjY2VzcyBhbmQgZXJyb3JzLlxyXG4gICAqIEBwYXJhbSB7Kn0gZGlhbG9nT3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcclxuICBvcGVuTW9kYWwoZGlhbG9nT3B0aW9uczogYW55LCBjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSA/PyAnJztcclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiBkaWFsb2dPcHRpb25zLFxyXG4gICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2llZWVzYS1tb2RhbC1kaWFsb2cnLCBjbGFzc05hbWVdLFxyXG4gICAgICBhcmlhTW9kYWw6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVmPy5jb21wb25lbnRJbnN0YW5jZT8uc3VibWl0Rm9ybVJlc3BvbnNlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tdW51c2VkLXZhcnNcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZ1bmN0aW9uVHlwZSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuQ1JFQVRFKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLlNVQ0NFU1MsXHJcbiAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuY3JlYXRlR3JvdXBUZXh0Py5tZXNzYWdlPy5zdWNjZXNzPy5zdWJtaXNzaW9uLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVmPy5jb21wb25lbnRJbnN0YW5jZT8uZm9ybUNhbmNlbFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIG1vZGFsIHRvIGdldCB1c2VyIGNvbmZpcm1hdGlvbiB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9wZW5EZWxldGVDb25maXJtYXRpb25Nb2RhbChncm91cEluZm86IEdyb3VwSW5mbyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29uZmlybWF0aW9uSW5mbyA9IHNjcmVlblRleHRzPy5kZWxldGVHcm91cD8uY29uZmlybWF0aW9uSW5mbztcclxuICAgIGNvbnN0IGRlbGV0ZUdyb3VwTW9kYWxPcHRpb25zID0ge1xyXG4gICAgICBsZWZ0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LmxlZnRCdXR0b25MYWJlbCxcclxuICAgICAgcmlnaHRCdXR0b25MYWJlbDogY29uZmlybWF0aW9uSW5mbz8ucmlnaHRCdXR0b25MYWJlbCxcclxuICAgICAgcHJvbXB0TWVzc2FnZTpcclxuICAgICAgICBjb25maXJtYXRpb25JbmZvPy5wcm9tcHRNZXNzYWdlICsgZ3JvdXBJbmZvLmdyb3VwTmFtZSArICc/JyxcclxuICAgICAgYWN0aW9uQnV0dG9uQWxpZ246IHRoaXMuYWxpZ25tZW50VHlwZS5NSURETEUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE1vZGFsQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IGRlbGV0ZUdyb3VwTW9kYWxPcHRpb25zLFxyXG4gICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICBhdXRvRm9jdXM6ICdkaWFsb2cnXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nUmVmXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVHcm91cChncm91cEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBBUEkgUmVxdWVzdCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCBoYW5kbGVzIHRoZSBzdWNjZXNzIGFuZCBlcnJvciByZXNwb25zZSBvZiB0aGUgaHR0cCByZXF1ZXN0LlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cENvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwKGdyb3VwSW5mbzogR3JvdXBJbmZvKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWxldGVHcm91cFRleHQgPSBzY3JlZW5UZXh0cz8uZGVsZXRlR3JvdXA7XHJcbiAgICBjb25zdCBkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIGdyb3VwSWQ6IGdyb3VwSW5mby5ncm91cElkLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZGVsZXRlR3JvdXAoZGVsZXRlR3JvdXBQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2UoKTtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gZ3JvdXBJbmZvLmdyb3VwSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLlNVQ0NFU1MsXHJcbiAgICAgICAgICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICBtZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmZvLmdyb3VwTmFtZSArXHJcbiAgICAgICAgICAgICAgICBkZWxldGVHcm91cFRleHQ/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LmRlbGV0aW9uLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykgJiYgIWVycm9yPy5lcnJvcj8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBzZWFyY2ggZmllbGQgb24gY2xpY2sgb2Ygc2VhcmNoIGljb24gaW4gY2FzZSBvZiBtb2JpbGUgdmlld1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNHcm91cEZpbHRlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvd3MgdGhlIEZpbHRlciBieSBkcm9wZG93biBvcHRpb25zIG9uIGNsaWNrIG9mIGZpbHRlciBpY29uIGluIGNhc2Ugb2YgbW9iaWxlIHZpZXdcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0dyb3VwRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0dyb3VwRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaEFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUgdG8gdHJ1ZSBhbmQgbG9hZHMgdGhlIGdyb3VwcyB0aG9zZSBhcmUgY29uZmlndXJlZCB3aXRoIHNlbGVjdGVkIGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFNlYXJjaENsaWNrKHNlYXJjaFRlcm06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUgPSAhIXNlYXJjaFRlcm07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgc2VsZWN0IGdyb3VwIHR5cGUgb3B0aW9ucyBmcm9tIGdyb3VwVHlwZXMgcmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHsqfSAge1NlbGVjdE9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVPcHRpb25zKCk6IFNlbGVjdE9wdGlvbltdIHtcclxuICAgIHRoaXMubGVnZW5kQ29sb3IoKTtcclxuICAgIGNvbnN0IGdyb3VwVHlwZU9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmdyb3VwVHlwZXMpLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgZ3JvdXBUeXBlT3B0aW9ucy5wdXNoKHsgaWQ6IG5vZGVbMF0sIG5hbWU6IG5vZGVbMV0ubmFtZSB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwVHlwZU9wdGlvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgbGVnZW5kIGNvbG9yIGZyb20gZ3JvdXBUeXBlcyByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBsZWdlbmRDb2xvcigpOiB2b2lkIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZ3JvdXBUeXBlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3Vwc0xlZ2VuZHMucHVzaCh7XHJcbiAgICAgICAgY29sb3I6IG5vZGVbMV0ubGVnZW5kQ29sb3IsXHJcbiAgICAgICAgbGFiZWw6IG5vZGVbMV0ubmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlIGZsYWcgYW5kIGxvYWRzIHBhcmVudCBncm91cCBpbmZvIGFzIHBlciBzZWxlY3RlZCBmaWx0ZXIgb3B0aW9uLlxyXG4gICAqIEBwYXJhbSB7U2VsZWN0T3B0aW9ufSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwVHlwZUZpbHRlcmVkKGV2ZW50OiBTZWxlY3RPcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFR5cGUgPSBldmVudDtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzUGF5bG9hZCA9IHtcclxuICAgICAgZ3JvdXBJZDogJycsXHJcbiAgICAgIGdyb3VwVHlwZUlkOiB0aGlzLnNlbGVjdGVkR3JvdXBUeXBlPy5pZCBhcyBzdHJpbmcsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRHcm91cHMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGFsbCB0aGUgcGFyZW50IGdyb3VwcyBpbmZvcm1hdGlvbi5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBzKGdyb3VwPzogR3JvdXBJbmZvKTogdm9pZCB7XHJcbiAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgdGhpcy5nZXRHcm91cHNQYXlsb2FkID0ge1xyXG4gICAgICAgIGdyb3VwSWQ6IGdyb3VwPy5ncm91cElkID8/ICcnLFxyXG4gICAgICAgIGdyb3VwVHlwZUlkOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBzKHRoaXMuZ2V0R3JvdXBzUGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hpbGRHcm91cHNJbmZvID0gdGhpcy52aWV3R3JvdXBSZXNwb25zZShyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRHcm91cHNJbmZvID0gdGhpcy52aWV3R3JvdXBSZXNwb25zZShyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXM6IHN0cmluZ1tdID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5FUlJPUixcclxuICAgICAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIGdyb3VwVHlwZSBpbmZvIHdpdGggZ3JvdXAgcmVzcG9uc2UgZnJvbSBncm91cFR5cGUgcmVzcG9uc2VcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSByZXNwb25zZVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBJbmZvW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHZpZXdHcm91cFJlc3BvbnNlKHJlc3BvbnNlOiBHcm91cEluZm9bXSk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJlc3BvbnNlLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBUeXBlSW5mbzogR3JvdXBUeXBlID0gdGhpcy5ncm91cFR5cGVzW25vZGUuZ3JvdXBUeXBlXTtcclxuICAgICAgbm9kZS5ncm91cFR5cGVJbmZvID0gZ3JvdXBUeXBlSW5mbztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZHMgdGhlIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cFR5cGVzID0gcmVzPy5ib2R5Py5jb25maWdGaWVsZFZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEdyb3VwT3B0aW9ucyA9IHRoaXMuZ2V0R3JvdXBUeXBlT3B0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2Rlczogc3RyaW5nW10gPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvckNvZGVzKSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgICAgIGFsZXJ0VHlwZTogQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtZ3JvdXBzIHAtMyBwLXNtLTQgcC1tZC00IHAtbGctNFwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiaWVlZXNhLWdyb3Vwc19faW5mbyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gcGItM1wiXHJcbiAgICBbbmdDbGFzc109XCJcclxuICAgICAgaXNNb2JpbGVWaWV3XHJcbiAgICAgICAgPyAnaWVlZXNhLWdyb3Vwc19faW5mby0td2hpdGUtYmcnXHJcbiAgICAgICAgOiAnaWVlZXNhLWdyb3Vwc19faW5mby0tYmx1ZS1iZydcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPHBcclxuICAgICAgW25nQ2xhc3NdPVwiaXNNb2JpbGVWaWV3ID8gJ2llZWVzYS10aXRsZS1sZy0yNCcgOiAnaWVlZXNhLWhlYWRsaW5lLWxnLTM0J1wiXHJcbiAgICA+XHJcbiAgICAgIHt7IGdyb3Vwc1BhZ2VJbmZvLmdyb3Vwc1RpdGxlIH19XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLWdyb3Vwc19fY3JlYXRlLXN1Ymdyb3VwIG1hdC10ZXJ0aWFyeS1idXR0b24gZC1ub25lIGQtc20tbm9uZSBkLW1kLWJsb2NrIGQtbGctYmxvY2sgZC14bC1ibG9ja1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGVHcm91cEZvcm0oKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHMudmlld0dyb3Vwcy5hcmlhTGFiZWwuYWRkR3JvdXBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgY29uc3RhbnRzLnZpZXdHcm91cHMuYWRkR3JvdXAgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJkLWZsZXggZC1zbS1mbGV4IGQtbWQtbm9uZSBkLWxnLW5vbmUgZC14bC1ub25lIGllZWVzYS1ncm91cHNfX21vYmlsZS1pY29ucyBnYXAtMlwiXHJcbiAgICA+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJjcmVhdGVHcm91cEljb25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib3BlbkNyZWF0ZUdyb3VwRm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cImZpbHRlckdyb3VwSWNvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJzaG93R3JvdXBGaWx0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb25zdGFudHMudmlld0dyb3Vwcy5hcmlhTGFiZWwuc2VhcmNoXCJcclxuICAgICAgICAoY2xpY2spPVwib25Hcm91cFNlYXJjaCgpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtbWFnbmlmeWluZy1nbGFzcyBzZWFyY2gtZ3JvdXAtaWNvblwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImllZWVzYS1ncm91cHNfX2FjdGlvbnNcIlxyXG4gICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgIGlzTW9iaWxlVmlld1xyXG4gICAgICAgID8gJ2llZWVzYS1ncm91cHNfX2FjdGlvbnMtLXdoaXRlLWJnJ1xyXG4gICAgICAgIDogJ2llZWVzYS1ncm91cHNfX2FjdGlvbnMtLWJsdWUtYmcnXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtZ3JvdXBzX19hY3Rpb25zLS1zZWFyY2ggcm93XCI+XHJcbiAgICAgIDxwXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBvcmRlci0yIG9yZGVyLXNtLTEgY29sLTEyIGNvbC1tZC03IGNvbC1sZy03IGNvbC14bC03XCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGdyb3Vwc1BhZ2VJbmZvLmdyb3Vwc0Rlc2NyaXB0aW9uIH19XHJcbiAgICAgIDwvcD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAoKGlzR3JvdXBTZWFyY2hBY3RpdmUgfHwgaXNHcm91cEZpbHRlckFjdGl2ZSkgJiYgaXNNb2JpbGVWaWV3KSB8fFxyXG4gICAgICAgICAgIWlzTW9iaWxlVmlld1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgY2xhc3M9XCJvcmRlci0xIG9yZGVyLXNtLTIgY29sLTEyIGNvbC1tZC01IGNvbC1sZy01IGNvbC14bC01IGQtZmxleCBmbGV4LWNvbHVtblwiXHJcbiAgICAgID5cclxuICAgICAgICA8aWVlZXNhLXNlYXJjaFxyXG4gICAgICAgICAgKm5nSWY9XCJpc0dyb3VwU2VhcmNoQWN0aXZlIHx8ICFpc01vYmlsZVZpZXdcIlxyXG4gICAgICAgICAgKHNlYXJjaFZhbHVlKT1cIm9uR3JvdXBTZWFyY2hDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cInNlYXJjaFBsYWNlSG9sZGVyVGV4dFwiXHJcbiAgICAgICAgPjwvaWVlZXNhLXNlYXJjaD5cclxuICAgICAgICA8aWVlZXNhLXNlbGVjdFxyXG4gICAgICAgICAgKm5nSWY9XCJpc0dyb3VwRmlsdGVyQWN0aXZlIHx8ICFpc01vYmlsZVZpZXdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhbGlnbi1zZWxmLWVuZCBwdC1sZy00IHB0LW1kLTQgcHQteGwtNFwiXHJcbiAgICAgICAgICBbZHJvcGRvd25PcHRpb25zXT1cInNlbGVjdEdyb3VwT3B0aW9uc1wiXHJcbiAgICAgICAgICBbaXNMYWJlbEFsaWduZWRMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgW3NlbGVjdExhYmVsXT1cImNvbnN0YW50cy52aWV3R3JvdXBzLmZpbHRlckJ5TGFiZWxcIlxyXG4gICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uR3JvdXBUeXBlRmlsdGVyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJUZXh0XT1cImZpbHRlclBsYWNlSG9sZGVyVGV4dFwiXHJcbiAgICAgICAgPjwvaWVlZXNhLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxpZWVlc2EtdHJlZVxyXG4gICAgICAqbmdJZj1cInBhcmVudEdyb3Vwc0luZm8gJiYgcGFyZW50R3JvdXBzSW5mby5sZW5ndGggPiAwXCJcclxuICAgICAgW3BhcmVudEdyb3Vwc0luZm9dPVwicGFyZW50R3JvdXBzSW5mb1wiXHJcbiAgICAgIFtjaGlsZEdyb3Vwc0luZm9dPVwiY2hpbGRHcm91cHNJbmZvXCJcclxuICAgICAgW2RlbGV0ZWRHcm91cElkSW5mb109XCJkZWxldGVkR3JvdXBJZFwiXHJcbiAgICAgIFtpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmVdPVwiaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgKHRvZ2dsZUdyb3VwQ2xpY2spPVwiZ2V0R3JvdXBzKCRldmVudClcIlxyXG4gICAgICAoY3JlYXRlR3JvdXBDbGljayk9XCJvcGVuQ3JlYXRlR3JvdXBGb3JtKClcIlxyXG4gICAgICAoZGVsZXRlR3JvdXBDbGljayk9XCJvcGVuRGVsZXRlQ29uZmlybWF0aW9uTW9kYWwoJGV2ZW50KVwiXHJcbiAgICA+PC9pZWVlc2EtdHJlZT5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJwYXJlbnRHcm91cHNJbmZvICYmIHBhcmVudEdyb3Vwc0luZm8ubGVuZ3RoID4gMFwiXHJcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtc20tcm93IGZsZXgtbWQtcm93IG10LTQganVzdGlmeS1jb250ZW50LXN0YXJ0IGp1c3RpZnktY29udGVudC1zbS1lbmRcIlxyXG4gICAgPlxyXG4gICAgICA8cCBjbGFzcz1cInB4LXNtLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBpZWVlc2EtbGFiZWwtbGctYm9sZC0xNlwiPlxyXG4gICAgICAgIHt7IGNvbnN0YW50cy52aWV3R3JvdXBzLmxlZ2VuZCB9fVxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxpZWVlc2EtbGVnZW5kIFtsZWdlbmRzXT1cImdyb3Vwc0xlZ2VuZHNcIj48L2llZWVzYS1sZWdlbmQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==