@alfresco/adf-process-services-cloud 8.1.0-15902121227 → 8.1.0-15928551305

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +4 -4
  2. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +8 -9
  3. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +9 -10
  4. package/esm2022/lib/form/components/form-cloud.component.mjs +9 -10
  5. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +7 -8
  6. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +5 -6
  7. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +6 -7
  8. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +9 -10
  9. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +4 -5
  10. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +8 -9
  11. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +7 -8
  12. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +4 -5
  13. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +4 -5
  14. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +4 -5
  15. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +4 -5
  16. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +4 -5
  17. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +5 -6
  18. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +8 -9
  19. package/esm2022/lib/group/components/group-cloud.component.mjs +13 -14
  20. package/esm2022/lib/people/components/people-cloud.component.mjs +13 -14
  21. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +11 -12
  22. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +10 -11
  23. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +6 -7
  24. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +4 -5
  25. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +13 -14
  26. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +15 -16
  27. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +15 -16
  28. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +6 -7
  29. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +8 -9
  30. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +8 -9
  31. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +5 -6
  32. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +7 -8
  33. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +5 -6
  34. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +5 -6
  35. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +5 -6
  36. package/fesm2022/adf-process-services-cloud.mjs +105 -106
  37. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  38. package/package.json +4 -4
@@ -19,7 +19,7 @@ import { ServiceTaskFilterCloudService } from '../../../services/service-task-fi
19
19
  import { BaseEditTaskFilterCloudComponent } from '../base-edit-task-filter-cloud.component';
20
20
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
21
21
  import { CommonModule } from '@angular/common';
22
- import { TranslateModule } from '@ngx-translate/core';
22
+ import { TranslatePipe } from '@ngx-translate/core';
23
23
  import { MatExpansionModule } from '@angular/material/expansion';
24
24
  import { MatButtonModule } from '@angular/material/button';
25
25
  import { IconComponent } from '@alfresco/adf-core';
@@ -36,18 +36,17 @@ import { PeopleCloudComponent } from '../../../../../people/components/people-cl
36
36
  import { TaskAssignmentFilterCloudComponent } from '../../task-assignment-filter/task-assignment-filter.component';
37
37
  import * as i0 from "@angular/core";
38
38
  import * as i1 from "@angular/common";
39
- import * as i2 from "@ngx-translate/core";
40
- import * as i3 from "@angular/material/expansion";
41
- import * as i4 from "@angular/material/button";
42
- import * as i5 from "@angular/material/progress-spinner";
43
- import * as i6 from "@angular/forms";
44
- import * as i7 from "@angular/material/form-field";
45
- import * as i8 from "@angular/material/select";
46
- import * as i9 from "@angular/material/core";
47
- import * as i10 from "@angular/material/input";
48
- import * as i11 from "@angular/material/datepicker";
49
- import * as i12 from "@angular/material/icon";
50
- import * as i13 from "@angular/material/checkbox";
39
+ import * as i2 from "@angular/material/expansion";
40
+ import * as i3 from "@angular/material/button";
41
+ import * as i4 from "@angular/material/progress-spinner";
42
+ import * as i5 from "@angular/forms";
43
+ import * as i6 from "@angular/material/form-field";
44
+ import * as i7 from "@angular/material/select";
45
+ import * as i8 from "@angular/material/core";
46
+ import * as i9 from "@angular/material/input";
47
+ import * as i10 from "@angular/material/datepicker";
48
+ import * as i11 from "@angular/material/icon";
49
+ import * as i12 from "@angular/material/checkbox";
51
50
  export class EditServiceTaskFilterCloudComponent extends BaseEditTaskFilterCloudComponent {
52
51
  constructor() {
53
52
  super();
@@ -180,13 +179,13 @@ export class EditServiceTaskFilterCloudComponent extends BaseEditTaskFilterCloud
180
179
  ];
181
180
  }
