@posiwise/admin-module 0.0.178 → 0.0.179

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.
@@ -7,13 +7,14 @@ import { HelperService } from '@posiwise/helper-service';
7
7
  import { QuillHelper, ValidateForm } from '@posiwise/utils';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@posiwise/admin-module-utils";
10
- import * as i2 from "@angular/common";
11
- import * as i3 from "@angular/forms";
12
- import * as i4 from "@angular/router";
13
- import * as i5 from "primeng/progressspinner";
14
- import * as i6 from "@posiwise/directives";
15
- import * as i7 from "ngx-quill";
16
- import * as i8 from "@jsverse/transloco";
10
+ import * as i2 from "primeng/calendar";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@angular/forms";
13
+ import * as i5 from "@angular/router";
14
+ import * as i6 from "primeng/progressspinner";
15
+ import * as i7 from "@posiwise/directives";
16
+ import * as i8 from "ngx-quill";
17
+ import * as i9 from "@jsverse/transloco";
17
18
  export class TermsOfServiceDetailsComponent extends AppBaseComponent {
18
19
  constructor(adminService, injector) {
19
20
  super(injector);
@@ -70,14 +71,19 @@ export class TermsOfServiceDetailsComponent extends AppBaseComponent {
70
71
  this.adminService.getTosDetails(this.id).subscribe((response) => {
71
72
  this.isLoading = false;
72
73
  this.data = response;
73
- this.form.patchValue(this.data);
74
+ this.form.patchValue({
75
+ ...this.data,
76
+ tos_updated_at: this.data?.tos_updated_at
77
+ ? new Date(this.data.tos_updated_at)
78
+ : null
79
+ });
74
80
  });
75
81
  }
76
82
  ngOnDestroy() {
77
83
  super.ngOnDestroy();
78
84
  }
79
85
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TermsOfServiceDetailsComponent, deps: [{ token: i1.AdminService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
80
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TermsOfServiceDetailsComponent, selector: "pw-terms-of-service-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a\n routerLink=\"../../tos\"\n aria-label=\"Back to Terms of Service\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Terms of Service: {{ isLoading ? '' : (data?.title ? data?.title : 'Add New') }}</span>\n </h3>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"title\">{{ 'Label.Title' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <textarea type=\"text\"\n class=\"form-control\"\n rows=\"2\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\"></textarea>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"privacyEditor\" class=\"d-block\">{{ 'Label.Privacy' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"privacyEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"privacy\"\n [ngClass]=\"{ 'is-invalid': submitted && f['privacy'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label class=\"d-block\" for=\"tosEditor\">{{ 'Label.Tos' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"tosEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"tos\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tos'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'SuperAdmin'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { 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.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i6.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i8.TranslocoPipe, name: "transloco" }] }); }
86
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: TermsOfServiceDetailsComponent, selector: "pw-terms-of-service-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a\n routerLink=\"../../tos\"\n aria-label=\"Back to Terms of Service\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Terms of Service: {{ isLoading ? '' : (data?.title ? data?.title : 'Add New') }}</span>\n </h3>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"title\">{{ 'Label.Title' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <textarea type=\"text\"\n class=\"form-control\"\n rows=\"2\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\"></textarea>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"privacyEditor\" class=\"d-block\">{{ 'Label.Privacy' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"privacyEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"privacy\"\n [ngClass]=\"{ 'is-invalid': submitted && f['privacy'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label class=\"d-block\" for=\"tosEditor\">{{ 'Label.Tos' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"tosEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"tos\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tos'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4 mt-3\">\n <label for=\"tosUpdatedAt\" class=\"form-label\">\n {{ 'Admin.Tos.TosUpdatedAt' | transloco }}\n <span class=\"info-circle tooltip-wrap tooltip-info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">\n {{ 'Admin.Tos.Tooltip.TosUpdatedAt' | transloco }}\n </span>\n </span>\n </label>\n <p-calendar\n id=\"tosUpdatedAt\"\n formControlName=\"tos_updated_at\"\n class=\"d-block mt-1\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [appendTo]=\"'body'\"\n [placeholder]=\"'Admin.Incident.calender.placeholder' | transloco\">\n </p-calendar>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'SuperAdmin'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i7.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i7.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i9.TranslocoPipe, name: "transloco" }] }); }
81
87
  }
82
88
  __decorate([
83
89
  ValidateForm('form'),
@@ -87,6 +93,6 @@ __decorate([
87
93
  ], TermsOfServiceDetailsComponent.prototype, "onSave", null);
88
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TermsOfServiceDetailsComponent, decorators: [{
89
95
  type: Component,
90
- args: [{ selector: 'pw-terms-of-service-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a\n routerLink=\"../../tos\"\n aria-label=\"Back to Terms of Service\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Terms of Service: {{ isLoading ? '' : (data?.title ? data?.title : 'Add New') }}</span>\n </h3>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"title\">{{ 'Label.Title' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <textarea type=\"text\"\n class=\"form-control\"\n rows=\"2\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\"></textarea>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"privacyEditor\" class=\"d-block\">{{ 'Label.Privacy' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"privacyEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"privacy\"\n [ngClass]=\"{ 'is-invalid': submitted && f['privacy'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label class=\"d-block\" for=\"tosEditor\">{{ 'Label.Tos' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"tosEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"tos\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tos'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'SuperAdmin'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n" }]
96
+ args: [{ selector: 'pw-terms-of-service-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a\n routerLink=\"../../tos\"\n aria-label=\"Back to Terms of Service\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Terms of Service: {{ isLoading ? '' : (data?.title ? data?.title : 'Add New') }}</span>\n </h3>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"title\">{{ 'Label.Title' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <textarea type=\"text\"\n class=\"form-control\"\n rows=\"2\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\"></textarea>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label for=\"privacyEditor\" class=\"d-block\">{{ 'Label.Privacy' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"privacyEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"privacy\"\n [ngClass]=\"{ 'is-invalid': submitted && f['privacy'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <div class=\"mb-3\">\n <label class=\"d-block\" for=\"tosEditor\">{{ 'Label.Tos' | transloco }}\n <span class=\"text-danger required-icon\">*</span></label>\n <quill-editor class=\"d-block\" id=\"tosEditor\" [styles]=\"{ height: '450px' }\" class=\"quillEditor quill-editor\" [modules]=\"editorConfig\"\n formControlName=\"tos\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tos'].errors, 'quill-container': true }\">\n </quill-editor>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4 mt-3\">\n <label for=\"tosUpdatedAt\" class=\"form-label\">\n {{ 'Admin.Tos.TosUpdatedAt' | transloco }}\n <span class=\"info-circle tooltip-wrap tooltip-info-circle\">\n <span class=\"tooltiptext gradient-custom-branding\">\n {{ 'Admin.Tos.Tooltip.TosUpdatedAt' | transloco }}\n </span>\n </span>\n </label>\n <p-calendar\n id=\"tosUpdatedAt\"\n formControlName=\"tos_updated_at\"\n class=\"d-block mt-1\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [appendTo]=\"'body'\"\n [placeholder]=\"'Admin.Incident.calender.placeholder' | transloco\">\n </p-calendar>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'SuperAdmin'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n" }]
91
97
  }], ctorParameters: () => [{ type: i1.AdminService }, { type: i0.Injector }], propDecorators: { onSave: [] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybXMtb2Ytc2VydmljZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9UT1MvdGVybXMtb2Ytc2VydmljZS1kZXRhaWxzL3Rlcm1zLW9mLXNlcnZpY2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvVE9TL3Rlcm1zLW9mLXNlcnZpY2UtZGV0YWlscy90ZXJtcy1vZi1zZXJ2aWNlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVE1RCxNQUFNLE9BQU8sOEJBQ1QsU0FBUSxnQkFBZ0I7SUFZeEIsWUFDcUIsWUFBMEIsRUFDM0MsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFOL0MsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBUWQsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdB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R0FBRyxRQUFRLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBaEZRLDhCQUE4QjttR0FBOUIsOEJBQThCLDBGQ2YzQywrdkdBMEVBOztBRG5CSTtJQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7NERBd0JwQjs0RkEvRFEsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNJLDZCQUE2Qjt3R0EyQ3ZDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlLCBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpbGxIZWxwZXIsIFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCB7IFByaXZhY3lUb3MgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL3ByaXZhY3ktdG9zLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctdGVybXMtb2Ytc2VydmljZS1kZXRhaWxzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGVybXMtb2Ytc2VydmljZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUZXJtc09mU2VydmljZURldGFpbHNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgICBpZDogbnVtYmVyO1xuXG4gICAgZGF0YTogUHJpdmFjeVRvcztcbiAgICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgZWRpdG9yQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIFF1aWxsSGVscGVyLmluaXQoKTtcbiAgICAgICAgdGhpcy5lZGl0b3JDb25maWcgPSBRdWlsbEhlbHBlci5nZXRFZGl0b3JDb25maWcoKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0VG9zRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIocGFyYW1zWydpZCddKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb3NEZXRhaWxzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5zdWJzY3JpYmVUb0VkaXRvckNoYW5nZXModGhpcy5mb3JtLCAncHJpdmFjeScpO1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLnN1YnNjcmliZVRvRWRpdG9yQ2hhbmdlcyh0aGlzLmZvcm0sICd0b3MnKTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvcnMgPSBbXG4gICAgICAgICAgICB7IGNvbnRyb2xOYW1lOiAncHJpdmFjeScsIHNlbGVjdG9yOiAnI3ByaXZhY3lFZGl0b3InIH0sXG4gICAgICAgICAgICB7IGNvbnRyb2xOYW1lOiAndG9zJywgc2VsZWN0b3I6ICcjdG9zRWRpdG9yJyB9XG4gICAgICAgIF07XG5cbiAgICAgICAgZWRpdG9ycy5mb3JFYWNoKGVkaXRvciA9PiB7XG4gICAgICAgICAgICBjb25zdCByYXdIdG1sID0gSGVscGVyU2VydmljZS5TYXZlUmF3SFRNTChlZGl0b3Iuc2VsZWN0b3IpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2VkaXRvci5jb250cm9sTmFtZV0uc2V0VmFsdWUocmF3SHRtbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUsIHN1YnNjcmlwdGlvbl9pZDogc3Vic2NyaXB0aW9uSWQgfTtcbiAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgID8gdGhpcy5hZG1pblNlcnZpY2UudXBkYXRlVG9zKHRoaXMuaWQsIGRhdGEpXG4gICAgICAgICAgICA6IHRoaXMuYWRtaW5TZXJ2aWNlLnBvc3RUb3MoZGF0YSk7XG4gICAgICAgIHN1YiQuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnVG9zLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIFRvc0RldGFpbHMgKi9cbiAgICBwcml2YXRlIGdldFRvc0RldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFRvc0RldGFpbHModGhpcy5pZCkuc3Vic2NyaWJlKChyZXNwb25zZTogUHJpdmFjeVRvcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02IG10LTRcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICByb3V0ZXJMaW5rPVwiLi4vLi4vdG9zXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQmFjayB0byBUZXJtcyBvZiBTZXJ2aWNlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8c3Bhbj5UZXJtcyBvZiBTZXJ2aWNlOiB7eyBpc0xvYWRpbmcgPyAnJyA6IChkYXRhPy50aXRsZSA/IGRhdGE/LnRpdGxlIDogJ0FkZCBOZXcnKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0aXRsZVwiPnt7ICdMYWJlbC5UaXRsZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByaXZhY3lFZGl0b3JcIiBjbGFzcz1cImQtYmxvY2tcIj57eyAnTGFiZWwuUHJpdmFjeScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIGNsYXNzPVwiZC1ibG9ja1wiIGlkPVwicHJpdmFjeUVkaXRvclwiICBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnNDUwcHgnIH1cIiBjbGFzcz1cInF1aWxsRWRpdG9yIHF1aWxsLWVkaXRvclwiIFttb2R1bGVzXT1cImVkaXRvckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcml2YWN5XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncHJpdmFjeSddLmVycm9ycywgJ3F1aWxsLWNvbnRhaW5lcic6IHRydWUgIH1cIj5cbiAgICAgICAgICAgICAgICA8L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1ibG9ja1wiIGZvcj1cInRvc0VkaXRvclwiPnt7ICdMYWJlbC5Ub3MnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciAgY2xhc3M9XCJkLWJsb2NrXCIgaWQ9XCJ0b3NFZGl0b3JcIiAgW3N0eWxlc109XCJ7IGhlaWdodDogJzQ1MHB4JyB9XCIgY2xhc3M9XCJxdWlsbEVkaXRvciBxdWlsbC1lZGl0b3JcIiBbbW9kdWxlc109XCJlZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidG9zXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndG9zJ10uZXJyb3JzLCAncXVpbGwtY29udGFpbmVyJzogdHJ1ZSAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwic3VibWl0dGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybXMtb2Ytc2VydmljZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9UT1MvdGVybXMtb2Ytc2VydmljZS1kZXRhaWxzL3Rlcm1zLW9mLXNlcnZpY2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvVE9TL3Rlcm1zLW9mLXNlcnZpY2UtZGV0YWlscy90ZXJtcy1vZi1zZXJ2aWNlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFRNUQsTUFBTSxPQUFPLDhCQUNULFNBQVEsZ0JBQWdCO0lBWXhCLFlBQ3FCLFlBQTBCLEVBQzNDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUhDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBTi9DLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVFkLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxH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LEdBQUcsUUFBUSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNqQixHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUNaLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWM7b0JBQ3JDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQXdCLENBQUM7b0JBQzlDLENBQUMsQ0FBQyxJQUFJO2FBQ2IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FyRlEsOEJBQThCO21HQUE5Qiw4QkFBOEIsMEZDZjNDLG1uSUE4RkE7O0FEdkNJO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7Ozs0REF3QnBCOzRGQS9EUSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0ksNkJBQTZCO3dHQTJDdkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UsIEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBRdWlsbEhlbHBlciwgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuaW1wb3J0IHsgUHJpdmFjeVRvcyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvcHJpdmFjeS10b3MuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy10ZXJtcy1vZi1zZXJ2aWNlLWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZXJtcy1vZi1zZXJ2aWNlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1zT2ZTZXJ2aWNlRGV0YWlsc0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICBkYXRhOiBQcml2YWN5VG9zO1xuICAgIGlzTG9hZGluZyA9IHRydWU7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBlZGl0b3JDb25maWc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgUXVpbGxIZWxwZXIuaW5pdCgpO1xuICAgICAgICB0aGlzLmVkaXRvckNvbmZpZyA9IFF1aWxsSGVscGVyLmdldEVkaXRvckNvbmZpZygpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRUb3NGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihwYXJhbXNbJ2lkJ10pO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRvc0RldGFpbHMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLnN1YnNjcmliZVRvRWRpdG9yQ2hhbmdlcyh0aGlzLmZvcm0sICdwcml2YWN5Jyk7XG4gICAgICAgIEhlbHBlclNlcnZpY2Uuc3Vic2NyaWJlVG9FZGl0b3JDaGFuZ2VzKHRoaXMuZm9ybSwgJ3RvcycpO1xuICAgIH1cblxuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZWRpdG9ycyA9IFtcbiAgICAgICAgICAgIHsgY29udHJvbE5hbWU6ICdwcml2YWN5Jywgc2VsZWN0b3I6ICcjcHJpdmFjeUVkaXRvcicgfSxcbiAgICAgICAgICAgIHsgY29udHJvbE5hbWU6ICd0b3MnLCBzZWxlY3RvcjogJyN0b3NFZGl0b3InIH1cbiAgICAgICAgXTtcblxuICAgICAgICBlZGl0b3JzLmZvckVhY2goZWRpdG9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJhd0h0bWwgPSBIZWxwZXJTZXJ2aWNlLlNhdmVSYXdIVE1MKGVkaXRvci5zZWxlY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbZWRpdG9yLmNvbnRyb2xOYW1lXS5zZXRWYWx1ZShyYXdIdG1sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS52YWx1ZSwgc3Vic2NyaXB0aW9uX2lkOiBzdWJzY3JpcHRpb25JZCB9O1xuICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgPyB0aGlzLmFkbWluU2VydmljZS51cGRhdGVUb3ModGhpcy5pZCwgZGF0YSlcbiAgICAgICAgICAgIDogdGhpcy5hZG1pblNlcnZpY2UucG9zdFRvcyhkYXRhKTtcbiAgICAgICAgc3ViJC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdUb3MuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICB0aGlzLmJhY2soKTtcbiAgICAgICAgfSkuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgVG9zRGV0YWlscyAqL1xuICAgIHByaXZhdGUgZ2V0VG9zRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0VG9zRGV0YWlscyh0aGlzLmlkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBQcml2YWN5VG9zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5kYXRhLFxuICAgICAgICAgICAgICAgIHRvc191cGRhdGVkX2F0OiB0aGlzLmRhdGE/LnRvc191cGRhdGVkX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUodGhpcy5kYXRhLnRvc191cGRhdGVkX2F0IGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02IG10LTRcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICByb3V0ZXJMaW5rPVwiLi4vLi4vdG9zXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQmFjayB0byBUZXJtcyBvZiBTZXJ2aWNlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8c3Bhbj5UZXJtcyBvZiBTZXJ2aWNlOiB7eyBpc0xvYWRpbmcgPyAnJyA6IChkYXRhPy50aXRsZSA/IGRhdGE/LnRpdGxlIDogJ0FkZCBOZXcnKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0aXRsZVwiPnt7ICdMYWJlbC5UaXRsZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByaXZhY3lFZGl0b3JcIiBjbGFzcz1cImQtYmxvY2tcIj57eyAnTGFiZWwuUHJpdmFjeScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIGNsYXNzPVwiZC1ibG9ja1wiIGlkPVwicHJpdmFjeUVkaXRvclwiICBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnNDUwcHgnIH1cIiBjbGFzcz1cInF1aWxsRWRpdG9yIHF1aWxsLWVkaXRvclwiIFttb2R1bGVzXT1cImVkaXRvckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcml2YWN5XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncHJpdmFjeSddLmVycm9ycywgJ3F1aWxsLWNvbnRhaW5lcic6IHRydWUgIH1cIj5cbiAgICAgICAgICAgICAgICA8L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1ibG9ja1wiIGZvcj1cInRvc0VkaXRvclwiPnt7ICdMYWJlbC5Ub3MnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciAgY2xhc3M9XCJkLWJsb2NrXCIgaWQ9XCJ0b3NFZGl0b3JcIiAgW3N0eWxlc109XCJ7IGhlaWdodDogJzQ1MHB4JyB9XCIgY2xhc3M9XCJxdWlsbEVkaXRvciBxdWlsbC1lZGl0b3JcIiBbbW9kdWxlc109XCJlZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidG9zXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndG9zJ10uZXJyb3JzLCAncXVpbGwtY29udGFpbmVyJzogdHJ1ZSAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00IG10LTNcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRvc1VwZGF0ZWRBdFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7ICdBZG1pbi5Ub3MuVG9zVXBkYXRlZEF0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1jaXJjbGUgdG9vbHRpcC13cmFwIHRvb2x0aXAtaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdBZG1pbi5Ub3MuVG9vbHRpcC5Ub3NVcGRhdGVkQXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgIGlkPVwidG9zVXBkYXRlZEF0XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0b3NfdXBkYXRlZF9hdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrIG10LTFcIlxuICAgICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PVwiZGQtTS15eVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBZG1pbi5JbmNpZGVudC5jYWxlbmRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1lbmQgbXQtM1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJzdWJtaXR0ZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1N1cGVyQWRtaW4nXCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19