@posiwise/shared-components 0.0.110 → 0.0.112

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 (24) hide show
  1. package/esm2022/index.mjs +3 -2
  2. package/esm2022/lib/authenticator/authenticator.component.mjs +39 -0
  3. package/esm2022/lib/clearbit-icon/clearbit-icon.component.mjs +9 -9
  4. package/esm2022/lib/custom-uploader/custom-uploader.component.mjs +3 -3
  5. package/esm2022/lib/input-container/input-container.component.mjs +7 -4
  6. package/esm2022/lib/label-management/group-definition/group-definition.component.mjs +3 -3
  7. package/esm2022/lib/label-management/groups/groups.component.mjs +3 -3
  8. package/esm2022/lib/number-picker/number-picker.component.mjs +7 -8
  9. package/esm2022/lib/range-date-picker/date-range-picker.component.mjs +48 -0
  10. package/esm2022/lib/shared/shared-component.interface.mjs +1 -1
  11. package/esm2022/lib/shared-components.module.mjs +18 -10
  12. package/fesm2022/posiwise-shared-components.mjs +115 -63
  13. package/fesm2022/posiwise-shared-components.mjs.map +1 -1
  14. package/index.d.ts +2 -1
  15. package/lib/clearbit-icon/clearbit-icon.component.d.ts +4 -4
  16. package/lib/input-container/input-container.component.d.ts +2 -1
  17. package/lib/label-management/group-definition/group-definition.component.d.ts +1 -1
  18. package/lib/number-picker/number-picker.component.d.ts +2 -2
  19. package/lib/range-date-picker/date-range-picker.component.d.ts +26 -0
  20. package/lib/shared/shared-component.interface.d.ts +1 -1
  21. package/lib/shared-components.module.d.ts +37 -35
  22. package/package.json +1 -1
  23. package/esm2022/lib/autheticator/authenticator.component.mjs +0 -39
  24. /package/lib/{autheticator → authenticator}/authenticator.component.d.ts +0 -0
@@ -211,7 +211,7 @@ export class GroupsComponent extends AppBaseComponent {
211
211
  super.ngOnDestroy();
212
212
  }
213
213
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupsComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.GroupService }, { token: i2.SubscriptionService }, { token: i2.DataService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupsComponent, selector: "pw-groups", usesInheritance: true, ngImport: i0, template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <select (change)=\"filterDomainsList($event)\"\n class=\"form-select\">\n <option value=\"0\">All Team Categories</option>\n <option *ngFor=\"let option of groupDefinition\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clearboth{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i5.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i8.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i6.SlicePipe, name: "slice" }] }); }
214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: GroupsComponent, selector: "pw-groups", usesInheritance: true, ngImport: i0, template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <select (change)=\"filterDomainsList($event)\"\n class=\"form-select\">\n <option value=\"0\">All Team Categories</option>\n <option *ngFor=\"let option of groupDefinition\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clear-both{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i5.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "pipe", type: i8.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i6.SlicePipe, name: "slice" }] }); }
215
215
  }