182
181
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditServiceTaskFilterCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
183
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EditServiceTaskFilterCloudComponent, isStandalone: true, selector: "adf-cloud-edit-service-task-filter", usesInheritance: true, ngImport: i0, template: "<mat-accordion [hideToggle]=\"isLoading\" class=\"adf-edit-task-filter\">\n <mat-expansion-panel (afterExpand)=\"onExpand()\" (closed)=\"onClose()\">\n <mat-expansion-panel-header *ngIf=\"taskFilter\" id=\"adf-edit-task-filter-expansion-header\" class=\"adf-edit-task-filter-header\">\n <ng-container *ngIf=\"!isLoading; else loadingTemplate\">\n <mat-panel-title *ngIf=\"showTaskFilterName\" id=\"adf-edit-task-filter-title-id\" class=\"adf-edit-task-filter-header__title\"\n >{{taskFilter.name | translate}}</mat-panel-title>\n <mat-panel-description class=\"adf-edit-task-filter-header__description\" id=\"adf-edit-task-filter-sub-title-id\">\n <span *ngIf=\"showTitle\">{{ 'ADF_CLOUD_EDIT_TASK_FILTER.TITLE' | translate}}</span>\n <div *ngIf=\"showFilterActions\" class=\"adf-cloud-edit-task-filter-actions\">\n <ng-container *ngIf=\"toggleFilterActions\">\n <button *ngFor=\"let filterAction of taskFilterActions\"\n mat-icon-button\n [title]=\"filterAction.tooltip | translate\"\n [attr.data-automation-id]=\"'adf-filter-action-' + filterAction.actionType\"\n [disabled]=\"isDisabledAction(filterAction)\"\n (click)=\"executeFilterActions(filterAction)\">\n <adf-icon [value]=\"filterAction.icon\" />\n </button>\n </ng-container>\n </div>\n </mat-panel-description>\n </ng-container>\n <ng-template #loadingTemplate>\n <div class=\"adf-cloud-edit-task-filter-loading-margin\">\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"30\" />\n </div>\n </ng-template>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"!isLoading;\">\n <form *ngIf=\"editTaskFilterForm\" [formGroup]=\"editTaskFilterForm\" class=\"adf-edit-task-filter-content\">\n <div class=\"adf-edit-task-filter-form\">\n <ng-container *ngFor=\"let taskFilterProperty of taskFilterProperties\">\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'select'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__select-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\"\n (selectionChange)=\"onStatusChange($event)\">\n <mat-option *ngFor=\"let propertyOption of taskFilterProperty.options\"\n [value]=\"propertyOption.value\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-options-' + taskFilterProperty.key\">\n {{ propertyOption.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'text'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__text-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n [formControlName]=\"taskFilterProperty.key\"\n type=\"text\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\" />\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'date'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label>{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n (keyup)=\"onDateChanged($any($event).target.value, taskFilterProperty)\"\n (dateChange)=\"onDateChanged($event.value, taskFilterProperty)\"\n [matDatepicker]=\"dateController\"\n [placeholder]=\"taskFilterProperty.label | translate\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\">\n <mat-datepicker-toggle matSuffix\n [for]=\"dateController\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-toggle-' + taskFilterProperty.key\" />\n <mat-datepicker #dateController\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-picker-' + taskFilterProperty.key\" />\n <div class=\"adf-edit-task-filter-date-error-container\">\n <div *ngIf=\"hasError(taskFilterProperty)\">\n <div class=\"adf-error-text\">{{'ADF_TASK_LIST.START_TASK.FORM.ERROR.DATE'|translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n <div class=\"adf-edit-task-filter-checkbox\"\n *ngIf=\"taskFilterProperty.type === 'checkbox'\">\n <mat-checkbox color=\"primary\"\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"taskFilterProperty.key\"\n >{{taskFilterProperty.label | translate}}</mat-checkbox>\n </div>\n\n <adf-cloud-date-range-filter\n *ngIf=\"taskFilterProperty.type === 'date-range'\"\n [processFilterProperty]=\"taskFilterProperty\"\n [options]=\"taskFilterProperty.dateFilterOptions\"\n (dateTypeChange)=\"onDateTypeChange($event, taskFilterProperty)\"\n (dateChanged)=\"onDateRangeFilterChanged($event, taskFilterProperty)\" />\n <adf-cloud-people\n class=\"{{ 'adf-edit-task-filter-' + taskFilterProperty.key }}\"\n *ngIf=\"taskFilterProperty.type === 'people'\"\n [preSelectUsers]=\"taskFilterProperty.value\"\n [title]=\"taskFilterProperty.label\"\n [validate]=\"true\"\n [appName]=\"appName\"\n [mode]=\"taskFilterProperty.selectionMode\"\n (changedUsers)=\"onChangedUser($event, taskFilterProperty)\" />\n\n <adf-cloud-task-assignment-filter\n *ngIf=\"taskFilterProperty.type === 'assignment'\"\n [taskFilterProperty]=\"taskFilterProperty\"\n [status]=\"selectedStatus\"\n [appName]=\"appName\"\n (assignedUsersChange)=\"onAssignedUsersChange($event)\"\n (assignedGroupsChange)=\"onAssignedGroupsChange($event)\"\n (assignmentTypeChange)=\"onAssignmentTypeChange($event)\" />\n\n </ng-container>\n </div>\n </form>\n </ng-container>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [".adf-edit-task-filter-checkbox{font-size:var(--theme-subheading-2-font-size);padding-top:10px;text-align:center;flex:1 23%}.adf-edit-task-filter-date-error-container{position:absolute;height:20px;margin-top:12px;width:100%}.adf-edit-task-filter-date-error-container>div{display:flex;flex-flow:row;justify-content:flex-start}.adf-edit-task-filter-date-error-container .adf-error-text{padding-right:8px;height:16px;font-size:10px;line-height:1.33;color:var(--theme-warn-color);width:auto}.adf-edit-task-filter-date-error-container .adf-error-icon{font-size:16px;color:var(--theme-warn-color)}.adf-edit-task-filter-dateRange mat-grid-list{width:450px}.adf-cloud-edit-task-filter-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.adf-edit-task-filter-form{flex-flow:row wrap;display:flex;place-content:center flex-start;align-items:center}.adf-edit-task-filter-form :not(:last-child){margin-right:10px}.adf-edit-task-filter-form mat-form-field,.adf-edit-task-filter-form adf-cloud-people,.adf-edit-task-filter-form adf-cloud-task-assignment-filter{flex:1 1 23%}@media (max-width: 599.9px){.adf-edit-task-filter-form{flex-flow:column}.adf-edit-task-filter-form :not(:last-child){margin-bottom:10px;margin-right:0}}.adf-edit-task-filter-header{height:48px}.adf-edit-task-filter-header__title{color:var(--adf-theme-foreground-text-color)}.adf-edit-task-filter-header__description{color:var(--adf-theme-foreground-secondary-text-color);place-content:center space-between}.adf-edit-task-filter-content__text-label,.adf-edit-task-filter-content__select-label{color:var(--adf-theme-foreground-secondary-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i3.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i3.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: DateRangeFilterComponent, selector: "adf-cloud-date-range-filter", inputs: ["processFilterProperty", "options"], outputs: ["dateChanged", "dateTypeChange"] }, { kind: "component", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: ["label", "appName", "mode", "roles", "validate", "readOnly", "required", "preSelectUsers", "excludedUsers", "groupsRestriction", "userChipsCtrl", "searchUserCtrl", "title", "placeholder", "hideInputOnSingleSelection", "formFieldAppearance", "formFieldSubscriptSizing", "showErrors", "showFullNameOnHover"], outputs: ["selectUser", "removeUser", "changedUsers", "warning"] }, { kind: "component", type: TaskAssignmentFilterCloudComponent, selector: "adf-cloud-task-assignment-filter", inputs: ["appName", "taskFilterProperty", "status"], outputs: ["assignedUsersChange", "assignedGroupsChange", "assignmentTypeChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
182
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EditServiceTaskFilterCloudComponent, isStandalone: true, selector: "adf-cloud-edit-service-task-filter", usesInheritance: true, ngImport: i0, template: "<mat-accordion [hideToggle]=\"isLoading\" class=\"adf-edit-task-filter\">\n <mat-expansion-panel (afterExpand)=\"onExpand()\" (closed)=\"onClose()\">\n <mat-expansion-panel-header *ngIf=\"taskFilter\" id=\"adf-edit-task-filter-expansion-header\" class=\"adf-edit-task-filter-header\">\n <ng-container *ngIf=\"!isLoading; else loadingTemplate\">\n <mat-panel-title *ngIf=\"showTaskFilterName\" id=\"adf-edit-task-filter-title-id\" class=\"adf-edit-task-filter-header__title\"\n >{{taskFilter.name | translate}}</mat-panel-title>\n <mat-panel-description class=\"adf-edit-task-filter-header__description\" id=\"adf-edit-task-filter-sub-title-id\">\n <span *ngIf=\"showTitle\">{{ 'ADF_CLOUD_EDIT_TASK_FILTER.TITLE' | translate}}</span>\n <div *ngIf=\"showFilterActions\" class=\"adf-cloud-edit-task-filter-actions\">\n <ng-container *ngIf=\"toggleFilterActions\">\n <button *ngFor=\"let filterAction of taskFilterActions\"\n mat-icon-button\n [title]=\"filterAction.tooltip | translate\"\n [attr.data-automation-id]=\"'adf-filter-action-' + filterAction.actionType\"\n [disabled]=\"isDisabledAction(filterAction)\"\n (click)=\"executeFilterActions(filterAction)\">\n <adf-icon [value]=\"filterAction.icon\" />\n </button>\n </ng-container>\n </div>\n </mat-panel-description>\n </ng-container>\n <ng-template #loadingTemplate>\n <div class=\"adf-cloud-edit-task-filter-loading-margin\">\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"30\" />\n </div>\n </ng-template>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"!isLoading;\">\n <form *ngIf=\"editTaskFilterForm\" [formGroup]=\"editTaskFilterForm\" class=\"adf-edit-task-filter-content\">\n <div class=\"adf-edit-task-filter-form\">\n <ng-container *ngFor=\"let taskFilterProperty of taskFilterProperties\">\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'select'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__select-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\"\n (selectionChange)=\"onStatusChange($event)\">\n <mat-option *ngFor=\"let propertyOption of taskFilterProperty.options\"\n [value]=\"propertyOption.value\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-options-' + taskFilterProperty.key\">\n {{ propertyOption.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'text'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__text-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n [formControlName]=\"taskFilterProperty.key\"\n type=\"text\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\" />\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'date'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label>{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n (keyup)=\"onDateChanged($any($event).target.value, taskFilterProperty)\"\n (dateChange)=\"onDateChanged($event.value, taskFilterProperty)\"\n [matDatepicker]=\"dateController\"\n [placeholder]=\"taskFilterProperty.label | translate\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\">\n <mat-datepicker-toggle matSuffix\n [for]=\"dateController\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-toggle-' + taskFilterProperty.key\" />\n <mat-datepicker #dateController\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-picker-' + taskFilterProperty.key\" />\n <div class=\"adf-edit-task-filter-date-error-container\">\n <div *ngIf=\"hasError(taskFilterProperty)\">\n <div class=\"adf-error-text\">{{'ADF_TASK_LIST.START_TASK.FORM.ERROR.DATE'|translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n <div class=\"adf-edit-task-filter-checkbox\"\n *ngIf=\"taskFilterProperty.type === 'checkbox'\">\n <mat-checkbox color=\"primary\"\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"taskFilterProperty.key\"\n >{{taskFilterProperty.label | translate}}</mat-checkbox>\n </div>\n\n <adf-cloud-date-range-filter\n *ngIf=\"taskFilterProperty.type === 'date-range'\"\n [processFilterProperty]=\"taskFilterProperty\"\n [options]=\"taskFilterProperty.dateFilterOptions\"\n (dateTypeChange)=\"onDateTypeChange($event, taskFilterProperty)\"\n (dateChanged)=\"onDateRangeFilterChanged($event, taskFilterProperty)\" />\n <adf-cloud-people\n class=\"{{ 'adf-edit-task-filter-' + taskFilterProperty.key }}\"\n *ngIf=\"taskFilterProperty.type === 'people'\"\n [preSelectUsers]=\"taskFilterProperty.value\"\n [title]=\"taskFilterProperty.label\"\n [validate]=\"true\"\n [appName]=\"appName\"\n [mode]=\"taskFilterProperty.selectionMode\"\n (changedUsers)=\"onChangedUser($event, taskFilterProperty)\" />\n\n <adf-cloud-task-assignment-filter\n *ngIf=\"taskFilterProperty.type === 'assignment'\"\n [taskFilterProperty]=\"taskFilterProperty\"\n [status]=\"selectedStatus\"\n [appName]=\"appName\"\n (assignedUsersChange)=\"onAssignedUsersChange($event)\"\n (assignedGroupsChange)=\"onAssignedGroupsChange($event)\"\n (assignmentTypeChange)=\"onAssignmentTypeChange($event)\" />\n\n </ng-container>\n </div>\n </form>\n </ng-container>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [".adf-edit-task-filter-checkbox{font-size:var(--theme-subheading-2-font-size);padding-top:10px;text-align:center;flex:1 23%}.adf-edit-task-filter-date-error-container{position:absolute;height:20px;margin-top:12px;width:100%}.adf-edit-task-filter-date-error-container>div{display:flex;flex-flow:row;justify-content:flex-start}.adf-edit-task-filter-date-error-container .adf-error-text{padding-right:8px;height:16px;font-size:10px;line-height:1.33;color:var(--theme-warn-color);width:auto}.adf-edit-task-filter-date-error-container .adf-error-icon{font-size:16px;color:var(--theme-warn-color)}.adf-edit-task-filter-dateRange mat-grid-list{width:450px}.adf-cloud-edit-task-filter-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.adf-edit-task-filter-form{flex-flow:row wrap;display:flex;place-content:center flex-start;align-items:center}.adf-edit-task-filter-form :not(:last-child){margin-right:10px}.adf-edit-task-filter-form mat-form-field,.adf-edit-task-filter-form adf-cloud-people,.adf-edit-task-filter-form adf-cloud-task-assignment-filter{flex:1 1 23%}@media (max-width: 599.9px){.adf-edit-task-filter-form{flex-flow:column}.adf-edit-task-filter-form :not(:last-child){margin-bottom:10px;margin-right:0}}.adf-edit-task-filter-header{height:48px}.adf-edit-task-filter-header__title{color:var(--adf-theme-foreground-text-color)}.adf-edit-task-filter-header__description{color:var(--adf-theme-foreground-secondary-text-color);place-content:center space-between}.adf-edit-task-filter-content__text-label,.adf-edit-task-filter-content__select-label{color:var(--adf-theme-foreground-secondary-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i2.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: DateRangeFilterComponent, selector: "adf-cloud-date-range-filter", inputs: ["processFilterProperty", "options"], outputs: ["dateChanged", "dateTypeChange"] }, { kind: "component", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: ["label", "appName", "mode", "roles", "validate", "readOnly", "required", "preSelectUsers", "excludedUsers", "groupsRestriction", "userChipsCtrl", "searchUserCtrl", "title", "placeholder", "hideInputOnSingleSelection", "formFieldAppearance", "formFieldSubscriptSizing", "showErrors", "showFullNameOnHover"], outputs: ["selectUser", "removeUser", "changedUsers", "warning"] }, { kind: "component", type: TaskAssignmentFilterCloudComponent, selector: "adf-cloud-task-assignment-filter", inputs: ["appName", "taskFilterProperty", "status"], outputs: ["assignedUsersChange", "assignedGroupsChange", "assignmentTypeChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
184
183
  }
185
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditServiceTaskFilterCloudComponent, decorators: [{
186
185
  type: Component,
187
186
  args: [{ selector: 'adf-cloud-edit-service-task-filter', standalone: true, imports: [
188
187
  CommonModule,
189
- TranslateModule,
188
+ TranslatePipe,
190
189
  MatExpansionModule,
191
190
  MatButtonModule,
192
191
  IconComponent,
@@ -203,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
203
202
  TaskAssignmentFilterCloudComponent
204
203
  ], encapsulation: ViewEncapsulation.None, template: "<mat-accordion [hideToggle]=\"isLoading\" class=\"adf-edit-task-filter\">\n <mat-expansion-panel (afterExpand)=\"onExpand()\" (closed)=\"onClose()\">\n <mat-expansion-panel-header *ngIf=\"taskFilter\" id=\"adf-edit-task-filter-expansion-header\" class=\"adf-edit-task-filter-header\">\n <ng-container *ngIf=\"!isLoading; else loadingTemplate\">\n <mat-panel-title *ngIf=\"showTaskFilterName\" id=\"adf-edit-task-filter-title-id\" class=\"adf-edit-task-filter-header__title\"\n >{{taskFilter.name | translate}}</mat-panel-title>\n <mat-panel-description class=\"adf-edit-task-filter-header__description\" id=\"adf-edit-task-filter-sub-title-id\">\n <span *ngIf=\"showTitle\">{{ 'ADF_CLOUD_EDIT_TASK_FILTER.TITLE' | translate}}</span>\n <div *ngIf=\"showFilterActions\" class=\"adf-cloud-edit-task-filter-actions\">\n <ng-container *ngIf=\"toggleFilterActions\">\n <button *ngFor=\"let filterAction of taskFilterActions\"\n mat-icon-button\n [title]=\"filterAction.tooltip | translate\"\n [attr.data-automation-id]=\"'adf-filter-action-' + filterAction.actionType\"\n [disabled]=\"isDisabledAction(filterAction)\"\n (click)=\"executeFilterActions(filterAction)\">\n <adf-icon [value]=\"filterAction.icon\" />\n </button>\n </ng-container>\n </div>\n </mat-panel-description>\n </ng-container>\n <ng-template #loadingTemplate>\n <div class=\"adf-cloud-edit-task-filter-loading-margin\">\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"30\" />\n </div>\n </ng-template>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"!isLoading;\">\n <form *ngIf=\"editTaskFilterForm\" [formGroup]=\"editTaskFilterForm\" class=\"adf-edit-task-filter-content\">\n <div class=\"adf-edit-task-filter-form\">\n <ng-container *ngFor=\"let taskFilterProperty of taskFilterProperties\">\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'select'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__select-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\"\n (selectionChange)=\"onStatusChange($event)\">\n <mat-option *ngFor=\"let propertyOption of taskFilterProperty.options\"\n [value]=\"propertyOption.value\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-options-' + taskFilterProperty.key\">\n {{ propertyOption.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'text'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label class=\"adf-edit-task-filter-content__text-label\">{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n [formControlName]=\"taskFilterProperty.key\"\n type=\"text\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\" />\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\"\n *ngIf=\"taskFilterProperty.type === 'date'\"\n [attr.data-automation-id]=\"taskFilterProperty.key\">\n <mat-label>{{taskFilterProperty.label | translate}}</mat-label>\n <input matInput\n (keyup)=\"onDateChanged($any($event).target.value, taskFilterProperty)\"\n (dateChange)=\"onDateChanged($event.value, taskFilterProperty)\"\n [matDatepicker]=\"dateController\"\n [placeholder]=\"taskFilterProperty.label | translate\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-' + taskFilterProperty.key\">\n <mat-datepicker-toggle matSuffix\n [for]=\"dateController\"\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-toggle-' + taskFilterProperty.key\" />\n <mat-datepicker #dateController\n [attr.data-automation-id]=\"'adf-cloud-edit-task-property-date-picker-' + taskFilterProperty.key\" />\n <div class=\"adf-edit-task-filter-date-error-container\">\n <div *ngIf=\"hasError(taskFilterProperty)\">\n <div class=\"adf-error-text\">{{'ADF_TASK_LIST.START_TASK.FORM.ERROR.DATE'|translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n <div class=\"adf-edit-task-filter-checkbox\"\n *ngIf=\"taskFilterProperty.type === 'checkbox'\">\n <mat-checkbox color=\"primary\"\n [formControlName]=\"taskFilterProperty.key\"\n [attr.data-automation-id]=\"taskFilterProperty.key\"\n >{{taskFilterProperty.label | translate}}</mat-checkbox>\n </div>\n\n <adf-cloud-date-range-filter\n *ngIf=\"taskFilterProperty.type === 'date-range'\"\n [processFilterProperty]=\"taskFilterProperty\"\n [options]=\"taskFilterProperty.dateFilterOptions\"\n (dateTypeChange)=\"onDateTypeChange($event, taskFilterProperty)\"\n (dateChanged)=\"onDateRangeFilterChanged($event, taskFilterProperty)\" />\n <adf-cloud-people\n class=\"{{ 'adf-edit-task-filter-' + taskFilterProperty.key }}\"\n *ngIf=\"taskFilterProperty.type === 'people'\"\n [preSelectUsers]=\"taskFilterProperty.value\"\n [title]=\"taskFilterProperty.label\"\n [validate]=\"true\"\n [appName]=\"appName\"\n [mode]=\"taskFilterProperty.selectionMode\"\n (changedUsers)=\"onChangedUser($event, taskFilterProperty)\" />\n\n <adf-cloud-task-assignment-filter\n *ngIf=\"taskFilterProperty.type === 'assignment'\"\n [taskFilterProperty]=\"taskFilterProperty\"\n [status]=\"selectedStatus\"\n [appName]=\"appName\"\n (assignedUsersChange)=\"onAssignedUsersChange($event)\"\n (assignedGroupsChange)=\"onAssignedGroupsChange($event)\"\n (assignmentTypeChange)=\"onAssignmentTypeChange($event)\" />\n\n </ng-container>\n </div>\n </form>\n </ng-container>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [".adf-edit-task-filter-checkbox{font-size:var(--theme-subheading-2-font-size);padding-top:10px;text-align:center;flex:1 23%}.adf-edit-task-filter-date-error-container{position:absolute;height:20px;margin-top:12px;width:100%}.adf-edit-task-filter-date-error-container>div{display:flex;flex-flow:row;justify-content:flex-start}.adf-edit-task-filter-date-error-container .adf-error-text{padding-right:8px;height:16px;font-size:10px;line-height:1.33;color:var(--theme-warn-color);width:auto}.adf-edit-task-filter-date-error-container .adf-error-icon{font-size:16px;color:var(--theme-warn-color)}.adf-edit-task-filter-dateRange mat-grid-list{width:450px}.adf-cloud-edit-task-filter-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.adf-edit-task-filter-form{flex-flow:row wrap;display:flex;place-content:center flex-start;align-items:center}.adf-edit-task-filter-form :not(:last-child){margin-right:10px}.adf-edit-task-filter-form mat-form-field,.adf-edit-task-filter-form adf-cloud-people,.adf-edit-task-filter-form adf-cloud-task-assignment-filter{flex:1 1 23%}@media (max-width: 599.9px){.adf-edit-task-filter-form{flex-flow:column}.adf-edit-task-filter-form :not(:last-child){margin-bottom:10px;margin-right:0}}.adf-edit-task-filter-header{height:48px}.adf-edit-task-filter-header__title{color:var(--adf-theme-foreground-text-color)}.adf-edit-task-filter-header__description{color:var(--adf-theme-foreground-secondary-text-color);place-content:center space-between}.adf-edit-task-filter-content__text-label,.adf-edit-task-filter-content__select-label{color:var(--adf-theme-foreground-secondary-text-color)}\n"] }]
205
204
  }], ctorParameters: () => [] });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvdGFzay90YXNrLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXRhc2stZmlsdGVycy9lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXIvZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvdGFzay90YXNrLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXRhc2stZmlsdGVycy9lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXIvZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBa0IsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFB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Q2YsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLGtDQUFrQztxQkFDckMsaUJBR2MsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWwsIFRhc2tGaWx0ZXJBY3Rpb24sIFRhc2tGaWx0ZXJQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlci1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBTZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlcnZpY2UtdGFzay1maWx0ZXItY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlRWRpdFRhc2tGaWx0ZXJDbG91ZENvbXBvbmVudCwgRHJvcGRvd25PcHRpb24gfSBmcm9tICcuLi9iYXNlLWVkaXQtdGFzay1maWx0ZXItY2xvdWQuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tbW9uL2RhdGUtcmFuZ2UtZmlsdGVyL2RhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZW9wbGVDbG91ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Blb3BsZS9jb21wb25lbnRzL3Blb3BsZS1jbG91ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFza0Fzc2lnbm1lbnRGaWx0ZXJDbG91ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rhc2stYXNzaWdubWVudC1maWx0ZXIvdGFzay1hc3NpZ25tZW50LWZpbHRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBQZW9wbGVDbG91ZENvbXBvbmVudCxcbiAgICAgICAgVGFza0Fzc2lnbm1lbnRGaWx0ZXJDbG91ZENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtc2VydmljZS10YXNrLWZpbHRlci1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0U2VydmljZVRhc2tGaWx0ZXJDbG91ZENvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0VGFza0ZpbHRlckNsb3VkQ29tcG9uZW50PFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbD4ge1xuICAgIHByaXZhdGUgc2VydmljZVRhc2tGaWx0ZXJDbG91ZFNlcnZpY2UgPSBpbmplY3QoU2VydmljZVRhc2tGaWx0ZXJDbG91ZFNlcnZpY2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgYXNzaWduTmV3RmlsdGVyKG1vZGVsOiBTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWwpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFza0ZpbHRlciA9IHsgLi4udGhpcy50YXNrRmlsdGVyLCAuLi5tb2RlbCB9O1xuICAgICAgICB0aGlzLmZvcm1IYXNCZWVuQ2hhbmdlZCA9ICF0aGlzLmRlZXBDb21wYXJlKHRoaXMuY2hhbmdlZFRhc2tGaWx0ZXIsIHRoaXMudGFza0ZpbHRlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5jaGFuZ2VkVGFza0ZpbHRlcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRhc2tGaWx0ZXJCeUlkKGFwcE5hbWU6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS5nZXRUYXNrRmlsdGVyQnlJZChhcHBOYW1lLCBpZCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdEZpbHRlclByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydhcHBOYW1lJywgJ2FjdGl2aXR5TmFtZScsICdzdGF0dXMnLCAnc29ydCcsICdvcmRlciddO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRTb3J0UHJvcGVydGllcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbJ2lkJywgJ2FjdGl2aXR5TmFtZScsICdzdGFydGVkRGF0ZScsICdjb21wbGV0ZWREYXRlJ107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZpbHRlcihmaWx0ZXJUb1VwZGF0ZTogU2VydmljZVRhc2tGaWx0ZXJDbG91ZE1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXJUb1VwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlbGV0ZUZpbHRlcihmaWx0ZXJUb0RlbGV0ZTogU2VydmljZVRhc2tGaWx0ZXJDbG91ZE1vZGVsKTogT2JzZXJ2YWJsZTxTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS5kZWxldGVGaWx0ZXIoZmlsdGVyVG9EZWxldGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRGaWx0ZXIoZmlsdGVyVG9BZGQ6IFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlLmFkZEZpbHRlcihmaWx0ZXJUb0FkZCkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSk7XG4gICAgfVxuXG4gICAgaXNEaXNhYmxlZEZvckRlZmF1bHRGaWx0ZXJzKGFjdGlvbjogVGFza0ZpbHRlckFjdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS5pc0RlZmF1bHRGaWx0ZXIodGhpcy50YXNrRmlsdGVyLm5hbWUpICYmXG4gICAgICAgICAgICBFZGl0U2VydmljZVRhc2tGaWx0ZXJDbG91ZENvbXBvbmVudC5BQ1RJT05TX0RJU0FCTEVEX0JZX0RFRkFVTFQuaW5jbHVkZXMoYWN0aW9uLmFjdGlvblR5cGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzdG9yZURlZmF1bHRUYXNrRmlsdGVycygpOiBPYnNlcnZhYmxlPFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlLmdldFRhc2tMaXN0RmlsdGVycyh0aGlzLmFwcE5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhdHVzT3B0aW9ucygpOiBEcm9wZG93bk9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICcnLCBsYWJlbDogJ0FERl9DTE9VRF9TRVJWSUNFX1RBU0tfRklMVEVSUy5TVEFUVVMuQUxMJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJ1NUQVJURUQnLCBsYWJlbDogJ0FERl9DTE9VRF9TRVJWSUNFX1RBU0tfRklMVEVSUy5TVEFUVVMuU1RBUlRFRCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICdDT01QTEVURUQnLCBsYWJlbDogJ0FERl9DTE9VRF9TRVJWSUNFX1RBU0tfRklMVEVSUy5TVEFUVVMuQ09NUExFVEVEJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJ0NBTkNFTExFRCcsIGxhYmVsOiAnQURGX0NMT1VEX1NFUlZJQ0VfVEFTS19GSUxURVJTLlNUQVRVUy5DQU5DRUxMRUQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnRVJST1InLCBsYWJlbDogJ0FERl9DTE9VRF9TRVJWSUNFX1RBU0tfRklMVEVSUy5TVEFUVVMuRVJST1InIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBjcmVhdGVUYXNrRmlsdGVyUHJvcGVydGllcygpOiBUYXNrRmlsdGVyUHJvcGVydGllc1tdIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzT3B0aW9ucyA9IHRoaXMuZ2V0U3RhdHVzT3B0aW9ucygpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLkFQUF9OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhcHBOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLmFwcE5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5hcHBsaWNhdGlvbk5hbWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5TRVJWSUNFX1RBU0tfSUQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzZXJ2aWNlVGFza0lkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLnNlcnZpY2VUYXNrSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLkVMRU1FTlRfSUQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdlbGVtZW50SWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhc2tGaWx0ZXIuZWxlbWVudElkIHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5BQ1RJVklUWV9OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAnYWN0aXZpdHlOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLmFjdGl2aXR5TmFtZSB8fCAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1NFUlZJQ0VfVEFTS19GSUxURVIuTEFCRUwuQUNUSVZJVFlfVFlQRScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ2FjdGl2aXR5VHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5hY3Rpdml0eVR5cGUgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLlNPUlQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3NvcnQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhc2tGaWx0ZXIuc29ydCB8fCB0aGlzLmNyZWF0ZVNvcnRQcm9wZXJ0aWVzWzBdLnZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY3JlYXRlU29ydFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLkRJUkVDVElPTicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnb3JkZXInLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhc2tGaWx0ZXIub3JkZXIgfHwgdGhpcy5zb3J0RGlyZWN0aW9uc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbLi4udGhpcy5zb3J0RGlyZWN0aW9uc11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLlNUQVRVUycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnc3RhdHVzJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLnN0YXR1cyB8fCBzdGF0dXNPcHRpb25zWzBdLnZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHN0YXR1c09wdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLlNUQVJURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXJ0ZWREYXRlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLmNvbXBsZXRlZERhdGUgfHwgZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLkNPTVBMRVRFRF9EQVRFJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZScsXG4gICAgICAgICAgICAgICAga2V5OiAnY29tcGxldGVkRGF0ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5jb21wbGV0ZWREYXRlIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0lOU1RBTkNFX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0luc3RhbmNlSWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnByb2Nlc3NJbnN0YW5jZUlkIHx8IHRoaXMudGFza0ZpbHRlci5wcm9jZXNzSW5zdGFuY2VJZCB8fCAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1NFUlZJQ0VfVEFTS19GSUxURVIuTEFCRUwuUFJPQ0VTU19ERUZfSUQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwcm9jZXNzRGVmaW5pdGlvbklkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLnByb2Nlc3NEZWZpbml0aW9uSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLlNFUlZJQ0VfTkFNRScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3NlcnZpY2VOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLnNlcnZpY2VOYW1lIHx8ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxufVxuIiwiPG1hdC1hY2NvcmRpb24gW2hpZGVUb2dnbGVdPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlclwiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIChhZnRlckV4cGFuZCk9XCJvbkV4cGFuZCgpXCIgKGNsb3NlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyICpuZ0lmPVwidGFza0ZpbHRlclwiIGlkPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItZXhwYW5zaW9uLWhlYWRlclwiIGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItaGVhZGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwic2hvd1Rhc2tGaWx0ZXJOYW1lXCIgaWQ9XCJhZGYtZWRpdC10YXNrLWZpbHRlci10aXRsZS1pZFwiIGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItaGVhZGVyX190aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgID57e3Rhc2tGaWx0ZXIubmFtZSB8IHRyYW5zbGF0ZX19PC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWhlYWRlcl9fZGVzY3JpcHRpb25cIiBpZD1cImFkZi1lZGl0LXRhc2stZmlsdGVyLXN1Yi10aXRsZS1pZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dUaXRsZVwiPnt7ICdBREZfQ0xPVURfRURJVF9UQVNLX0ZJTFRFUi5USVRMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJBY3Rpb25zXCIgY2xhc3M9XCJhZGYtY2xvdWQtZWRpdC10YXNrLWZpbHRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlRmlsdGVyQWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGZpbHRlckFjdGlvbiBvZiB0YXNrRmlsdGVyQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWx0ZXJBY3Rpb24udG9vbHRpcCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1maWx0ZXItYWN0aW9uLScgKyBmaWx0ZXJBY3Rpb24uYWN0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZEFjdGlvbihmaWx0ZXJBY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleGVjdXRlRmlsdGVyQWN0aW9ucyhmaWx0ZXJBY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbiBbdmFsdWVdPVwiZmlsdGVyQWN0aW9uLmljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNsb3VkLWVkaXQtdGFzay1maWx0ZXItbG9hZGluZy1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW2RpYW1ldGVyXT1cIjMwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nO1wiPlxuICAgICAgICAgICAgPGZvcm0gKm5nSWY9XCJlZGl0VGFza0ZpbHRlckZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRUYXNrRmlsdGVyRm9ybVwiIGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1mb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhc2tGaWx0ZXJQcm9wZXJ0eSBvZiB0YXNrRmlsdGVyUHJvcGVydGllc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtmbG9hdExhYmVsXT1cIidhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ3NlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJ0YXNrRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWNvbnRlbnRfX3NlbGVjdC1sYWJlbFwiPnt7dGFza0ZpbHRlclByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXRhc2stcHJvcGVydHktJyArIHRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU3RhdHVzQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9wZXJ0eU9wdGlvbiBvZiB0YXNrRmlsdGVyUHJvcGVydHkub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BlcnR5T3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXRhc2stcHJvcGVydHktb3B0aW9ucy0nICsgdGFza0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItY29udGVudF9fdGV4dC1sYWJlbFwiPnt7dGFza0ZpbHRlclByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ0YXNrRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXRhc2stcHJvcGVydHktJyArIHRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7dGFza0ZpbHRlclByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uRGF0ZUNoYW5nZWQoJGFueSgkZXZlbnQpLnRhcmdldC52YWx1ZSwgdGFza0ZpbHRlclByb3BlcnR5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LnZhbHVlLCB0YXNrRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZUNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidGFza0ZpbHRlclByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC10YXNrLXByb3BlcnR5LScgKyB0YXNrRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiZGF0ZUNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC10YXNrLXByb3BlcnR5LWRhdGUtdG9nZ2xlLScgKyB0YXNrRmlsdGVyUHJvcGVydHkua2V5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVDb250cm9sbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtdGFzay1wcm9wZXJ0eS1kYXRlLXBpY2tlci0nICsgdGFza0ZpbHRlclByb3BlcnR5LmtleVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWRhdGUtZXJyb3ItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvcih0YXNrRmlsdGVyUHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHRcIj57eydBREZfVEFTS19MSVNULlNUQVJUX1RBU0suRk9STS5FUlJPUi5EQVRFJ3x0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwidGFza0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwidGFza0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7dGFza0ZpbHRlclByb3BlcnR5LmxhYmVsIHwgdHJhbnNsYXRlfX08L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLWRhdGUtcmFuZ2UtZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ2RhdGUtcmFuZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvY2Vzc0ZpbHRlclByb3BlcnR5XT1cInRhc2tGaWx0ZXJQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidGFza0ZpbHRlclByb3BlcnR5LmRhdGVGaWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZVR5cGVDaGFuZ2UpPVwib25EYXRlVHlwZUNoYW5nZSgkZXZlbnQsIHRhc2tGaWx0ZXJQcm9wZXJ0eSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVSYW5nZUZpbHRlckNoYW5nZWQoJGV2ZW50LCB0YXNrRmlsdGVyUHJvcGVydHkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtY2xvdWQtcGVvcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyAnYWRmLWVkaXQtdGFzay1maWx0ZXItJyArIHRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdwZW9wbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlU2VsZWN0VXNlcnNdPVwidGFza0ZpbHRlclByb3BlcnR5LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidGFza0ZpbHRlclByb3BlcnR5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcE5hbWVdPVwiYXBwTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwidGFza0ZpbHRlclByb3BlcnR5LnNlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkVXNlcnMpPVwib25DaGFuZ2VkVXNlcigkZXZlbnQsIHRhc2tGaWx0ZXJQcm9wZXJ0eSlcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLXRhc2stYXNzaWdubWVudC1maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2tGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnYXNzaWdubWVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXNrRmlsdGVyUHJvcGVydHldPVwidGFza0ZpbHRlclByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInNlbGVjdGVkU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwTmFtZV09XCJhcHBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzaWduZWRVc2Vyc0NoYW5nZSk9XCJvbkFzc2lnbmVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc2lnbmVkR3JvdXBzQ2hhbmdlKT1cIm9uQXNzaWduZWRHcm91cHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc2lnbm1lbnRUeXBlQ2hhbmdlKT1cIm9uQXNzaWdubWVudFR5cGVDaGFuZ2UoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbWF0LWFjY29yZGlvbj5cbiJdfQ==
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvdGFzay90YXNrLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXRhc2stZmlsdGVycy9lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXIvZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvdGFzay90YXNrLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXRhc2stZmlsdGVycy9lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXIvZWRpdC1zZXJ2aWNlLXRhc2stZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBa0IsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFB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ZixhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsa0NBQWtDO3FCQUNyQyxpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbCwgVGFza0ZpbHRlckFjdGlvbiwgVGFza0ZpbHRlclByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVyLWNsb3VkLm1vZGVsJztcbmltcG9ydCB7IFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VydmljZS10YXNrLWZpbHRlci1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VFZGl0VGFza0ZpbHRlckNsb3VkQ29tcG9uZW50LCBEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL2Jhc2UtZWRpdC10YXNrLWZpbHRlci1jbG91ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tbW9uL2RhdGUtcmFuZ2UtZmlsdGVyL2RhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZW9wbGVDbG91ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Blb3BsZS9jb21wb25lbnRzL3Blb3BsZS1jbG91ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFza0Fzc2lnbm1lbnRGaWx0ZXJDbG91ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rhc2stYXNzaWdubWVudC1maWx0ZXIvdGFzay1hc3NpZ25tZW50LWZpbHRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIE1hdEV4cGFuc2lvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIERhdGVSYW5nZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgUGVvcGxlQ2xvdWRDb21wb25lbnQsXG4gICAgICAgIFRhc2tBc3NpZ25tZW50RmlsdGVyQ2xvdWRDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXNlcnZpY2UtdGFzay1maWx0ZXItY2xvdWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXQtc2VydmljZS10YXNrLWZpbHRlci1jbG91ZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRWRpdFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRWRpdFRhc2tGaWx0ZXJDbG91ZENvbXBvbmVudDxTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWw+IHtcbiAgICBwcml2YXRlIHNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlID0gaW5qZWN0KFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRTZXJ2aWNlKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGFzc2lnbk5ld0ZpbHRlcihtb2RlbDogU2VydmljZVRhc2tGaWx0ZXJDbG91ZE1vZGVsKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhc2tGaWx0ZXIgPSB7IC4uLnRoaXMudGFza0ZpbHRlciwgLi4ubW9kZWwgfTtcbiAgICAgICAgdGhpcy5mb3JtSGFzQmVlbkNoYW5nZWQgPSAhdGhpcy5kZWVwQ29tcGFyZSh0aGlzLmNoYW5nZWRUYXNrRmlsdGVyLCB0aGlzLnRhc2tGaWx0ZXIpO1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuY2hhbmdlZFRhc2tGaWx0ZXIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUYXNrRmlsdGVyQnlJZChhcHBOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVRhc2tGaWx0ZXJDbG91ZFNlcnZpY2UuZ2V0VGFza0ZpbHRlckJ5SWQoYXBwTmFtZSwgaWQpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRGaWx0ZXJQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsnYXBwTmFtZScsICdhY3Rpdml0eU5hbWUnLCAnc3RhdHVzJywgJ3NvcnQnLCAnb3JkZXInXTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0U29ydFByb3BlcnRpZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydpZCcsICdhY3Rpdml0eU5hbWUnLCAnc3RhcnRlZERhdGUnLCAnY29tcGxldGVkRGF0ZSddO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVGaWx0ZXIoZmlsdGVyVG9VcGRhdGU6IFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS51cGRhdGVGaWx0ZXIoZmlsdGVyVG9VcGRhdGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkZWxldGVGaWx0ZXIoZmlsdGVyVG9EZWxldGU6IFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRNb2RlbCk6IE9ic2VydmFibGU8U2VydmljZVRhc2tGaWx0ZXJDbG91ZE1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVRhc2tGaWx0ZXJDbG91ZFNlcnZpY2UuZGVsZXRlRmlsdGVyKGZpbHRlclRvRGVsZXRlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkRmlsdGVyKGZpbHRlclRvQWRkOiBTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS5hZGRGaWx0ZXIoZmlsdGVyVG9BZGQpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpO1xuICAgIH1cblxuICAgIGlzRGlzYWJsZWRGb3JEZWZhdWx0RmlsdGVycyhhY3Rpb246IFRhc2tGaWx0ZXJBY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc2VydmljZVRhc2tGaWx0ZXJDbG91ZFNlcnZpY2UuaXNEZWZhdWx0RmlsdGVyKHRoaXMudGFza0ZpbHRlci5uYW1lKSAmJlxuICAgICAgICAgICAgRWRpdFNlcnZpY2VUYXNrRmlsdGVyQ2xvdWRDb21wb25lbnQuQUNUSU9OU19ESVNBQkxFRF9CWV9ERUZBVUxULmluY2x1ZGVzKGFjdGlvbi5hY3Rpb25UeXBlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlc3RvcmVEZWZhdWx0VGFza0ZpbHRlcnMoKTogT2JzZXJ2YWJsZTxTZXJ2aWNlVGFza0ZpbHRlckNsb3VkTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlVGFza0ZpbHRlckNsb3VkU2VydmljZS5nZXRUYXNrTGlzdEZpbHRlcnModGhpcy5hcHBOYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YXR1c09wdGlvbnMoKTogRHJvcGRvd25PcHRpb25bXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnJywgbGFiZWw6ICdBREZfQ0xPVURfU0VSVklDRV9UQVNLX0ZJTFRFUlMuU1RBVFVTLkFMTCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICdTVEFSVEVEJywgbGFiZWw6ICdBREZfQ0xPVURfU0VSVklDRV9UQVNLX0ZJTFRFUlMuU1RBVFVTLlNUQVJURUQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnQ09NUExFVEVEJywgbGFiZWw6ICdBREZfQ0xPVURfU0VSVklDRV9UQVNLX0ZJTFRFUlMuU1RBVFVTLkNPTVBMRVRFRCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICdDQU5DRUxMRUQnLCBsYWJlbDogJ0FERl9DTE9VRF9TRVJWSUNFX1RBU0tfRklMVEVSUy5TVEFUVVMuQ0FOQ0VMTEVEJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJ0VSUk9SJywgbGFiZWw6ICdBREZfQ0xPVURfU0VSVklDRV9UQVNLX0ZJTFRFUlMuU1RBVFVTLkVSUk9SJyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgY3JlYXRlVGFza0ZpbHRlclByb3BlcnRpZXMoKTogVGFza0ZpbHRlclByb3BlcnRpZXNbXSB7XG4gICAgICAgIGNvbnN0IHN0YXR1c09wdGlvbnMgPSB0aGlzLmdldFN0YXR1c09wdGlvbnMoKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5BUFBfTkFNRScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5hcHBOYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuYXBwbGljYXRpb25OYW1lc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1NFUlZJQ0VfVEFTS19GSUxURVIuTEFCRUwuU0VSVklDRV9UQVNLX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAnc2VydmljZVRhc2tJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5zZXJ2aWNlVGFza0lkIHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5FTEVNRU5UX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAnZWxlbWVudElkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLmVsZW1lbnRJZCB8fCAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1NFUlZJQ0VfVEFTS19GSUxURVIuTEFCRUwuQUNUSVZJVFlfTkFNRScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ2FjdGl2aXR5TmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5hY3Rpdml0eU5hbWUgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLkFDVElWSVRZX1RZUEUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhY3Rpdml0eVR5cGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhc2tGaWx0ZXIuYWN0aXZpdHlUeXBlIHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5TT1JUJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzb3J0JyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLnNvcnQgfHwgdGhpcy5jcmVhdGVTb3J0UHJvcGVydGllc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNyZWF0ZVNvcnRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5ESVJFQ1RJT04nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ29yZGVyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YXNrRmlsdGVyLm9yZGVyIHx8IHRoaXMuc29ydERpcmVjdGlvbnNbMF0udmFsdWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogWy4uLnRoaXMuc29ydERpcmVjdGlvbnNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5TVEFUVVMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5zdGF0dXMgfHwgc3RhdHVzT3B0aW9uc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBzdGF0dXNPcHRpb25zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5TVEFSVEVEX0RBVEUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzdGFydGVkRGF0ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5jb21wbGV0ZWREYXRlIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5DT01QTEVURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIGtleTogJ2NvbXBsZXRlZERhdGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhc2tGaWx0ZXIuY29tcGxldGVkRGF0ZSB8fCBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1NFUlZJQ0VfVEFTS19GSUxURVIuTEFCRUwuUFJPQ0VTU19JTlNUQU5DRV9JRCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NJbnN0YW5jZUlkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wcm9jZXNzSW5zdGFuY2VJZCB8fCB0aGlzLnRhc2tGaWx0ZXIucHJvY2Vzc0luc3RhbmNlSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9TRVJWSUNFX1RBU0tfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0RlZmluaXRpb25JZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5wcm9jZXNzRGVmaW5pdGlvbklkIHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfU0VSVklDRV9UQVNLX0ZJTFRFUi5MQUJFTC5TRVJWSUNFX05BTUUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzZXJ2aWNlTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFza0ZpbHRlci5zZXJ2aWNlTmFtZSB8fCAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn1cbiIsIjxtYXQtYWNjb3JkaW9uIFtoaWRlVG9nZ2xlXT1cImlzTG9hZGluZ1wiIGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXJcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAoYWZ0ZXJFeHBhbmQpPVwib25FeHBhbmQoKVwiIChjbG9zZWQpPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAqbmdJZj1cInRhc2tGaWx0ZXJcIiBpZD1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWV4cGFuc2lvbi1oZWFkZXJcIiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cInNob3dUYXNrRmlsdGVyTmFtZVwiIGlkPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItdGl0bGUtaWRcIiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWhlYWRlcl9fdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICA+e3t0YXNrRmlsdGVyLm5hbWUgfCB0cmFuc2xhdGV9fTwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24gY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1oZWFkZXJfX2Rlc2NyaXB0aW9uXCIgaWQ9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1zdWItdGl0bGUtaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93VGl0bGVcIj57eyAnQURGX0NMT1VEX0VESVRfVEFTS19GSUxURVIuVElUTEUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmlsdGVyQWN0aW9uc1wiIGNsYXNzPVwiYWRmLWNsb3VkLWVkaXQtdGFzay1maWx0ZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvZ2dsZUZpbHRlckFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBmaWx0ZXJBY3Rpb24gb2YgdGFza0ZpbHRlckFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsdGVyQWN0aW9uLnRvb2x0aXAgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtZmlsdGVyLWFjdGlvbi0nICsgZmlsdGVyQWN0aW9uLmFjdGlvblR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRBY3Rpb24oZmlsdGVyQWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUZpbHRlckFjdGlvbnMoZmlsdGVyQWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24gW3ZhbHVlXT1cImZpbHRlckFjdGlvbi5pY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jbG91ZC1lZGl0LXRhc2stZmlsdGVyLWxvYWRpbmctbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtkaWFtZXRlcl09XCIzMFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZztcIj5cbiAgICAgICAgICAgIDxmb3JtICpuZ0lmPVwiZWRpdFRhc2tGaWx0ZXJGb3JtXCIgW2Zvcm1Hcm91cF09XCJlZGl0VGFza0ZpbHRlckZvcm1cIiBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVkaXQtdGFzay1maWx0ZXItZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YXNrRmlsdGVyUHJvcGVydHkgb2YgdGFza0ZpbHRlclByb3BlcnRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdzZWxlY3QnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwidGFza0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1jb250ZW50X19zZWxlY3QtbGFiZWxcIj57e3Rhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ0YXNrRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC10YXNrLXByb3BlcnR5LScgKyB0YXNrRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblN0YXR1c0NoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvcGVydHlPcHRpb24gb2YgdGFza0ZpbHRlclByb3BlcnR5Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wZXJ0eU9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC10YXNrLXByb3BlcnR5LW9wdGlvbnMtJyArIHRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwcm9wZXJ0eU9wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2tGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJ0YXNrRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFkZi1lZGl0LXRhc2stZmlsdGVyLWNvbnRlbnRfX3RleHQtbGFiZWxcIj57e3Rhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwidGFza0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC10YXNrLXByb3BlcnR5LScgKyB0YXNrRmlsdGVyUHJvcGVydHkua2V5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2tGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJ0YXNrRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e3Rhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbkRhdGVDaGFuZ2VkKCRhbnkoJGV2ZW50KS50YXJnZXQudmFsdWUsIHRhc2tGaWx0ZXJQcm9wZXJ0eSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudC52YWx1ZSwgdGFza0ZpbHRlclByb3BlcnR5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVDb250cm9sbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtdGFzay1wcm9wZXJ0eS0nICsgdGFza0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImRhdGVDb250cm9sbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtdGFzay1wcm9wZXJ0eS1kYXRlLXRvZ2dsZS0nICsgdGFza0ZpbHRlclByb3BlcnR5LmtleVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlQ29udHJvbGxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXRhc2stcHJvcGVydHktZGF0ZS1waWNrZXItJyArIHRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1kYXRlLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3IodGFza0ZpbHRlclByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3snQURGX1RBU0tfTElTVC5TVEFSVF9UQVNLLkZPUk0uRVJST1IuREFURSd8dHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1lcnJvci1pY29uXCI+d2FybmluZzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZWRpdC10YXNrLWZpbHRlci1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57e3Rhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1jbG91ZC1kYXRlLXJhbmdlLWZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFza0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdkYXRlLXJhbmdlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eV09XCJ0YXNrRmlsdGVyUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5kYXRlRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVUeXBlQ2hhbmdlKT1cIm9uRGF0ZVR5cGVDaGFuZ2UoJGV2ZW50LCB0YXNrRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZWQpPVwib25EYXRlUmFuZ2VGaWx0ZXJDaGFuZ2VkKCRldmVudCwgdGFza0ZpbHRlclByb3BlcnR5KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLXBlb3BsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgJ2FkZi1lZGl0LXRhc2stZmlsdGVyLScgKyB0YXNrRmlsdGVyUHJvcGVydHkua2V5IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhc2tGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAncGVvcGxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZVNlbGVjdFVzZXJzXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBOYW1lXT1cImFwcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cInRhc2tGaWx0ZXJQcm9wZXJ0eS5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZFVzZXJzKT1cIm9uQ2hhbmdlZFVzZXIoJGV2ZW50LCB0YXNrRmlsdGVyUHJvcGVydHkpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1jbG91ZC10YXNrLWFzc2lnbm1lbnQtZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YXNrRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ2Fzc2lnbm1lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFza0ZpbHRlclByb3BlcnR5XT1cInRhc2tGaWx0ZXJQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJzZWxlY3RlZFN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcE5hbWVdPVwiYXBwTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc2lnbmVkVXNlcnNDaGFuZ2UpPVwib25Bc3NpZ25lZFVzZXJzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhc3NpZ25lZEdyb3Vwc0NoYW5nZSk9XCJvbkFzc2lnbmVkR3JvdXBzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhc3NpZ25tZW50VHlwZUNoYW5nZSk9XCJvbkFzc2lnbm1lbnRUeXBlQ2hhbmdlKCRldmVudClcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG48L21hdC1hY2NvcmRpb24+XG4iXX0=