216
216
  __decorate([
217
217
  ValidateForm('form'),
@@ -221,6 +221,6 @@ __decorate([
221
221
  ], GroupsComponent.prototype, "saveGroup", null);
222
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GroupsComponent, decorators: [{
223
223
  type: Component,
224
- args: [{ selector: 'pw-groups', template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <select (change)=\"filterDomainsList($event)\"\n class=\"form-select\">\n <option value=\"0\">All Team Categories</option>\n <option *ngFor=\"let option of groupDefinition\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clearboth{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"] }]
224
+ args: [{ selector: 'pw-groups', template: "<div>\n <section>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Enterprise Teams</h2>\n\n <p>\n Here you can define the teams for your Enterprise members. For example\n \"Corporate Sales Team\", \"Frontend Dev Team\" etc.\n <br />\n Once the teams created, you'll be able to add members to them and see useful\n insight based on the members activity in the corresponding team.\n </p>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 d-flex justify-content-end align-items-center text-end\">\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"groupOperation()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Add Team\n </button>\n <button *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary ms-1\"\n [routerLink]=\"['/' + subscription?.slug + '/enterprise', 'groups', 'labels']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> Manage Team Categories\n </button>\n </div>\n </div>\n\n <!-- Add Group Template -->\n <div *ngIf=\"isGroupOperations\"\n class=\"mb-4\">\n <h4 class=\"card-title d-inline\">{{ viewEdit ? 'Update the' : 'Create a new' }} team</h4>\n\n <div class=\"mt-4\"\n *ngIf=\"!isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveGroup()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.Description' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"description\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n (click)=\"isGroupOperations = !isGroupOperations\"\n class=\"btn btn-outline-default me-2\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">Add</button>\n </div>\n </div>\n </form>\n </div>\n\n <!-- Edit Group Template -->\n <div class=\"mt-4\"\n *ngIf=\"isGroupEdit\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"updateDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamName\">{{ 'Enterprise.Teams.TeamName' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"description\">{{ 'Enterprise.Teams.TeamDescription' | transloco }}</label>\n <input type=\"text\"\n value=\"{{ description }}\"\n class=\"form-control\"\n formControlName=\"description\"\n required=\"true\" />\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <label for=\"teamCategory\">{{ 'Enterprise.Teams.TeamCategory' | transloco\n }}<span class=\"text-danger required-icon\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"group_definition_id\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && form.controls['group_definition_id'].errors\n }\">\n <option *ngFor=\"let label of groupDefinition\"\n [value]=\"label.id\">\n {{ label.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"cancelUpdate()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Update' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"row\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-4 mt-2 filter\">\n <select (change)=\"filterDomainsList($event)\"\n class=\"form-select\">\n <option value=\"0\">All Team Categories</option>\n <option *ngFor=\"let option of groupDefinition\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row group_list my-4\"\n *ngIf=\"!isGroupOperations\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3\"\n *ngFor=\"let group of allGroups; trackBy: trackByGroup\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h5 class=\"mb-3\">{{ group.name }}</h5>\n <p>{{ group.description | slice: 0:200 }}</p>\n <span><a class=\"badge bg-primary\">{{\n group?.group_definition_name\n }}</a></span>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <a class=\"me-2 my-1\"\n *ngIf=\"hasAccess\"\n aria-label=\"Delete\"\n (click)=\"onDelete(group.id)\">\n <i class=\"fa fa-trash delete-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Group\"\n *ngIf=\"hasAccess\"\n (click)=\"editGroup(group.id)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"me-2 my-1\"\n aria-label=\"Members\"\n [routerLink]=\"[group.id, 'members']\"><i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a class=\"communications me-2 my-1\"\n aria-label=\"Communications\"\n (click)=\"navigateToCommunications(group.id)\"><i class=\"fa fa-comments cta2-icon\" aria-hidden=\"true\"></i></a>\n <a class=\"communications my-1\"\n aria-label=\"Documents\"\n (click)=\"navigateToDocumentations(group.id)\"><i class=\"fab fa-wikipedia-w cta1-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessage' | transloco\"> </pw-no-data>\n</div>\n<div *ngIf=\"allGroups?.length === 0 && !hasAccess && !isGroupOperations && isLoaded\"\n class=\"clear-both\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Enterprise.Teams.NoTeamMessageIfUser' | transloco\"> </pw-no-data>\n</div>\n", styles: ["a.previous i{line-height:13px}.clear-both{clear:both}@media screen and (max-width: 480px){.filter{flex:none;max-width:100%!important}.communications{margin-top:2%}}\n"] }]
225
225
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.GroupService }, { type: i2.SubscriptionService }, { type: i2.DataService }, { type: i0.Injector }], propDecorators: { saveGroup: [] } });
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9sYWJlbC1tYW5hZ2VtZW50L2dyb3Vwcy9ncm91cHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zaGFyZWQtY29tcG9uZW50cy9zcmMvbGliL2xhYmVsLW1hbmFnZW1lbnQvZ3JvdXBzL2dyb3Vwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRWxCLFVBQVUsRUFDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVEvQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUErQ2pELFlBQ3FCLEVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLG1CQUF3QyxFQUN4QyxXQUF3QixFQUN6QyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFOQyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBeEM3QyxjQUFTLEdBQVksRUFBRSxDQUFDO1FBWXhCLFdBQU0sR0FBRyxFQUFFLENB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eyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgVW50eXBlZEZvcm1Db250cm9sLFxuICAgIFVudHlwZWRGb3JtR3JvdXAsXG4gICAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEdyb3VwU2VydmljZSwgRGF0YVNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaGFyZWQtY29tcG9uZW50LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctZ3JvdXBzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ncm91cHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHcm91cHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIG1lc3NhZ2U6IG51bWJlcjtcblxuICAgIHN1Ym1pdHRlZDogYm9vbGVhbjtcblxuICAgIGlzR3JvdXBPcGVyYXRpb25zOiBib29sZWFuO1xuXG4gICAgaXNHcm91cEVkaXQ6IGJvb2xlYW47XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgYWxsR3JvdXBzOiBHcm91cFtdID0gW107XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIG5hbWU6IHN0cmluZztcblxuICAgIGdyb3VwX2lkOiBudW1iZXI7XG5cbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG5cbiAgICBhZG1pbnMgPSBbXTtcblxuICAgIHN1YnNjcmlwdGlvbkluZm8gPSBbXTtcblxuICAgIHN1YnNjcmlwdGlvbk93bmVyOiBudW1iZXI7XG5cbiAgICBlbnJvbGxlZFVzZXJzOiB7IGlzX293bmVyOiBib29sZWFuOyBpZDogbnVtYmVyIH1bXTtcblxuICAgIHVzZXI6IFVzZXI7XG5cbiAgICB2aWV3RWRpdCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGdyb3VwRGVmaW5pdGlvbjoge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGdyb3VwczogSXRlcmFibGVJdGVyYXRvcjxvYmplY3Q+O1xuICAgIH1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBncm91cHNEYXRhOiBHcm91cFtdID0gW107XG5cbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwU2VydmljZTogR3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5zdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgICAgICAgICBncm91cF9kZWZpbml0aW9uX2lkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmN1cnJlbnRNZXNzYWdlLnN1YnNjcmliZShtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN1YnNjcmliZWRVc2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRBbGxHcm91cERlZmluaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2F2ZSBncm91cCAqL1xuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIHNhdmVHcm91cCgpIHtcbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBuYW1lOiBmb3JtVmFsdWUubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBncm91cF9kZWZpbml0aW9uX2lkOiBmb3JtVmFsdWUuZ3JvdXBfZGVmaW5pdGlvbl9pZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyb3VwU2VydmljZVxuICAgICAgICAgICAgLnBvc3RHcm91cChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdTYXZlZCBTdWNjZXNzZnVsbHknLCAnJywge1xuICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAwMDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEdyb3VwRGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNHcm91cE9wZXJhdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxHcm91cERlZmluaXRpb24oKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbGxHcm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ3JvdXBEZWZpbml0aW9uR2V0QWxsKHRoaXMuaWQsICdTdWJzY3JpcHRpb24nKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBEZWZpbml0aW9uID0gcmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cERlZmluaXRpb24uZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gWy4uLmRhdGEuZ3JvdXBzXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxHcm91cHMucHVzaCh7IC4uLmdyb3VwLCBncm91cF9kZWZpbml0aW9uX25hbWU6IGRhdGE/Lm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc0RhdGEgPSB0aGlzLmFsbEdyb3VwcztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBEZWZpbml0aW9uID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaWJlZFVzZXJzKCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUoc3ViID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gc3ViO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbihzdWI/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbk93bmVyID0gcmVzcG9uc2Uub3duZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5zID0gcmVzcG9uc2UuYWRtaW5zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkVXNlcnMgPSByZXNwb25zZS5tZW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNfb3duZXIgPSBlbGVtZW50Py5pZCA9PT0gdGhpcy51c2VyPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQWNjZXNzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5zLmluY2x1ZGVzKHRoaXMudXNlcj8uaWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXI/LmlkID09PSB0aGlzLnN1YnNjcmlwdGlvbk93bmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBncm91cE9wZXJhdGlvbigpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlld0VkaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dyb3VwT3BlcmF0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNHcm91cEVkaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjYW5jZWxVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuaXNHcm91cE9wZXJhdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgZWRpdEdyb3VwKGdyb3VwX2lkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlld0VkaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0dyb3VwRWRpdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JvdXBfaWQgPSBncm91cF9pZDtcbiAgICAgICAgdGhpcy5nZXRHcm91cERldGFpbHMoZ3JvdXBfaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBEZXRhaWxzKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0R3JvdXAoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzcG9uc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgZ3JvdXBfZGVmaW5pdGlvbl9pZDogcmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbl9pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZURldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGdyb3VwX2RlZmluaXRpb25faWQ6IGZvcm1WYWx1ZS5ncm91cF9kZWZpbml0aW9uX2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlR3JvdXAodGhpcy5ncm91cF9pZCwgZGF0YSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlNoYXJlZC5Hcm91cHMuVXBkYXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cERlZmluaXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZShpZDogbnVtYmVyKSB7XG4gICAgICAgIHN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgICB0ZXh0OiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRlYW0/YCxcbiAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICB9KS50aGVuKHJlcCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZGVsZXRlR3JvdXAoaWQpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlNoYXJlZC5Hcm91cHMuRGVsZXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlckRvbWFpbnNMaXN0KGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUgIT09ICcwJykge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoZWRMaXN0ID0gdGhpcy5ncm91cHNEYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICBncm91cCA9PiBncm91cC5ncm91cF9kZWZpbml0aW9uX2lkID09PSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxsR3JvdXBzID0gc2VhcmNoZWRMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxHcm91cHMgPSB0aGlzLmdyb3Vwc0RhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2aW91cygpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2hhbmdlTWVzc2FnZSgxKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvQ29tbXVuaWNhdGlvbnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC8ke3RoaXMuc3Vic2NyaXB0aW9uPy5zbHVnfS9lbnRlcnByaXNlL2NvbW11bmljYXRpb25zYF0sIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGVudGl0eV9pZDogaWQgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvRG9jdW1lbnRhdGlvbnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC8ke3RoaXMuc3Vic2NyaXB0aW9uPy5zbHVnfS9lbnRlcnByaXNlL3dpa2lgXSwge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgZW50aXR5X2lkOiBpZCB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnlHcm91cChfaW5kZXg6IG51bWJlciwgaXRlbTogeyBpZDogbnVtYmVyIH0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdj5cbiAgPHNlY3Rpb24+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCI+XG4gICAgICAgIDxoMj5FbnRlcnByaXNlIFRlYW1zPC9oMj5cblxuICAgICAgICA8cD5cbiAgICAgICAgICBIZXJlIHlvdSBjYW4gZGVmaW5lIHRoZSB0ZWFtcyBmb3IgeW91ciBFbnRlcnByaXNlIG1lbWJlcnMuIEZvciBleGFtcGxlXG4gICAgICAgICAgXCJDb3Jwb3JhdGUgU2FsZXMgVGVhbVwiLCBcIkZyb250ZW5kIERldiBUZWFtXCIgZXRjLlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIE9uY2UgdGhlIHRlYW1zIGNyZWF0ZWQsIHlvdSdsbCBiZSBhYmxlIHRvIGFkZCBtZW1iZXJzIHRvIHRoZW0gYW5kIHNlZSB1c2VmdWxcbiAgICAgICAgICBpbnNpZ2h0IGJhc2VkIG9uIHRoZSBtZW1iZXJzIGFjdGl2aXR5IGluIHRoZSBjb3JyZXNwb25kaW5nIHRlYW0uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiXG4gICAgICAqbmdJZj1cIiFpc0dyb3VwT3BlcmF0aW9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1lbmRcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc0FjY2Vzc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJncm91cE9wZXJhdGlvbigpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gQWRkIFRlYW1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJoYXNBY2Nlc3NcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyAnL2VudGVycHJpc2UnLCAnZ3JvdXBzJywgJ2xhYmVscyddXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gTWFuYWdlIFRlYW0gQ2F0ZWdvcmllc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBZGQgR3JvdXAgVGVtcGxhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzR3JvdXBPcGVyYXRpb25zXCJcbiAgICAgIGNsYXNzPVwibWItNFwiPlxuICAgICAgPGg0IGNsYXNzPVwiY2FyZC10aXRsZSBkLWlubGluZVwiPnt7IHZpZXdFZGl0ID8gJ1VwZGF0ZSB0aGUnIDogJ0NyZWF0ZSBhIG5ldycgfX0gdGVhbTwvaDQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgKm5nSWY9XCIhaXNHcm91cEVkaXRcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwic2F2ZUdyb3VwKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRlYW1OYW1lXCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbU5hbWUnIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcHRpb25cIj57eyAnRW50ZXJwcmlzZS5UZWFtcy5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGVhbUNhdGVnb3J5XCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbUNhdGVnb3J5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBfZGVmaW5pdGlvbl9pZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmb3JtLmNvbnRyb2xzWydncm91cF9kZWZpbml0aW9uX2lkJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBncm91cERlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhYmVsLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHRleHQtZW5kIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNHcm91cE9wZXJhdGlvbnMgPSAhaXNHcm91cE9wZXJhdGlvbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPkFkZDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVkaXQgR3JvdXAgVGVtcGxhdGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiXG4gICAgICAgICpuZ0lmPVwiaXNHcm91cEVkaXRcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwidXBkYXRlRGV0YWlscygpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0ZWFtTmFtZVwiPnt7ICdFbnRlcnByaXNlLlRlYW1zLlRlYW1OYW1lJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcHRpb25cIj57eyAnRW50ZXJwcmlzZS5UZWFtcy5UZWFtRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGRlc2NyaXB0aW9uIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGVhbUNhdGVnb3J5XCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbUNhdGVnb3J5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBfZGVmaW5pdGlvbl9pZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmb3JtLmNvbnRyb2xzWydncm91cF9kZWZpbml0aW9uX2lkJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBncm91cERlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhYmVsLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWVuZCBtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLlVwZGF0ZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCJcbiAgICAgICpuZ0lmPVwiIWlzR3JvdXBPcGVyYXRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbXQtMiBmaWx0ZXJcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImZpbHRlckRvbWFpbnNMaXN0KCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3RcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMFwiPkFsbCBUZWFtIENhdGVnb3JpZXM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ3JvdXBEZWZpbml0aW9uXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGdyb3VwX2xpc3QgbXktNFwiXG4gICAgICAqbmdJZj1cIiFpc0dyb3VwT3BlcmF0aW9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNiBjb2wteGwtNCBtdC0zXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFsbEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTNcIj57eyBncm91cC5uYW1lIH19PC9oNT5cbiAgICAgICAgICAgICAgPHA+e3sgZ3JvdXAuZGVzY3JpcHRpb24gfCBzbGljZTogMDoyMDAgfX08L3A+XG4gICAgICAgICAgICAgIDxzcGFuPjxhIGNsYXNzPVwiYmFkZ2UgYmctcHJpbWFyeVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD8uZ3JvdXBfZGVmaW5pdGlvbl9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9hPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1lbmQgcHgtMlwiPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibWUtMiBteS0xXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGdyb3VwLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJtZS0yIG15LTFcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNBY2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRHcm91cChncm91cC5pZClcIj48aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm1lLTIgbXktMVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTWVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbZ3JvdXAuaWQsICdtZW1iZXJzJ11cIj48aSBjbGFzcz1cImZhIGZhLXRhc2tzIGN0YTEtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjb21tdW5pY2F0aW9ucyBtZS0yIG15LTFcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvbW11bmljYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQ29tbXVuaWNhdGlvbnMoZ3JvdXAuaWQpXCI+PGkgY2xhc3M9XCJmYSBmYS1jb21tZW50cyBjdGEyLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY29tbXVuaWNhdGlvbnMgbXktMVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG9jdW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRG9jdW1lbnRhdGlvbnMoZ3JvdXAuaWQpXCI+PGkgY2xhc3M9XCJmYWIgZmEtd2lraXBlZGlhLXcgY3RhMS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiYWxsR3JvdXBzPy5sZW5ndGggPT09IDAgJiYgaGFzQWNjZXNzICYmICFpc0dyb3VwT3BlcmF0aW9ucyAmJiBpc0xvYWRlZFwiXG4gIGNsYXNzPVwiY2xlYXJib3RoXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidFbnRlcnByaXNlLlRlYW1zLk5vVGVhbU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+IDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImFsbEdyb3Vwcz8ubGVuZ3RoID09PSAwICYmICFoYXNBY2Nlc3MgJiYgIWlzR3JvdXBPcGVyYXRpb25zICYmIGlzTG9hZGVkXCJcbiAgY2xhc3M9XCJjbGVhcmJvdGhcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0VudGVycHJpc2UuVGVhbXMuTm9UZWFtTWVzc2FnZUlmVXNlcicgfCB0cmFuc2xvY29cIj4gPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9sYWJlbC1tYW5hZ2VtZW50L2dyb3Vwcy9ncm91cHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zaGFyZWQtY29tcG9uZW50cy9zcmMvbGliL2xhYmVsLW1hbmFnZW1lbnQvZ3JvdXBzL2dyb3Vwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRWxCLFVBQVUsRUFDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVEvQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUErQ2pELFlBQ3FCLEVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLG1CQUF3QyxFQUN4QyxXQUF3QixFQUN6QyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFOQyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBeEM3QyxjQUFTLEdBQVksRUFBRSxDQUFDO1FBWXhCLFdBQU0sR0FBRyxFQUFFLENB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eyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgVW50eXBlZEZvcm1Db250cm9sLFxuICAgIFVudHlwZWRGb3JtR3JvdXAsXG4gICAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEdyb3VwU2VydmljZSwgRGF0YVNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaGFyZWQtY29tcG9uZW50LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctZ3JvdXBzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ncm91cHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHcm91cHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIG1lc3NhZ2U6IG51bWJlcjtcblxuICAgIHN1Ym1pdHRlZDogYm9vbGVhbjtcblxuICAgIGlzR3JvdXBPcGVyYXRpb25zOiBib29sZWFuO1xuXG4gICAgaXNHcm91cEVkaXQ6IGJvb2xlYW47XG5cbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgYWxsR3JvdXBzOiBHcm91cFtdID0gW107XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIG5hbWU6IHN0cmluZztcblxuICAgIGdyb3VwX2lkOiBudW1iZXI7XG5cbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG5cbiAgICBhZG1pbnMgPSBbXTtcblxuICAgIHN1YnNjcmlwdGlvbkluZm8gPSBbXTtcblxuICAgIHN1YnNjcmlwdGlvbk93bmVyOiBudW1iZXI7XG5cbiAgICBlbnJvbGxlZFVzZXJzOiB7IGlzX293bmVyOiBib29sZWFuOyBpZDogbnVtYmVyIH1bXTtcblxuICAgIHVzZXI6IFVzZXI7XG5cbiAgICB2aWV3RWRpdCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGdyb3VwRGVmaW5pdGlvbjoge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGdyb3VwczogSXRlcmFibGVJdGVyYXRvcjxvYmplY3Q+O1xuICAgIH1bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBncm91cHNEYXRhOiBHcm91cFtdID0gW107XG5cbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwU2VydmljZTogR3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5zdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgICAgICAgICBncm91cF9kZWZpbml0aW9uX2lkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmN1cnJlbnRNZXNzYWdlLnN1YnNjcmliZShtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN1YnNjcmliZWRVc2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRBbGxHcm91cERlZmluaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gc2F2ZSBncm91cCAqL1xuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIHNhdmVHcm91cCgpIHtcbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBuYW1lOiBmb3JtVmFsdWUubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBncm91cF9kZWZpbml0aW9uX2lkOiBmb3JtVmFsdWUuZ3JvdXBfZGVmaW5pdGlvbl9pZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyb3VwU2VydmljZVxuICAgICAgICAgICAgLnBvc3RHcm91cChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKCdTYXZlZCBTdWNjZXNzZnVsbHknLCAnJywge1xuICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAwMDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEdyb3VwRGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNHcm91cE9wZXJhdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxHcm91cERlZmluaXRpb24oKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbGxHcm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ3JvdXBEZWZpbml0aW9uR2V0QWxsKHRoaXMuaWQsICdTdWJzY3JpcHRpb24nKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBEZWZpbml0aW9uID0gcmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cERlZmluaXRpb24uZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gWy4uLmRhdGEuZ3JvdXBzXTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxHcm91cHMucHVzaCh7IC4uLmdyb3VwLCBncm91cF9kZWZpbml0aW9uX25hbWU6IGRhdGE/Lm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc0RhdGEgPSB0aGlzLmFsbEdyb3VwcztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBEZWZpbml0aW9uID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaWJlZFVzZXJzKCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUoc3ViID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gc3ViO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbihzdWI/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbk93bmVyID0gcmVzcG9uc2Uub3duZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5zID0gcmVzcG9uc2UuYWRtaW5zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkVXNlcnMgPSByZXNwb25zZS5tZW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVucm9sbGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNfb3duZXIgPSBlbGVtZW50Py5pZCA9PT0gdGhpcy51c2VyPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQWNjZXNzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5zLmluY2x1ZGVzKHRoaXMudXNlcj8uaWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXI/LmlkID09PSB0aGlzLnN1YnNjcmlwdGlvbk93bmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBncm91cE9wZXJhdGlvbigpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlld0VkaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dyb3VwT3BlcmF0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNHcm91cEVkaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjYW5jZWxVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuaXNHcm91cE9wZXJhdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgZWRpdEdyb3VwKGdyb3VwX2lkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudmlld0VkaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0dyb3VwRWRpdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JvdXBfaWQgPSBncm91cF9pZDtcbiAgICAgICAgdGhpcy5nZXRHcm91cERldGFpbHMoZ3JvdXBfaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBEZXRhaWxzKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0R3JvdXAoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzcG9uc2UuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgZ3JvdXBfZGVmaW5pdGlvbl9pZDogcmVzcG9uc2UuZ3JvdXBfZGVmaW5pdGlvbl9pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZURldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGdyb3VwX2RlZmluaXRpb25faWQ6IGZvcm1WYWx1ZS5ncm91cF9kZWZpbml0aW9uX2lkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlR3JvdXAodGhpcy5ncm91cF9pZCwgZGF0YSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlNoYXJlZC5Hcm91cHMuVXBkYXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cERlZmluaXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZShpZDogbnVtYmVyKSB7XG4gICAgICAgIHN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgICB0ZXh0OiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRlYW0/YCxcbiAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nJ1xuICAgICAgICB9KS50aGVuKHJlcCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZGVsZXRlR3JvdXAoaWQpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlNoYXJlZC5Hcm91cHMuRGVsZXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBPcGVyYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlckRvbWFpbnNMaXN0KGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUgIT09ICcwJykge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoZWRMaXN0ID0gdGhpcy5ncm91cHNEYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICBncm91cCA9PiBncm91cC5ncm91cF9kZWZpbml0aW9uX2lkID09PSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxsR3JvdXBzID0gc2VhcmNoZWRMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxHcm91cHMgPSB0aGlzLmdyb3Vwc0RhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2aW91cygpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2hhbmdlTWVzc2FnZSgxKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvQ29tbXVuaWNhdGlvbnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC8ke3RoaXMuc3Vic2NyaXB0aW9uPy5zbHVnfS9lbnRlcnByaXNlL2NvbW11bmljYXRpb25zYF0sIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGVudGl0eV9pZDogaWQgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvRG9jdW1lbnRhdGlvbnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC8ke3RoaXMuc3Vic2NyaXB0aW9uPy5zbHVnfS9lbnRlcnByaXNlL3dpa2lgXSwge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgZW50aXR5X2lkOiBpZCB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnlHcm91cChfaW5kZXg6IG51bWJlciwgaXRlbTogeyBpZDogbnVtYmVyIH0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdj5cbiAgPHNlY3Rpb24+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCI+XG4gICAgICAgIDxoMj5FbnRlcnByaXNlIFRlYW1zPC9oMj5cblxuICAgICAgICA8cD5cbiAgICAgICAgICBIZXJlIHlvdSBjYW4gZGVmaW5lIHRoZSB0ZWFtcyBmb3IgeW91ciBFbnRlcnByaXNlIG1lbWJlcnMuIEZvciBleGFtcGxlXG4gICAgICAgICAgXCJDb3Jwb3JhdGUgU2FsZXMgVGVhbVwiLCBcIkZyb250ZW5kIERldiBUZWFtXCIgZXRjLlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIE9uY2UgdGhlIHRlYW1zIGNyZWF0ZWQsIHlvdSdsbCBiZSBhYmxlIHRvIGFkZCBtZW1iZXJzIHRvIHRoZW0gYW5kIHNlZSB1c2VmdWxcbiAgICAgICAgICBpbnNpZ2h0IGJhc2VkIG9uIHRoZSBtZW1iZXJzIGFjdGl2aXR5IGluIHRoZSBjb3JyZXNwb25kaW5nIHRlYW0uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiXG4gICAgICAqbmdJZj1cIiFpc0dyb3VwT3BlcmF0aW9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1lbmRcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc0FjY2Vzc1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJncm91cE9wZXJhdGlvbigpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gQWRkIFRlYW1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJoYXNBY2Nlc3NcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyAnL2VudGVycHJpc2UnLCAnZ3JvdXBzJywgJ2xhYmVscyddXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gTWFuYWdlIFRlYW0gQ2F0ZWdvcmllc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBZGQgR3JvdXAgVGVtcGxhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzR3JvdXBPcGVyYXRpb25zXCJcbiAgICAgIGNsYXNzPVwibWItNFwiPlxuICAgICAgPGg0IGNsYXNzPVwiY2FyZC10aXRsZSBkLWlubGluZVwiPnt7IHZpZXdFZGl0ID8gJ1VwZGF0ZSB0aGUnIDogJ0NyZWF0ZSBhIG5ldycgfX0gdGVhbTwvaDQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgKm5nSWY9XCIhaXNHcm91cEVkaXRcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwic2F2ZUdyb3VwKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRlYW1OYW1lXCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbU5hbWUnIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcHRpb25cIj57eyAnRW50ZXJwcmlzZS5UZWFtcy5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGVhbUNhdGVnb3J5XCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbUNhdGVnb3J5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBfZGVmaW5pdGlvbl9pZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmb3JtLmNvbnRyb2xzWydncm91cF9kZWZpbml0aW9uX2lkJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBncm91cERlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhYmVsLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHRleHQtZW5kIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNHcm91cE9wZXJhdGlvbnMgPSAhaXNHcm91cE9wZXJhdGlvbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPkFkZDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVkaXQgR3JvdXAgVGVtcGxhdGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiXG4gICAgICAgICpuZ0lmPVwiaXNHcm91cEVkaXRcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwidXBkYXRlRGV0YWlscygpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0ZWFtTmFtZVwiPnt7ICdFbnRlcnByaXNlLlRlYW1zLlRlYW1OYW1lJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcHRpb25cIj57eyAnRW50ZXJwcmlzZS5UZWFtcy5UZWFtRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IGRlc2NyaXB0aW9uIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGVhbUNhdGVnb3J5XCI+e3sgJ0VudGVycHJpc2UuVGVhbXMuVGVhbUNhdGVnb3J5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ3JvdXBfZGVmaW5pdGlvbl9pZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmb3JtLmNvbnRyb2xzWydncm91cF9kZWZpbml0aW9uX2lkJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBncm91cERlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhYmVsLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsYWJlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWVuZCBtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLlVwZGF0ZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCJcbiAgICAgICpuZ0lmPVwiIWlzR3JvdXBPcGVyYXRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbXQtMiBmaWx0ZXJcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImZpbHRlckRvbWFpbnNMaXN0KCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3RcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMFwiPkFsbCBUZWFtIENhdGVnb3JpZXM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ3JvdXBEZWZpbml0aW9uXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGdyb3VwX2xpc3QgbXktNFwiXG4gICAgICAqbmdJZj1cIiFpc0dyb3VwT3BlcmF0aW9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNiBjb2wteGwtNCBtdC0zXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFsbEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTNcIj57eyBncm91cC5uYW1lIH19PC9oNT5cbiAgICAgICAgICAgICAgPHA+e3sgZ3JvdXAuZGVzY3JpcHRpb24gfCBzbGljZTogMDoyMDAgfX08L3A+XG4gICAgICAgICAgICAgIDxzcGFuPjxhIGNsYXNzPVwiYmFkZ2UgYmctcHJpbWFyeVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD8uZ3JvdXBfZGVmaW5pdGlvbl9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9hPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1lbmQgcHgtMlwiPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibWUtMiBteS0xXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGdyb3VwLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJtZS0yIG15LTFcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXQgR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNBY2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRHcm91cChncm91cC5pZClcIj48aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm1lLTIgbXktMVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTWVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbZ3JvdXAuaWQsICdtZW1iZXJzJ11cIj48aSBjbGFzcz1cImZhIGZhLXRhc2tzIGN0YTEtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjb21tdW5pY2F0aW9ucyBtZS0yIG15LTFcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvbW11bmljYXRpb25zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQ29tbXVuaWNhdGlvbnMoZ3JvdXAuaWQpXCI+PGkgY2xhc3M9XCJmYSBmYS1jb21tZW50cyBjdGEyLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY29tbXVuaWNhdGlvbnMgbXktMVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG9jdW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRG9jdW1lbnRhdGlvbnMoZ3JvdXAuaWQpXCI+PGkgY2xhc3M9XCJmYWIgZmEtd2lraXBlZGlhLXcgY3RhMS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiYWxsR3JvdXBzPy5sZW5ndGggPT09IDAgJiYgaGFzQWNjZXNzICYmICFpc0dyb3VwT3BlcmF0aW9ucyAmJiBpc0xvYWRlZFwiXG4gIGNsYXNzPVwiY2xlYXItYm90aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInRW50ZXJwcmlzZS5UZWFtcy5Ob1RlYW1NZXNzYWdlJyB8IHRyYW5zbG9jb1wiPiA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJhbGxHcm91cHM/Lmxlbmd0aCA9PT0gMCAmJiAhaGFzQWNjZXNzICYmICFpc0dyb3VwT3BlcmF0aW9ucyAmJiBpc0xvYWRlZFwiXG4gIGNsYXNzPVwiY2xlYXItYm90aFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInRW50ZXJwcmlzZS5UZWFtcy5Ob1RlYW1NZXNzYWdlSWZVc2VyJyB8IHRyYW5zbG9jb1wiPiA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==
@@ -71,7 +71,7 @@ export class NumberPickerComponent {
71
71
  else {
72
72
  this.onDecrease(event);
73
73
  }
74
- this.onpickStopped(wheelUp);
74
+ this.onPickStopped(wheelUp);
75
75
  }
76
76
  onValueChange(_event) {
77
77
  if (this.value > this.max) {
@@ -112,7 +112,7 @@ export class NumberPickerComponent {
112
112
  isArrowUpDown(key) {
113
113
  return key === 'ArrowUp' || key === 'ArrowDown';
114
114
  }
115
- isArowUp(key) {
115
+ isArrowUp(key) {
116
116
  return key === 'ArrowUp';
117
117
  }
118
118
  loopPick(increase, event) {
@@ -135,7 +135,7 @@ export class NumberPickerComponent {
135
135
  if (this.isArrowUpDown(event.key)) {
136
136
  event.preventDefault();
137
137
  if (!this.eventHolder) {
138
- this.loopPick(this.isArowUp(event.key), event);
138
+ this.loopPick(this.isArrowUp(event.key), event);
139
139
  }
140
140
  }
141
141
  event.stopPropagation();
@@ -143,7 +143,7 @@ export class NumberPickerComponent {
143
143
  onKeyUp(event) {
144
144
  if (this.isArrowUpDown(event.key)) {
145
145
  event.preventDefault();
146
- this.afterPick(this.isArowUp(event.key));
146
+ this.afterPick(this.isArrowUp(event.key));
147
147
  }
148
148
  event.stopPropagation();
149
149
  }
@@ -160,7 +160,7 @@ export class NumberPickerComponent {
160
160
  event.stopPropagation();
161
161
  }
162
162
  afterPick(up) {
163
- this.onpickStopped(up);
163
+ this.onPickStopped(up);
164
164
  this.clearTimers();
165
165
  }
166
166
  clearTimers() {
@@ -201,7 +201,6 @@ export class NumberPickerComponent {
201
201
  if (isIncrease) {
202
202
  // NOSONAR
203
203
  if (this.canIncrease()) {
204
- console.log('In this');
205
204
  this.pickStarted.emit(true);
206
205
  this.pickUpStarted.emit(true);
207
206
  }
@@ -211,7 +210,7 @@ export class NumberPickerComponent {
211
210
  this.pickDownStarted.emit(true);
212
211
  }
213
212
  }
214
- onpickStopped(increase) {
213
+ onPickStopped(increase) {
215
214
  const isIncrease = increase;
216
215
  if (isIncrease) {
217
216
  // NOSONAR
@@ -303,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
303
302
  }], pickDownStopped: [{
304
303
  type: Output
305
304
  }] } });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvbnVtYmVyLXBpY2tlci9udW1iZXItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9udW1iZXItcGlja2VyL251bWJlci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxxQkFBcUI7SUFpRTlCLFlBQTZCLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBOUQ3RCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTBCdEIsU0FBSSxHQUFhLElBQUksQ0FBQztRQUV0QixnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFFaEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXJCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkQsZUFBVSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZELGVBQVUsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV2RCxnQkFBVyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFD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b250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ3VzdG9tQ2xhc3NlcywgYnV0dG9uc09yaWVudGF0aW9uVHlwZSwgc2l6ZVR5cGUgfSBmcm9tICcuL251bWJlci1waWNrZXIuY29uZmlnJztcbmltcG9ydCB7IE51bWJlclBpY2tlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1udW1iZXItcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbnVtYmVyLXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBwcmVjaXNpb246IG51bWJlcjtcblxuICAgIHByaXZhdGUgZXZlbnRIb2xkZXIgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBjb3VudEludGVydmFsID0gbnVsbDtcblxuICAgIHByaXZhdGUgaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXA6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0b29sdGlwVGV4dDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSB2YWx1ZTogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgcGlja1N0YXJ0QWZ0ZXI6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIHBpY2tUaW1lcjogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgcHJlZml4OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBwb3N0Zml4OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYnV0dG9uc09yaWVudGF0aW9uOiBidXR0b25zT3JpZW50YXRpb25UeXBlO1xuXG4gICAgQElucHV0KCkgc2l6ZTogc2l6ZVR5cGUgPSAnbWQnO1xuXG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3M6IEN1c3RvbUNsYXNzZXMgPSB7fTtcblxuICAgIEBJbnB1dCgpIG1vdXNlV2hlZWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGFycm93S2V5cyA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBpbnB1dFJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzaG93VXBCdXR0b24gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgc2hvd0Rvd25CdXR0b24gPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBtaW5SZWFjaGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgbWF4UmVhY2hlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tTdGFydGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja1N0b3BwZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwaWNrVXBTdGFydGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja1VwU3RvcHBlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tEb3duU3RhcnRlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tEb3duU3RvcHBlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBudW1iZXJQaWNrZXJTZXJ2aWNlOiBOdW1iZXJQaWNrZXJTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFBpY2tlcigpO1xuICAgIH1cblxuICAgIGlzSG9yaXpvbnRhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uc09yaWVudGF0aW9uICE9PSAndicgJiYgdGhpcy5idXR0b25zT3JpZW50YXRpb24gIT09ICd2ZXJ0aWNhbCc7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCwgJ2FiYycpO1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0Rm9jdXNlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCB3aGVlbFVwID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBkZWx0YSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5kZWx0YVkpIHtcbiAgICAgICAgICAgICAgICBkZWx0YSA9IGV2ZW50LmRlbHRhWSAvIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmRldGFpbCkge1xuICAgICAgICAgICAgICAgIGRlbHRhID0gLWV2ZW50LmRldGFpbCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3aGVlbFVwID0gZGVsdGEgPiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFmdGVyTW91c2VXaGVlbHMod2hlZWxVcCwgZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyTW91c2VXaGVlbHMod2hlZWxVcDogYm9vbGVhbiwgZXZlbnQ6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vblBpY2tTdGFydGVkKHdoZWVsVXApO1xuICAgICAgICBpZiAod2hlZWxVcCkge1xuICAgICAgICAgICAgdGhpcy5vbkluY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25EZWNyZWFzZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbnBpY2tTdG9wcGVkKHdoZWVsVXApO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2UoX2V2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyc2VWYWwodGhpcy52YWx1ZSkgPT09IDAgfHwgdGhpcy5wYXJzZVZhbCh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EZWNyZWFzZShldmVudDogTW91c2VFdmVudCB8IFdoZWVsRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmNhbkRlY3JlYXNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJvdW5kKHRoaXMudmFsdWUgPiB0aGlzLm1pbiA/IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgOiB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWluUmVhY2hlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uSW5jcmVhc2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBXaGVlbEV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jYW5JbmNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yb3VuZCh0aGlzLnZhbHVlIDwgdGhpcy5tYXggPyB0aGlzLnZhbHVlICsgdGhpcy5zdGVwIDogdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1heFJlYWNoZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgaW5jcmVhc2UgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJNb3VzZURvd24oaW5jcmVhc2UsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXJyb3dVcERvd24oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Fyb3dVcChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5ID09PSAnQXJyb3dVcCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb29wUGljayhpbmNyZWFzZTogYm9vbGVhbiwgZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25QaWNrU3RhcnRlZChpbmNyZWFzZSk7XG4gICAgICAgIHRoaXMuZXZlbnRIb2xkZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jcmVhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkluY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVjcmVhc2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMucGlja1RpbWVyKTtcbiAgICAgICAgfSwgdGhpcy5waWNrU3RhcnRBZnRlcik7XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmNyZWFzZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hZnRlck1vdXNlVXAoaW5jcmVhc2UsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJvd1VwRG93bihldmVudC5rZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50SG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29wUGljayh0aGlzLmlzQXJvd1VwKGV2ZW50LmtleSksIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzQXJyb3dVcERvd24oZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJQaWNrKHRoaXMuaXNBcm93VXAoZXZlbnQua2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlck1vdXNlRG93bih1cDogYm9vbGVhbiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvb3BQaWNrKHVwLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlck1vdXNlVXAodXA6IGJvb2xlYW4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJQaWNrKHVwKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlclBpY2sodXA6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5vbnBpY2tTdG9wcGVkKHVwKTtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJUaW1lcnMoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV2ZW50SG9sZGVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNvdW50SW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmV2ZW50SG9sZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb3VudEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVmFsKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmVjaXNpb24oc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC9eXFxkKiQvLmV4ZWMoU3RyaW5nKHN0ZXApKVswXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByb3VuZCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwICoqIHRoaXMucHJlY2lzaW9uKSAvIDEwICoqIHRoaXMucHJlY2lzaW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuSW5jcmVhc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhbkluY3JlYXNlID0gdGhpcy52YWx1ZSA8PSB0aGlzLm1heCAtIHRoaXMuc3RlcDtcbiAgICAgICAgaWYgKCFjYW5JbmNyZWFzZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbkluY3JlYXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuRGVjcmVhc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhbkRlY3JlYXNlID0gdGhpcy52YWx1ZSA+PSB0aGlzLm1pbiArIHRoaXMuc3RlcDtcbiAgICAgICAgaWYgKCFjYW5EZWNyZWFzZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbkRlY3JlYXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25QaWNrU3RhcnRlZChpbmNyZWFzZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBpc0luY3JlYXNlID0gaW5jcmVhc2U7XG4gICAgICAgIGlmIChpc0luY3JlYXNlKSB7XG4gICAgICAgICAgICAvLyBOT1NPTkFSXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5JbmNyZWFzZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0luIHRoaXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrVXBTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5EZWNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tTdGFydGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tEb3duU3RhcnRlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbnBpY2tTdG9wcGVkKGluY3JlYXNlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGlzSW5jcmVhc2UgPSBpbmNyZWFzZTtcbiAgICAgICAgaWYgKGlzSW5jcmVhc2UpIHtcbiAgICAgICAgICAgIC8vIE5PU09OQVJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkluY3JlYXNlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tVcFN0b3BwZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tTdG9wcGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5EZWNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tEb3duU3RvcHBlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5waWNrU3RvcHBlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xlZnRDbGljayhldmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFBpY2tlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW4gPSB0aGlzLnBhcnNlVmFsKHRoaXMubWluKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UubWluO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMucGFyc2VWYWwodGhpcy5tYXgpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS5tYXg7XG4gICAgICAgIHRoaXMuc3RlcCA9IHRoaXMucGFyc2VWYWwodGhpcy5zdGVwKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2Uuc3RlcDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucGFyc2VWYWwodGhpcy52YWx1ZSkgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnZhbHVlO1xuICAgICAgICB0aGlzLnBpY2tTdGFydEFmdGVyID1cbiAgICAgICAgICAgIHRoaXMucGFyc2VWYWwodGhpcy5waWNrU3RhcnRBZnRlcikgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnBpY2tTdGFydEFmdGVyO1xuICAgICAgICB0aGlzLnBpY2tUaW1lciA9IHRoaXMucGFyc2VWYWwodGhpcy5waWNrVGltZXIpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS5waWNrVGltZXI7XG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UucHJlY2lzaW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yb3VuZCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIgPz8gJyc7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTMgaW5wdXQte3sgc2l6ZSB9fSB7eyBjdXN0b21DbGFzcy5jb250YWluZXIgfX1cIj5cbiAgPCEtLSBIb3Jpem9udGFsIGRlY3JlYXNlIGJ1dHRvbiBvcmllbnRhdGlvbiAtLT5cbiAgPHNwYW4gKm5nSWY9XCJpc0hvcml6b250YWwoKSAmJiBzaG93RG93bkJ1dHRvblwiXG4gICAgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IGRlY3JlYXNlIHt7IGN1c3RvbUNsYXNzLmRvd24gfX1cIlxuICAgIChjbGljayk9XCJvbkRlY3JlYXNlKCRldmVudClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVjcmVhc2UoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudCwgZmFsc2UpXCJcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgZmFsc2UpXCI+LTwvc3Bhbj5cbiAgPCEtLSBJbnB1dCBwcmVmaXggLS0+XG4gIDxzcGFuICpuZ0lmPVwicHJlZml4XCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQge3sgY3VzdG9tQ2xhc3MucHJlZml4IH19XCI+e3sgcHJlZml4IH19XG4gIDwvc3Bhbj5cbiAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICBuYW1lPVwiaW5wdXQtc3Bpbi12YWxcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIFtyZWFkT25seV09XCJpbnB1dFJlYWRPbmx5XCJcbiAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgKHdoZWVsKT1cIm1vdXNlV2hlZWwgJiYgb25Nb3VzZVdoZWVsKCRldmVudClcIlxuICAgIChrZXl1cCk9XCJhcnJvd0tleXMgJiYgb25LZXlVcCgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJhcnJvd0tleXMgJiYgb25LZXlEb3duKCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93dXApPVwiYXJyb3dLZXlzICYmIG9uSW5jcmVhc2UoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uYXJyb3dkb3duKT1cImFycm93S2V5cyAmJiBvbkRlY3JlYXNlKCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiAvPlxuICA8IS0tIElucHV0IHBvc3RmaXggLS0+XG5cbiAgPHNwYW4gKm5nSWY9XCJwb3N0Zml4XCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQge3sgY3VzdG9tQ2xhc3MucG9zdGZpeCB9fVwiXG4gICAgW3N0eWxlLmJvcmRlckxlZnRdPVwiJzAnXCI+e3twb3N0Zml4fX1cbiAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcCBtcy0xXCJcbiAgICAgICpuZ0lmPVwic2hvd1Rvb2x0aXAgJiYgdG9vbHRpcFRleHRcIlxuICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXBUZXh0XCJcbiAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgIDwvc3Bhbj5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gSG9yaXpvbnRhbCBpbmNyZWFzZSBidXR0b24gb3JpZW50YXRpb24gLS0+XG4gIDxzcGFuICpuZ0lmPVwiaXNIb3Jpem9udGFsKCkgJiYgc2hvd1VwQnV0dG9uXCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgaW5jcmVhc2Uge3sgY3VzdG9tQ2xhc3MudXAgfX1cIlxuICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cIiFwb3N0Zml4ID8gJzAnIDogJydcIlxuICAgIChjbGljayk9XCJvbkluY3JlYXNlKCRldmVudClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIm9uSW5jcmVhc2UoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudClcIlxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiPis8L3NwYW4+XG4gIDwhLS0gVmVydGljYWwgYnV0dG9ucyBvcmllbnRhdGlvbiAtLT5cbiAgPHNwYW4gKm5nSWY9XCIhaXNIb3Jpem9udGFsKClcIlxuICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCB2ZXJ0aWNhbCBwLTBcIj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dVcEJ1dHRvblwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzLnVwIH19XCJcbiAgICAgIChjbGljayk9XCJvbkluY3JlYXNlKCRldmVudClcIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwib25JbmNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiPis8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93RG93bkJ1dHRvblwiXG4gICAgICBjbGFzcz1cInt7IGN1c3RvbUNsYXNzLmRvd24gfX1cIlxuICAgICAgKGtleWRvd24uZW50ZXIpPVwib25EZWNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJvbkRlY3JlYXNlKCRldmVudClcIlxuICAgICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudCwgZmFsc2UpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCBmYWxzZSlcIj4tPC9zcGFuPlxuICA8L3NwYW4+XG48L2Rpdj5cbiJdfQ==
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvbnVtYmVyLXBpY2tlci9udW1iZXItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9udW1iZXItcGlja2VyL251bWJlci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxxQkFBcUI7SUFpRTlCLFlBQTZCLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBOUQ3RCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTBCdEIsU0FBSSxHQUFhLElBQUksQ0FBQztRQUV0QixnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFFaEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXJCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkQsZUFBVSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZELGVBQVUsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV2RCxnQkFBVyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFD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LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ3VzdG9tQ2xhc3NlcywgYnV0dG9uc09yaWVudGF0aW9uVHlwZSwgc2l6ZVR5cGUgfSBmcm9tICcuL251bWJlci1waWNrZXIuY29uZmlnJztcbmltcG9ydCB7IE51bWJlclBpY2tlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1udW1iZXItcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbnVtYmVyLXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBwcmVjaXNpb246IG51bWJlcjtcblxuICAgIHByaXZhdGUgZXZlbnRIb2xkZXIgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBjb3VudEludGVydmFsID0gbnVsbDtcblxuICAgIHByaXZhdGUgaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG1pbjogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXA6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0b29sdGlwVGV4dDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSB2YWx1ZTogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgcGlja1N0YXJ0QWZ0ZXI6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIHBpY2tUaW1lcjogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgcHJlZml4OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBwb3N0Zml4OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYnV0dG9uc09yaWVudGF0aW9uOiBidXR0b25zT3JpZW50YXRpb25UeXBlO1xuXG4gICAgQElucHV0KCkgc2l6ZTogc2l6ZVR5cGUgPSAnbWQnO1xuXG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3M6IEN1c3RvbUNsYXNzZXMgPSB7fTtcblxuICAgIEBJbnB1dCgpIG1vdXNlV2hlZWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGFycm93S2V5cyA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBpbnB1dFJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzaG93VXBCdXR0b24gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgc2hvd0Rvd25CdXR0b24gPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBtaW5SZWFjaGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgbWF4UmVhY2hlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tTdGFydGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja1N0b3BwZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwaWNrVXBTdGFydGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGlja1VwU3RvcHBlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tEb3duU3RhcnRlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBpY2tEb3duU3RvcHBlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBudW1iZXJQaWNrZXJTZXJ2aWNlOiBOdW1iZXJQaWNrZXJTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFBpY2tlcigpO1xuICAgIH1cblxuICAgIGlzSG9yaXpvbnRhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uc09yaWVudGF0aW9uICE9PSAndicgJiYgdGhpcy5idXR0b25zT3JpZW50YXRpb24gIT09ICd2ZXJ0aWNhbCc7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCwgJ2FiYycpO1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0Rm9jdXNlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCB3aGVlbFVwID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBkZWx0YSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5kZWx0YVkpIHtcbiAgICAgICAgICAgICAgICBkZWx0YSA9IGV2ZW50LmRlbHRhWSAvIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmRldGFpbCkge1xuICAgICAgICAgICAgICAgIGRlbHRhID0gLWV2ZW50LmRldGFpbCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3aGVlbFVwID0gZGVsdGEgPiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFmdGVyTW91c2VXaGVlbHMod2hlZWxVcCwgZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyTW91c2VXaGVlbHMod2hlZWxVcDogYm9vbGVhbiwgZXZlbnQ6IFdoZWVsRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vblBpY2tTdGFydGVkKHdoZWVsVXApO1xuICAgICAgICBpZiAod2hlZWxVcCkge1xuICAgICAgICAgICAgdGhpcy5vbkluY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25EZWNyZWFzZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblBpY2tTdG9wcGVkKHdoZWVsVXApO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2UoX2V2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyc2VWYWwodGhpcy52YWx1ZSkgPT09IDAgfHwgdGhpcy5wYXJzZVZhbCh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EZWNyZWFzZShldmVudDogTW91c2VFdmVudCB8IFdoZWVsRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmNhbkRlY3JlYXNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJvdW5kKHRoaXMudmFsdWUgPiB0aGlzLm1pbiA/IHRoaXMudmFsdWUgLSB0aGlzLnN0ZXAgOiB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWluUmVhY2hlZC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uSW5jcmVhc2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBXaGVlbEV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jYW5JbmNyZWFzZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yb3VuZCh0aGlzLnZhbHVlIDwgdGhpcy5tYXggPyB0aGlzLnZhbHVlICsgdGhpcy5zdGVwIDogdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1heFJlYWNoZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgaW5jcmVhc2UgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJNb3VzZURvd24oaW5jcmVhc2UsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXJyb3dVcERvd24oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Fycm93VXAoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9vcFBpY2soaW5jcmVhc2U6IGJvb2xlYW4sIGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLm9uUGlja1N0YXJ0ZWQoaW5jcmVhc2UpO1xuICAgICAgICB0aGlzLmV2ZW50SG9sZGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvdW50SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluY3JlYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25JbmNyZWFzZShldmVudCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlY3JlYXNlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLnBpY2tUaW1lcik7XG4gICAgICAgIH0sIHRoaXMucGlja1N0YXJ0QWZ0ZXIpO1xuICAgIH1cblxuICAgIG9uTW91c2VVcChldmVudDogTW91c2VFdmVudCwgaW5jcmVhc2UgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJNb3VzZVVwKGluY3JlYXNlLCBldmVudCk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzQXJyb3dVcERvd24oZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudEhvbGRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9vcFBpY2sodGhpcy5pc0Fycm93VXAoZXZlbnQua2V5KSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJvd1VwRG93bihldmVudC5rZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hZnRlclBpY2sodGhpcy5pc0Fycm93VXAoZXZlbnQua2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlck1vdXNlRG93bih1cDogYm9vbGVhbiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvb3BQaWNrKHVwLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlck1vdXNlVXAodXA6IGJvb2xlYW4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJQaWNrKHVwKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlclBpY2sodXA6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5vblBpY2tTdG9wcGVkKHVwKTtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJUaW1lcnMoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV2ZW50SG9sZGVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNvdW50SW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmV2ZW50SG9sZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb3VudEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVmFsKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmVjaXNpb24oc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC9eXFxkKiQvLmV4ZWMoU3RyaW5nKHN0ZXApKVswXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByb3VuZCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwICoqIHRoaXMucHJlY2lzaW9uKSAvIDEwICoqIHRoaXMucHJlY2lzaW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuSW5jcmVhc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhbkluY3JlYXNlID0gdGhpcy52YWx1ZSA8PSB0aGlzLm1heCAtIHRoaXMuc3RlcDtcbiAgICAgICAgaWYgKCFjYW5JbmNyZWFzZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbkluY3JlYXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuRGVjcmVhc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhbkRlY3JlYXNlID0gdGhpcy52YWx1ZSA+PSB0aGlzLm1pbiArIHRoaXMuc3RlcDtcbiAgICAgICAgaWYgKCFjYW5EZWNyZWFzZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbkRlY3JlYXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25QaWNrU3RhcnRlZChpbmNyZWFzZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBpc0luY3JlYXNlID0gaW5jcmVhc2U7XG4gICAgICAgIGlmIChpc0luY3JlYXNlKSB7XG4gICAgICAgICAgICAvLyBOT1NPTkFSXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5JbmNyZWFzZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrU3RhcnRlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja1VwU3RhcnRlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FuRGVjcmVhc2UoKSkge1xuICAgICAgICAgICAgdGhpcy5waWNrU3RhcnRlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5waWNrRG93blN0YXJ0ZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25QaWNrU3RvcHBlZChpbmNyZWFzZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBpc0luY3JlYXNlID0gaW5jcmVhc2U7XG4gICAgICAgIGlmIChpc0luY3JlYXNlKSB7XG4gICAgICAgICAgICAvLyBOT1NPTkFSXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5JbmNyZWFzZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrVXBTdG9wcGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrU3RvcHBlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FuRGVjcmVhc2UoKSkge1xuICAgICAgICAgICAgdGhpcy5waWNrRG93blN0b3BwZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucGlja1N0b3BwZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNMZWZ0Q2xpY2soZXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRQaWNrZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5wYXJzZVZhbCh0aGlzLm1pbikgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLm1pbjtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLnBhcnNlVmFsKHRoaXMubWF4KSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UubWF4O1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLnBhcnNlVmFsKHRoaXMuc3RlcCkgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnN0ZXA7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlVmFsKHRoaXMudmFsdWUpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS52YWx1ZTtcbiAgICAgICAgdGhpcy5waWNrU3RhcnRBZnRlciA9XG4gICAgICAgICAgICB0aGlzLnBhcnNlVmFsKHRoaXMucGlja1N0YXJ0QWZ0ZXIpIHx8IHRoaXMubnVtYmVyUGlja2VyU2VydmljZS5waWNrU3RhcnRBZnRlcjtcbiAgICAgICAgdGhpcy5waWNrVGltZXIgPSB0aGlzLnBhcnNlVmFsKHRoaXMucGlja1RpbWVyKSB8fCB0aGlzLm51bWJlclBpY2tlclNlcnZpY2UucGlja1RpbWVyO1xuICAgICAgICB0aGlzLnByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCkgfHwgdGhpcy5udW1iZXJQaWNrZXJTZXJ2aWNlLnByZWNpc2lvbjtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucm91bmQodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zIGlucHV0LXt7IHNpemUgfX0ge3sgY3VzdG9tQ2xhc3MuY29udGFpbmVyIH19XCI+XG4gIDwhLS0gSG9yaXpvbnRhbCBkZWNyZWFzZSBidXR0b24gb3JpZW50YXRpb24gLS0+XG4gIDxzcGFuICpuZ0lmPVwiaXNIb3Jpem9udGFsKCkgJiYgc2hvd0Rvd25CdXR0b25cIlxuICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBkZWNyZWFzZSB7eyBjdXN0b21DbGFzcy5kb3duIH19XCJcbiAgICAoY2xpY2spPVwib25EZWNyZWFzZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkRlY3JlYXNlKCRldmVudClcIlxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsIGZhbHNlKVwiPi08L3NwYW4+XG4gIDwhLS0gSW5wdXQgcHJlZml4IC0tPlxuICA8c3BhbiAqbmdJZj1cInByZWZpeFwiXG4gICAgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHt7IGN1c3RvbUNsYXNzLnByZWZpeCB9fVwiPnt7IHByZWZpeCB9fVxuICA8L3NwYW4+XG4gIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgbmFtZT1cImlucHV0LXNwaW4tdmFsXCJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICBbcmVhZE9ubHldPVwiaW5wdXRSZWFkT25seVwiXG4gICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICh3aGVlbCk9XCJtb3VzZVdoZWVsICYmIG9uTW91c2VXaGVlbCgkZXZlbnQpXCJcbiAgICAoa2V5dXApPVwiYXJyb3dLZXlzICYmIG9uS2V5VXAoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiYXJyb3dLZXlzICYmIG9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5hcnJvd3VwKT1cImFycm93S2V5cyAmJiBvbkluY3JlYXNlKCRldmVudClcIlxuICAgIChrZXlkb3duLmFycm93ZG93bik9XCJhcnJvd0tleXMgJiYgb25EZWNyZWFzZSgkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgLz5cbiAgPCEtLSBJbnB1dCBwb3N0Zml4IC0tPlxuXG4gIDxzcGFuICpuZ0lmPVwicG9zdGZpeFwiXG4gICAgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IHt7IGN1c3RvbUNsYXNzLnBvc3RmaXggfX1cIlxuICAgIFtzdHlsZS5ib3JkZXJMZWZ0XT1cIicwJ1wiPnt7cG9zdGZpeH19XG4gICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiXG4gICAgICAqbmdJZj1cInNob3dUb29sdGlwICYmIHRvb2x0aXBUZXh0XCJcbiAgICAgIFtwVG9vbHRpcF09XCJ0b29sdGlwVGV4dFwiXG4gICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uIHx8ICd0b3AnXCI+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICA8L3NwYW4+XG4gIDwvc3Bhbj5cblxuICA8IS0tIEhvcml6b250YWwgaW5jcmVhc2UgYnV0dG9uIG9yaWVudGF0aW9uIC0tPlxuICA8c3BhbiAqbmdJZj1cImlzSG9yaXpvbnRhbCgpICYmIHNob3dVcEJ1dHRvblwiXG4gICAgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0IGluY3JlYXNlIHt7IGN1c3RvbUNsYXNzLnVwIH19XCJcbiAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCIhcG9zdGZpeCA/ICcwJyA6ICcnXCJcbiAgICAoY2xpY2spPVwib25JbmNyZWFzZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkluY3JlYXNlKCRldmVudClcIlxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQpXCJcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIj4rPC9zcGFuPlxuICA8IS0tIFZlcnRpY2FsIGJ1dHRvbnMgb3JpZW50YXRpb24gLS0+XG4gIDxzcGFuICpuZ0lmPVwiIWlzSG9yaXpvbnRhbCgpXCJcbiAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgdmVydGljYWwgcC0wXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93VXBCdXR0b25cIlxuICAgICAgY2xhc3M9XCJ7eyBjdXN0b21DbGFzcy51cCB9fVwiXG4gICAgICAoY2xpY2spPVwib25JbmNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uSW5jcmVhc2UoJGV2ZW50KVwiXG4gICAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIj4rPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwic2hvd0Rvd25CdXR0b25cIlxuICAgICAgY2xhc3M9XCJ7eyBjdXN0b21DbGFzcy5kb3duIH19XCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRGVjcmVhc2UoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwib25EZWNyZWFzZSgkZXZlbnQpXCJcbiAgICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgZmFsc2UpXCI+LTwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,48 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { DaterangepickerDirective } from 'ngx-daterangepicker-material';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "ngx-daterangepicker-material";
6
+ export class DateRangePickerComponent {
7
+ constructor() {
8
+ this.initialized = false;
9
+ this.dateRangeChange = new EventEmitter();
10
+ }
11
+ onDateRangeSelect(event) {
12
+ if (event.startDate && event.endDate) {
13
+ this.dateRangeChange.emit(event);
14
+ }
15
+ }
16
+ ngAfterViewInit() {
17
+ setTimeout(() => {
18
+ this.initialized = true;
19
+ });
20
+ }
21
+ onClearDate() {
22
+ if (!this.initialized) {
23
+ return;
24
+ }
25
+ this.dateRangeChange.emit({ startDate: null, endDate: null });
26
+ }
27
+ openDatepicker() {
28
+ setTimeout(() => {
29
+ this.pickerDirective.open();
30
+ }, 50);
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: DateRangePickerComponent, selector: "app-date-picker", inputs: { selectedDateRange: "selectedDateRange", dateRanges: "dateRanges" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "pickerDirective", first: true, predicate: DaterangepickerDirective, descendants: true }], ngImport: i0, template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }] }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DateRangePickerComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'app-date-picker', template: "<div class=\"my-3\">\n <div class=\"row\">\n <!-- start date -->\n <div class=\"col-6 col-sm-3\">\n <div class=\"\">\n <input ngxDaterangepickerMd\n class=\"form-control\"\n [(ngModel)]=\"selectedDateRange\"\n [ranges]=\"dateRanges\"\n [alwaysShowCalendars]=\"true\"\n [locale]=\"{ format: 'DD-MMM-YYYY' }\"\n [showCustomRangeLabel]=\"true\"\n [linkedCalendars]=\"true\"\n [showClearButton]=\"true\"\n (clearClicked)=\"onClearDate()\"\n placeholder=\"Select a date range (optional)\"\n opens=\"center\"\n (ngModelChange)=\"onDateRangeSelect($event)\"\n />\n </div>\n </div>\n <div class=\"col-6 col-sm-3 pop\">\n\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary ngx-daterangepicker-action\"\n (click)=\"openDatepicker()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>", styles: ["::ng-deep .md-drppicker{top:auto!important;left:auto!important;margin-top:0!important}::ng-deep .md-drppicker .clear svg{margin-right:2px;margin-bottom:10px}.pop{margin-left:-22px}\n"] }]
38
+ }], propDecorators: { pickerDirective: [{
39
+ type: ViewChild,
40
+ args: [DaterangepickerDirective, { static: false }]
41
+ }], selectedDateRange: [{
42
+ type: Input
43
+ }], dateRanges: [{
44
+ type: Input
45
+ }], dateRangeChange: [{
46
+ type: Output
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zaGFyZWQtY29tcG9uZW50cy9zcmMvbGliL3JhbmdlLWRhdGUtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hhcmVkLWNvbXBvbmVudHMvc3JjL2xpYi9yYW5nZS1kYXRlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQU94RSxNQUFNLE9BQU8sd0JBQXdCO0lBTHJDO1FBUVksZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHbEIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFHeEMsQ0FBQztLQXVCUjtJQXJCRyxpQkFBaUIsQ0FBQyxLQUEyRDtRQUN6RSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBQ0QsZUFBZTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsY0FBYztRQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBL0JRLHdCQUF3QjttR0FBeEIsd0JBQXdCLHVPQUN0Qix3QkFBd0IsZ0RDVnZDLDYvQkFnQ1E7OzRGRHZCSyx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksaUJBQWlCOzhCQU0zQixlQUFlO3NCQURkLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUc3QyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0ZXJhbmdlcGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWRhdGVyYW5nZXBpY2tlci1tYXRlcmlhbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IHtcbiAgICBAVmlld0NoaWxkKERhdGVyYW5nZXBpY2tlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGlja2VyRGlyZWN0aXZlOiBEYXRlcmFuZ2VwaWNrZXJEaXJlY3RpdmU7XG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZVJhbmdlOiB7IHN0YXJ0RGF0ZTogbW9tZW50Lk1vbWVudDsgZW5kRGF0ZTogbW9tZW50Lk1vbWVudCB9O1xuICAgIEBJbnB1dCgpIGRhdGVSYW5nZXM7XG4gICAgQE91dHB1dCgpIGRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBzdGFydERhdGU6IG1vbWVudC5Nb21lbnQ7XG4gICAgICAgIGVuZERhdGU6IG1vbWVudC5Nb21lbnQ7XG4gICAgfT4oKTtcblxuICAgIG9uRGF0ZVJhbmdlU2VsZWN0KGV2ZW50OiB7IHN0YXJ0RGF0ZTogbW9tZW50Lk1vbWVudDsgZW5kRGF0ZTogbW9tZW50Lk1vbWVudCB9KSB7XG4gICAgICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25DbGVhckRhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQoeyBzdGFydERhdGU6IG51bGwsIGVuZERhdGU6IG51bGwgfSk7XG4gICAgfVxuICAgIG9wZW5EYXRlcGlja2VyKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyRGlyZWN0aXZlLm9wZW4oKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJteS0zXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8IS0tIHN0YXJ0IGRhdGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC02IGNvbC1zbS0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIDxpbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCJcbiAgICAgIFtyYW5nZXNdPVwiZGF0ZVJhbmdlc1wiXG4gICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTU0tWVlZWScgfVwiXG4gICAgICBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwidHJ1ZVwiXG4gICAgICBbbGlua2VkQ2FsZW5kYXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcbiAgICAgIChjbGVhckNsaWNrZWQpPVwib25DbGVhckRhdGUoKVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhIGRhdGUgcmFuZ2UgKG9wdGlvbmFsKVwiXG4gICAgICBvcGVucz1cImNlbnRlclwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVSYW5nZVNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLXNtLTMgcG9wXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBuZ3gtZGF0ZXJhbmdlcGlja2VyLWFjdGlvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlcGlja2VyKClcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPC9kaXY+Il19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbXBvbmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3NoYXJlZC1jb21wb25lbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNoYXJlZE1vZGFsQ29udGV4dCB7XG4gICAgbW9kYWw6IHtcbiAgICAgICAgZGlzbWlzczogKCkgPT4gdm9pZDtcbiAgICAgICAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnJvbGxlZFVzZXIge1xuICAgIGlzX293bmVyOiBib29sZWFuO1xuICAgIGlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWZpbmF0aW9uIHtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBncm91cF9kZWZpbml0aW9uX2lkPzogbnVtYmVyO1xuICAgIGdyb3VwX2RlZmluaXRpb25fbmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGVybWlzc2lvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudE5hbWU/OiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uVHJlZURhdGEge1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW107XG4gICAgZ3JhbnRlZFBlcm1pc3Npb25OYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICBqc3RyZWUobWV0aG9kOiBzdHJpbmcsIC4uLmFyZ3M6IG9iamVjdFtdKTogb2JqZWN0O1xuICAgIGpzdHJlZShvcHRpb25zOiBvYmplY3QpOiBvYmplY3Q7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbXBvbmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoYXJlZC1jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3NoYXJlZC1jb21wb25lbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNoYXJlZE1vZGFsQ29udGV4dCB7XG4gICAgbW9kYWw6IHtcbiAgICAgICAgZGlzbWlzczogKCkgPT4gdm9pZDtcbiAgICAgICAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnJvbGxlZFVzZXIge1xuICAgIGlzX293bmVyOiBib29sZWFuO1xuICAgIGlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBEZWZpbml0aW9uIHtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBncm91cF9kZWZpbml0aW9uX2lkPzogbnVtYmVyO1xuICAgIGdyb3VwX2RlZmluaXRpb25fbmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGVybWlzc2lvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudE5hbWU/OiBzdHJpbmc7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uVHJlZURhdGEge1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW107XG4gICAgZ3JhbnRlZFBlcm1pc3Npb25OYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlF1ZXJ5IHtcbiAgICBqc3RyZWUobWV0aG9kOiBzdHJpbmcsIC4uLmFyZ3M6IG9iamVjdFtdKTogb2JqZWN0O1xuICAgIGpzdHJlZShvcHRpb25zOiBvYmplY3QpOiBvYmplY3Q7XG59XG4iXX0=