@muraai/mnl-form 0.0.1-alpha-f274a13 → 0.0.1-alpha-10829d9

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.
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
3
3
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { CommonsModule } from '@muraai/mnl-commons';
5
- import { FormlyModule, } from '@ngx-formly/core';
5
+ import { FormlyModule } from '@ngx-formly/core';
6
6
  import { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';
7
7
  import { FormlyMatInputModule } from '@ngx-formly/material/input';
8
8
  import { FormlyMatTextAreaModule } from '@ngx-formly/material/textarea';
@@ -37,6 +37,7 @@ export class MnlFormLibComponent {
37
37
  ...this.options.formState,
38
38
  showOldValues: this.showOldValues,
39
39
  oldValues: this.oldValues,
40
+ helperModel: this.helperModel,
40
41
  },
41
42
  };
42
43
  }
@@ -142,7 +143,7 @@ export class MnlFormLibComponent {
142
143
  });
143
144
  }
144
145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, deps: [{ token: i1.TranslateService }, { token: i2.ScoringService }], target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", helperModel: "helperModel", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
146
147
  }
147
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, decorators: [{
148
149
  type: Component,
@@ -166,6 +167,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
166
167
  type: Input
167
168
  }], model: [{
168
169
  type: Input
170
+ }], helperModel: [{
171
+ type: Input
169
172
  }], options: [{
170
173
  type: Input
171
174
  }], userRoles: [{
@@ -181,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
181
184
  }], scoreChange: [{
182
185
  type: Output
183
186
  }] } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWxpYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBcUJsRSxNQUFNLE9BQU8sbUJBQW1CO0lBb0M5QixZQUNVLGdCQUFrQyxFQUNsQyxPQUF1QjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FB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QUFhO3NCQURaLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLFNBQVM7c0JBRFIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25zTW9kdWxlIH0gZnJvbSAnQG11cmFhaS9tbmwtY29tbW9ucyc7XG5pbXBvcnQge1xuICBGb3JtbHlGb3JtT3B0aW9ucyxcbiAgRm9ybWx5TW9kdWxlLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1seU1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgRm9ybWx5TWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3JtbHlNYXRUZXh0QXJlYU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL3RleHRhcmVhJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2N1c3RvbS1mb3JtLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZvcm1seU1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgU2NvcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY29yaW5nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtbmwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29tbW9uc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRm9ybWx5TWF0VGV4dEFyZWFNb2R1bGUsXG4gICAgRm9ybWx5TWF0SW5wdXRNb2R1bGUsXG4gICAgRm9ybWx5TWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgRm9ybWx5TWF0UmFkaW9Nb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtbHktbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1seS1saWIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNbmxGb3JtTGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBmb3JtITogRm9ybUdyb3VwO1xuXG4gIEBJbnB1dCgpXG4gIGZpZWxkcyE6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW107XG5cbiAgQElucHV0KClcbiAgbW9kZWw6IGFueTtcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogRm9ybWx5Rm9ybU9wdGlvbnM7XG5cbiAgQElucHV0KClcbiAgdXNlclJvbGVzITogc3RyaW5nW107XG5cbiAgQElucHV0KClcbiAgdXNlckNvdW50cmllcyE6IHN0cmluZ1tdO1xuXG4gIEBPdXRwdXQoKVxuICBub09mVGFicyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKVxuICBvbGRWYWx1ZXM6IGFueTtcblxuICBASW5wdXQoKVxuICBzaG93T2xkVmFsdWVzITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgXG4gIHNjb3JlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVByZXBhcmVkID0gZmFsc2U7XG4gIHRvdGFsVGFicyA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3Jpbmc6IFNjb3JpbmdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuYXBwbHlSZWFkb25seVRvRmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1QcmVwYXJlZCA9IHRydWU7XG4gICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVNpbmdsZU9wdGlvbkJ5RGVmYXVsdCh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy5mb3JtU3RhdGUsXG4gICAgICAgICAgc2hvd09sZFZhbHVlczogdGhpcy5zaG93T2xkVmFsdWVzLFxuICAgICAgICAgIG9sZFZhbHVlczogdGhpcy5vbGRWYWx1ZXMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UobW9kZWw6IGFueSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2NvcmluZy51cGRhdGVTY29yZShtb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIHRoaXMuc2NvcmVDaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgc2V0QXV0b2NvbXBsZXRlU2luZ2xlT3B0aW9uQnlEZWZhdWx0KGZpZWxkczogYW55KSB7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbXUtc2VsZWN0LWF1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgZmllbGQuaG9va3MgPSB7XG4gICAgICAgICAgb25Jbml0OiAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIChvcHRpb25zIHx8IG9mKFtdKSkuc3Vic2NyaWJlKChvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbkJ5RGVmYXVsdChmb3JtQ29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVTaW5nbGVPcHRpb25CeURlZmF1bHQoZmllbGQuZmllbGRHcm91cCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2w6IGFueSwgZmllbGQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKGZvcm1Db250cm9sICYmIGZpZWxkLnByb3BzICYmIGZpZWxkLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShvcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZmllbGQucHJvcHMub3B0aW9uc0NoYW5nZT8uc3Vic2NyaWJlKCh1cGRhdGVkT3B0aW9uczogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHVwZGF0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBmb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHVwZGF0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ211LXRhYnMnKSB7XG4gICAgICAgIHRoaXMudG90YWxUYWJzID0gZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMubm9PZlRhYnMuZW1pdCh0aGlzLnRvdGFsVGFicyk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhcbiAgICBmaWVsZHM6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW11cbiAgKTogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLnByb3BzID0ge1xuICAgICAgICAgIC4uLihmaWVsZC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoZmllbGRzOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZ1tdKSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiAhZmllbGQudmlzc2libGVDb3VudHJpZXMpIHtcbiAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwID0gdGhpcy5maWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoXG4gICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBoYXNWYWxpZFJvbGUgPSBmaWVsZC52aXNzaWJsZVJvbGVzXG4gICAgICAgIC8vICAgPyBmaWVsZC52aXNzaWJsZVJvbGVzLnNvbWUoKHJvbGU6IGFueSkgPT4gdGhpcy51c2VyUm9sZXM/LmluY2x1ZGVzKHJvbGUpKVxuICAgICAgICAvLyAgIDogdHJ1ZTtcbiAgICAgICAgLy8gY29uc3QgaGFzVmFsaWRDb3VudHJ5ID0gZmllbGQudmlzc2libGVDb3VudHJpZXNcbiAgICAgICAgLy8gICA/IGZpZWxkLnZpc3NpYmxlQ291bnRyaWVzLnNvbWUoKGNvdW50cnk6IGFueSkgPT4gdGhpcy51c2VyQ291bnRyaWVzPy5pbmNsdWRlcyhjb3VudHJ5KSlcbiAgICAgICAgLy8gICA6IHRydWU7XG5cbiAgICAgICAgY29uc3QgdmFsaWRHcm91cCA9IGZpZWxkO1xuICAgICAgICBpZiAodmFsaWRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKFxuICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkR3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZEdyb3VwICYmIGZpZWxkLnByb3BzPy5yZXF1aXJlZCkge1xuICAgICAgICAgIGZpZWxkLnByb3BzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkR3JvdXA7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQgIT09IG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0aW9uc0ZvckZpbHRlcmVkRmllbGRzKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSkpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woZmllbGQua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmKGZvcm1QcmVwYXJlZCkge1xuPGZvcm1seS1mb3JtXG4gIFtmb3JtXT1cImZvcm1cIlxuICBbZmllbGRzXT1cImZpZWxkc1wiXG4gIFttb2RlbF09XCJtb2RlbFwiXG4gIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAobW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgY2xhc3M9XCJtbmwtZm9ybWx5LWZvcm1cIlxuPjwvZm9ybWx5LWZvcm0+XG59XG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWxpYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQXFCbEUsTUFBTSxPQUFPLG1CQUFtQjtJQXVDOUIsWUFDVSxnQkFBa0MsRUFDbEMsT0FBdUI7UUFEdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtR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QUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uc01vZHVsZSB9IGZyb20gJ0BtdXJhYWkvbW5sLWNvbW1vbnMnO1xuaW1wb3J0IHsgRm9ybWx5Rm9ybU9wdGlvbnMsIEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5TWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBGb3JtbHlNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZvcm1seU1hdFRleHRBcmVhTW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvdGV4dGFyZWEnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VzdG9tRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvY3VzdG9tLWZvcm0tZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWx5TWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBTY29yaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Njb3Jpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ubC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb21tb25zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBGb3JtbHlNYXRUZXh0QXJlYU1vZHVsZSxcbiAgICBGb3JtbHlNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3JtbHlNYXRDaGVja2JveE1vZHVsZSxcbiAgICBGb3JtbHlNYXRSYWRpb01vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LWxpYi5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1ubEZvcm1MaWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgQElucHV0KClcbiAgZmllbGRzITogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXTtcblxuICBASW5wdXQoKVxuICBtb2RlbDogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGhlbHBlck1vZGVsOiBhbnk7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IEZvcm1seUZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJSb2xlcyE6IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb3VudHJpZXMhOiBzdHJpbmdbXTtcblxuICBAT3V0cHV0KClcbiAgbm9PZlRhYnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KClcbiAgb2xkVmFsdWVzOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc2hvd09sZFZhbHVlcyE6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpXG4gIHNjb3JlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVByZXBhcmVkID0gZmFsc2U7XG4gIHRvdGFsVGFicyA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3Jpbmc6IFNjb3JpbmdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuYXBwbHlSZWFkb25seVRvRmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1QcmVwYXJlZCA9IHRydWU7XG4gICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVNpbmdsZU9wdGlvbkJ5RGVmYXVsdCh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy5mb3JtU3RhdGUsXG4gICAgICAgICAgc2hvd09sZFZhbHVlczogdGhpcy5zaG93T2xkVmFsdWVzLFxuICAgICAgICAgIG9sZFZhbHVlczogdGhpcy5vbGRWYWx1ZXMsXG4gICAgICAgICAgaGVscGVyTW9kZWw6IHRoaXMuaGVscGVyTW9kZWwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UobW9kZWw6IGFueSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2NvcmluZy51cGRhdGVTY29yZShtb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIHRoaXMuc2NvcmVDaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgc2V0QXV0b2NvbXBsZXRlU2luZ2xlT3B0aW9uQnlEZWZhdWx0KGZpZWxkczogYW55KSB7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbXUtc2VsZWN0LWF1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgZmllbGQuaG9va3MgPSB7XG4gICAgICAgICAgb25Jbml0OiAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIChvcHRpb25zIHx8IG9mKFtdKSkuc3Vic2NyaWJlKChvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbkJ5RGVmYXVsdChmb3JtQ29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVTaW5nbGVPcHRpb25CeURlZmF1bHQoZmllbGQuZmllbGRHcm91cCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2w6IGFueSwgZmllbGQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKGZvcm1Db250cm9sICYmIGZpZWxkLnByb3BzICYmIGZpZWxkLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShvcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZmllbGQucHJvcHMub3B0aW9uc0NoYW5nZT8uc3Vic2NyaWJlKCh1cGRhdGVkT3B0aW9uczogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHVwZGF0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBmb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHVwZGF0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ211LXRhYnMnKSB7XG4gICAgICAgIHRoaXMudG90YWxUYWJzID0gZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMubm9PZlRhYnMuZW1pdCh0aGlzLnRvdGFsVGFicyk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhcbiAgICBmaWVsZHM6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW11cbiAgKTogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLnByb3BzID0ge1xuICAgICAgICAgIC4uLihmaWVsZC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoZmllbGRzOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZ1tdKSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiAhZmllbGQudmlzc2libGVDb3VudHJpZXMpIHtcbiAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwID0gdGhpcy5maWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoXG4gICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBoYXNWYWxpZFJvbGUgPSBmaWVsZC52aXNzaWJsZVJvbGVzXG4gICAgICAgIC8vICAgPyBmaWVsZC52aXNzaWJsZVJvbGVzLnNvbWUoKHJvbGU6IGFueSkgPT4gdGhpcy51c2VyUm9sZXM/LmluY2x1ZGVzKHJvbGUpKVxuICAgICAgICAvLyAgIDogdHJ1ZTtcbiAgICAgICAgLy8gY29uc3QgaGFzVmFsaWRDb3VudHJ5ID0gZmllbGQudmlzc2libGVDb3VudHJpZXNcbiAgICAgICAgLy8gICA/IGZpZWxkLnZpc3NpYmxlQ291bnRyaWVzLnNvbWUoKGNvdW50cnk6IGFueSkgPT4gdGhpcy51c2VyQ291bnRyaWVzPy5pbmNsdWRlcyhjb3VudHJ5KSlcbiAgICAgICAgLy8gICA6IHRydWU7XG5cbiAgICAgICAgY29uc3QgdmFsaWRHcm91cCA9IGZpZWxkO1xuICAgICAgICBpZiAodmFsaWRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKFxuICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkR3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZEdyb3VwICYmIGZpZWxkLnByb3BzPy5yZXF1aXJlZCkge1xuICAgICAgICAgIGZpZWxkLnByb3BzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkR3JvdXA7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQgIT09IG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0aW9uc0ZvckZpbHRlcmVkRmllbGRzKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSkpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woZmllbGQua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmKGZvcm1QcmVwYXJlZCkge1xuPGZvcm1seS1mb3JtXG4gIFtmb3JtXT1cImZvcm1cIlxuICBbZmllbGRzXT1cImZpZWxkc1wiXG4gIFttb2RlbF09XCJtb2RlbFwiXG4gIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAobW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgY2xhc3M9XCJtbmwtZm9ybWx5LWZvcm1cIlxuPjwvZm9ybWx5LWZvcm0+XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component } from '@angular/core';
3
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatNativeDateModule } from '@angular/material/core';
5
5
  import { MatDatepickerModule } from '@angular/material/datepicker';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
@@ -23,17 +23,43 @@ export class MnlFormHelperTextInputComponent extends FieldType {
23
23
  get defaultHelperText() {
24
24
  return this.to['helperProps']?.['defaultHelperText'] || '';
25
25
  }
26
- get currentValue() {
26
+ // Get value from primary model (answers)
27
+ get originalValue() {
27
28
  const fieldKey = this.field.key;
28
29
  return this.field.model?.[fieldKey];
29
30
  }
31
+ // Get/Set value from secondary model (helper)
32
+ get helperModel() {
33
+ return (this.to['helperModel'] ||
34
+ this.props['helperModel'] ||
35
+ this.options?.formState?.['helperModel']);
36
+ }
37
+ get helperKey() {
38
+ return this.to['helperKey'] || this.field.key;
39
+ }
40
+ get currentHelperValue() {
41
+ if (this.helperModel && this.helperKey) {
42
+ return this.helperModel[this.helperKey];
43
+ }
44
+ return '';
45
+ }
46
+ set currentHelperValue(value) {
47
+ if (this.helperModel && this.helperKey) {
48
+ this.helperModel[this.helperKey] = value;
49
+ }
50
+ }
30
51
  constructor(cdr) {
31
52
  super();
32
53
  this.cdr = cdr;
33
54
  this.checked = false;
34
55
  }
35
56
  ngOnInit() {
36
- this.originalValue = this.currentValue;
57
+ // Initialize helper form control with value from helper model
58
+ this.helperFormControl = new FormControl(this.currentHelperValue || '');
59
+ // Subscribe to changes in helper form control and update helper model
60
+ this.helperFormControl.valueChanges.subscribe((value) => {
61
+ this.currentHelperValue = value;
62
+ });
37
63
  this.setupDefaultField();
38
64
  if (this.to['enableHelper']) {
39
65
  this.setCorrectValue();
@@ -43,7 +69,14 @@ export class MnlFormHelperTextInputComponent extends FieldType {
43
69
  toggleSlide() {
44
70
  this.checked = !this.checked;
45
71
  if (this.checked) {
46
- this.formControl?.setValue(this.defaultHelperText);
72
+ // When toggle is opened, check if helper field is empty
73
+ const currenthelper = this.helperFormControl.value;
74
+ if (!currenthelper || currenthelper.trim() === '') {
75
+ this.helperFormControl.setValue(this.defaultHelperText);
76
+ }
77
+ }
78
+ else {
79
+ this.helperFormControl.setValue('');
47
80
  }
48
81
  this.cdr.detectChanges();
49
82
  }
@@ -54,7 +87,6 @@ export class MnlFormHelperTextInputComponent extends FieldType {
54
87
  ...fieldConfig,
55
88
  key: this.field.key || fieldConfig.key || 'defaultKey',
56
89
  formControl: this.formControl,
57
- // Add required properties that formly expects
58
90
  modelOptions: fieldConfig.modelOptions || this.field.modelOptions || {},
59
91
  validators: fieldConfig.validators || this.field.validators || {},
60
92
  asyncValidators: fieldConfig.asyncValidators || this.field.asyncValidators || {},
@@ -65,7 +97,6 @@ export class MnlFormHelperTextInputComponent extends FieldType {
65
97
  fieldGroupClassName: fieldConfig.fieldGroupClassName ||
66
98
  this.field.fieldGroupClassName ||
67
99
  '',
68
- // Inherit parent field's form and model
69
100
  parent: this.field.parent,
70
101
  options: this.field.options,
71
102
  model: this.field.model,
@@ -78,12 +109,12 @@ export class MnlFormHelperTextInputComponent extends FieldType {
78
109
  switch (this.to['scoring']?.['criteria']) {
79
110
  case 'exactMatch':
80
111
  if (Array.isArray(this.to['scoring']?.['answer']) &&
81
- !this.to['scoring']?.['answer'].includes(this.currentValue)) {
112
+ !this.to['scoring']?.['answer'].includes(this.originalValue)) {
82
113
  this.checked = true;
83
114
  }
84
115
  break;
85
116
  case 'range':
86
- const answer = this.currentValue;
117
+ const answer = this.originalValue;
87
118
  const num = typeof answer === 'number' ? answer : Number(answer);
88
119
  const correct = Number.isFinite(num) &&
89
120
  num >= this.to['scoring']?.['answer'].min &&
@@ -95,24 +126,41 @@ export class MnlFormHelperTextInputComponent extends FieldType {
95
126
  }
96
127
  }
97
128
  setCorrectValue() {
129
+ const currentHelperValue = this.currentHelperValue;
130
+ // If helper already has a value (user edited), don't override
131
+ if (currentHelperValue && currentHelperValue.trim() !== '') {
132
+ return;
133
+ }
98
134
  switch (this.to['scoring']?.['criteria']) {
99
135
  case 'attempted':
100
- this.formControl?.setValue(this.defaultHelperText);
136
+ // For attempted, set defaultHelperText
137
+ this.helperFormControl.setValue('');
101
138
  break;
102
139
  case 'exactMatch':
103
- if (Array.isArray(this.to['scoring']?.['answer']) &&
104
- !this.to['scoring']?.['answer'].includes(this.originalValue)) {
105
- this.formControl?.setValue(this.defaultHelperText);
140
+ if (Array.isArray(this.to['scoring']?.['answer'])) {
141
+ if (this.to['scoring']?.['answer'].includes(this.originalValue)) {
142
+ // Answer is correct - set empty value in helper
143
+ this.helperFormControl.setValue('');
144
+ }
145
+ else {
146
+ // Answer is incorrect - set defaultHelperText in helper
147
+ this.helperFormControl.setValue(this.defaultHelperText);
148
+ }
106
149
  }
107
150
  break;
108
151
  case 'range':
109
- const answer = this.currentValue;
152
+ const answer = this.originalValue;
110
153
  const num = typeof answer === 'number' ? answer : Number(answer);
111
154
  const correct = Number.isFinite(num) &&
112
155
  num >= this.to['scoring']?.['answer'].min &&
113
156
  num <= this.to['scoring']?.['answer'].max;
114
- if (!correct) {
115
- this.formControl?.setValue(this.defaultHelperText);
157
+ if (correct) {
158
+ // Answer is correct - set empty value in helper
159
+ this.helperFormControl.setValue('');
160
+ }
161
+ else {
162
+ // Answer is incorrect - set defaultHelperText in helper
163
+ this.helperFormControl.setValue(this.defaultHelperText);
116
164
  }
117
165
  break;
118
166
  default:
@@ -137,8 +185,7 @@ export class MnlFormHelperTextInputComponent extends FieldType {
137
185
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
138
186
  <textarea
139
187
  matInput
140
- [formControl]="formControl"
141
- [formlyAttributes]="field"
188
+ [formControl]="helperFormControl"
142
189
  [readonly]="to['readonly']"
143
190
  >
144
191
  </textarea>
@@ -151,7 +198,7 @@ export class MnlFormHelperTextInputComponent extends FieldType {
151
198
  </formly-field>
152
199
  </div>
153
200
  </div>
154
- `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "directive", type: i4.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
201
+ `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
155
202
  }
156
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormHelperTextInputComponent, decorators: [{
157
204
  type: Component,
@@ -183,8 +230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
183
230
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
184
231
  <textarea
185
232
  matInput
186
- [formControl]="formControl"
187
- [formlyAttributes]="field"
233
+ [formControl]="helperFormControl"
188
234
  [readonly]="to['readonly']"
189
235
  >
190
236
  </textarea>
@@ -199,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
199
245
  </div>
200
246
  `, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"] }]
201
247
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXUtaGVscGVyLXRleHQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvbXUtaGVscGVyLXRleHQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUdMLFlBQVksR0FDYixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7QUF1RWpELE1BQU0sT0FBTywrQkFDWCxTQUFRLFNBQTBCO0lBSWxDLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7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Q0FBQzsrR0FoSVUsK0JBQStCO21HQUEvQiwrQkFBK0IsaUdBdERoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCwrUkExQ0MsWUFBWSxrSUFDWixjQUFjLHNuQkFDZCxZQUFZLCtPQUNaLG1CQUFtQix5a0JBQ25CLFdBQVcsc1BBQ1gsa0JBQWtCLDhCQUNsQixvQkFBb0IseVhBQ3BCLGVBQWUsOEJBQ2YsbUJBQW1CLDhCQUNuQixtQkFBbUI7OzRGQXdEViwrQkFBK0I7a0JBckUzQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHtcbiAgRmllbGRUeXBlQ29uZmlnLFxuICBGb3JtbHlGaWVsZENvbmZpZyxcbiAgRm9ybWx5TW9kdWxlLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXUtaGVscGVyLXRleHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJoZWxwZXItdGV4dC1jb250YWluZXJcIj5cbiAgICAgIDwhLS0gSGVscGVyIE1vZGUgLSBTaG93IHRvZ2dsZSBhbmQgY29uZGl0aW9uYWwgY29udGVudCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJ0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyB0by5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3JpZ2luYWxWYWx1ZVwiIGNsYXNzPVwiZmxleC1yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuc3dlclwiPnt7IG9yaWdpbmFsVmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tlZFwiXG4gICAgICAgICAgICAodG9nZ2xlQ2hhbmdlKT1cInRvZ2dsZVNsaWRlKClcIlxuICAgICAgICAgICAgPnt7IGhlbHBlckxhYmVsIH19PC9tYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZXh0YXJlYVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJjaGVja2VkXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJ0b1sncmVhZG9ubHknXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZWZhdWx0IE1vZGUgLSBTaG93IGZpZWxkIGRpcmVjdGx5IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiF0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPGZvcm1seS1maWVsZCAqbmdJZj1cImRlZmF1bHRGaWVsZENvbmZpZ1wiIFtmaWVsZF09XCJkZWZhdWx0RmllbGRDb25maWdcIj5cbiAgICAgICAgPC9mb3JtbHktZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgIC5oZWxwZXItdGV4dC1jb250YWluZXJ7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgfVxuICAgICAuYW5zd2Vye1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICB9XG4gICAgICAudGV4dGFyZWF7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgIH1cbiAgICAgLmZsZXgtcm93e1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgIH1cbiAgICAgLnctZnVsbHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE1ubEZvcm1IZWxwZXJUZXh0SW5wdXRDb21wb25lbnRcbiAgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBjaGVja2VkID0gZmFsc2U7XG4gIGdldCBoZWxwZXJMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50b1snaGVscGVyUHJvcHMnXT8uWydoZWxwZXJMYWJlbCddIHx8ICdOZWVkIGhlbHA/JztcbiAgfVxuICBnZXQgZGVmYXVsdEhlbHBlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9bJ2hlbHBlclByb3BzJ10/LlsnZGVmYXVsdEhlbHBlclRleHQnXSB8fCAnJztcbiAgfVxuICBnZXQgY3VycmVudFZhbHVlKCkge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xuICAgIHJldHVybiB0aGlzLmZpZWxkLm1vZGVsPy5bZmllbGRLZXldO1xuICB9XG4gIG9yaWdpbmFsVmFsdWU6IGFueTtcbiAgZGVmYXVsdEZpZWxkQ29uZmlnPzogRm9ybWx5RmllbGRDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3JpZ2luYWxWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlOyAgICBcbiAgICB0aGlzLnNldHVwRGVmYXVsdEZpZWxkKCk7XG4gICAgaWYgKHRoaXMudG9bJ2VuYWJsZUhlbHBlciddKSB7XG4gICAgICB0aGlzLnNldENvcnJlY3RWYWx1ZSgpO1xuICAgICAgdGhpcy5kZXRlcm1pbmVJbml0aWFsU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTbGlkZSgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgIGlmKHRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldHVwRGVmYXVsdEZpZWxkKCkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy50b1snZGVmYXVsdEZpZWxkQ29uZmlnJ107XG4gICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgLi4uZmllbGRDb25maWcsXG4gICAgICAgIGtleTogdGhpcy5maWVsZC5rZXkgfHwgZmllbGRDb25maWcua2V5IHx8ICdkZWZhdWx0S2V5JyxcbiAgICAgICAgZm9ybUNvbnRyb2w6IHRoaXMuZm9ybUNvbnRyb2wsXG4gICAgICAgIC8vIEFkZCByZXF1aXJlZCBwcm9wZXJ0aWVzIHRoYXQgZm9ybWx5IGV4cGVjdHNcbiAgICAgICAgbW9kZWxPcHRpb25zOiBmaWVsZENvbmZpZy5tb2RlbE9wdGlvbnMgfHwgdGhpcy5maWVsZC5tb2RlbE9wdGlvbnMgfHwge30sXG4gICAgICAgIHZhbGlkYXRvcnM6IGZpZWxkQ29uZmlnLnZhbGlkYXRvcnMgfHwgdGhpcy5maWVsZC52YWxpZGF0b3JzIHx8IHt9LFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnM6XG4gICAgICAgICAgZmllbGRDb25maWcuYXN5bmNWYWxpZGF0b3JzIHx8IHRoaXMuZmllbGQuYXN5bmNWYWxpZGF0b3JzIHx8IHt9LFxuICAgICAgICBob29rczogZmllbGRDb25maWcuaG9va3MgfHwgdGhpcy5maWVsZC5ob29rcyB8fCB7fSxcbiAgICAgICAgZXhwcmVzc2lvbnM6IGZpZWxkQ29uZmlnLmV4cHJlc3Npb25zIHx8IHRoaXMuZmllbGQuZXhwcmVzc2lvbnMgfHwge30sXG4gICAgICAgIGhpZGU6IGZpZWxkQ29uZmlnLmhpZGUgIT09IHVuZGVmaW5lZCA/IGZpZWxkQ29uZmlnLmhpZGUgOiBmYWxzZSxcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZENvbmZpZy5jbGFzc05hbWUgfHwgdGhpcy5maWVsZC5jbGFzc05hbWUgfHwgJycsXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6XG4gICAgICAgICAgZmllbGRDb25maWcuZmllbGRHcm91cENsYXNzTmFtZSB8fFxuICAgICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cENsYXNzTmFtZSB8fFxuICAgICAgICAgICcnLFxuICAgICAgICAvLyBJbmhlcml0IHBhcmVudCBmaWVsZCdzIGZvcm0gYW5kIG1vZGVsXG4gICAgICAgIHBhcmVudDogdGhpcy5maWVsZC5wYXJlbnQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZmllbGQub3B0aW9ucyxcbiAgICAgICAgbW9kZWw6IHRoaXMuZmllbGQubW9kZWwsXG4gICAgICAgIGZvcm06IHRoaXMuZmllbGQuZm9ybSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZGV0ZXJtaW5lSW5pdGlhbFN0YXRlKCkge1xuICAgIC8vIEF1dG8tb3BlbiBoZWxwZXIgYmFzZWQgb24gc2NvcmluZyBjcml0ZXJpYVxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pICYmXG4gICAgICAgICAgIXRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgbnVtID0gdHlwZW9mIGFuc3dlciA9PT0gJ251bWJlcicgPyBhbnN3ZXIgOiBOdW1iZXIoYW5zd2VyKTtcblxuICAgICAgICBjb25zdCBjb3JyZWN0ID1cbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJlxuICAgICAgICAgIG51bSA+PSB0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10ubWluICYmXG4gICAgICAgICAgbnVtIDw9IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5tYXg7XG5cbiAgICAgICAgaWYgKCFjb3JyZWN0KSB7XG4gICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRDb3JyZWN0VmFsdWUoKSB7XG4gICAgc3dpdGNoICh0aGlzLnRvWydzY29yaW5nJ10/LlsnY3JpdGVyaWEnXSkge1xuICAgICAgY2FzZSAnYXR0ZW1wdGVkJzpcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdleGFjdE1hdGNoJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddKSAmJlxuICAgICAgICAgICF0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10uaW5jbHVkZXModGhpcy5vcmlnaW5hbFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgbnVtID0gdHlwZW9mIGFuc3dlciA9PT0gJ251bWJlcicgPyBhbnN3ZXIgOiBOdW1iZXIoYW5zd2VyKTtcblxuICAgICAgICBjb25zdCBjb3JyZWN0ID1cbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJlxuICAgICAgICAgIG51bSA+PSB0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10ubWluICYmXG4gICAgICAgICAgbnVtIDw9IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5tYXg7XG5cbiAgICAgICAgaWYgKCFjb3JyZWN0KSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIl19
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXUtaGVscGVyLXRleHQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvbXUtaGVscGVyLXRleHQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFHTCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBc0VqRCxNQUFNLE9BQU8sK0JBQ1gsU0FBUSxTQUEwQjtJQU1sQyxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxZQUFZLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxhQUFhO1FBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFhLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxDQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBbUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLGtCQUFrQixDQUFDLEtBQVU7UUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFtQixDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBSUQsWUFBb0IsR0FBc0I7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVDMUMsWUFBTyxHQUFHLEtBQUssQ0FBQztJQThDaEIsQ0FBQztJQUVELFFBQVE7UUFDTiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RSxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLHdEQUF3RDtZQUN4RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRztnQkFDeEIsR0FBRyxXQUFXO2dCQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLFlBQVk7Z0JBQ3RELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRTtnQkFDdkUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDakUsZUFBZSxFQUNiLFdBQVcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRTtnQkFDakUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDbEQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDcEUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUMvRCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFO2dCQUM5RCxtQkFBbUIsRUFDakIsV0FBVyxDQUFDLG1CQUFtQjtvQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7b0JBQzlCLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUN0QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsNkNBQTZDO1FBQzdDLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekMsS0FBSyxZQUFZO2dCQUNmLElBQ0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzVELENBQUM7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssT0FBTztnQkFDVixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVqRSxNQUFNLE9BQU8sR0FDWCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDcEIsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHO29CQUN6QyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUVuRCw4REFBOEQ7UUFDOUQsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxPQUFPO1FBQ1QsQ0FBQztRQUVELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekMsS0FBSyxXQUFXO2dCQUNkLHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUVSLEtBQUssWUFBWTtnQkFDZixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3dCQUNoRSxnREFBZ0Q7d0JBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix3REFBd0Q7d0JBQ3hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxPQUFPO2dCQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRWpFLE1BQU0sT0FBTyxHQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUNwQixHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUc7b0JBQ3pDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUU1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLGdEQUFnRDtvQkFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLHdEQUF3RDtvQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDOytHQXpMVSwrQkFBK0I7bUdBQS9CLCtCQUErQixpR0FyRGhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QlQsK1JBekNDLFlBQVksa0lBQ1osY0FBYyxzbkJBQ2QsWUFBWSx3SEFDWixtQkFBbUIseWtCQUNuQixXQUFXLHNQQUNYLGtCQUFrQiw4QkFDbEIsb0JBQW9CLHlYQUNwQixlQUFlLDhCQUNmLG1CQUFtQiw4QkFDbkIsbUJBQW1COzs0RkF1RFYsK0JBQStCO2tCQXBFM0MsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3FCQUNwQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7XG4gIEZpZWxkVHlwZUNvbmZpZyxcbiAgRm9ybWx5RmllbGRDb25maWcsXG4gIEZvcm1seU1vZHVsZSxcbn0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ211LWhlbHBlci10ZXh0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaGVscGVyLXRleHQtY29udGFpbmVyXCI+XG4gICAgICA8IS0tIEhlbHBlciBNb2RlIC0gU2hvdyB0b2dnbGUgYW5kIGNvbmRpdGlvbmFsIGNvbnRlbnQgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwidG9bJ2VuYWJsZUhlbHBlciddXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgdG8ubGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9yaWdpbmFsVmFsdWVcIiBjbGFzcz1cImZsZXgtcm93XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbnN3ZXJcIj57eyBvcmlnaW5hbFZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKHRvZ2dsZUNoYW5nZSk9XCJ0b2dnbGVTbGlkZSgpXCJcbiAgICAgICAgICAgID57eyBoZWxwZXJMYWJlbCB9fTwvbWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidGV4dGFyZWFcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJoZWxwZXJGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwidG9bJ3JlYWRvbmx5J11cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGVmYXVsdCBNb2RlIC0gU2hvdyBmaWVsZCBkaXJlY3RseSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhdG9bJ2VuYWJsZUhlbHBlciddXCI+XG4gICAgICAgIDxmb3JtbHktZmllbGQgKm5nSWY9XCJkZWZhdWx0RmllbGRDb25maWdcIiBbZmllbGRdPVwiZGVmYXVsdEZpZWxkQ29uZmlnXCI+XG4gICAgICAgIDwvZm9ybWx5LWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogYFxuICAgICAuaGVscGVyLXRleHQtY29udGFpbmVye1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgIH1cbiAgICAgLmFuc3dlcntcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgfVxuICAgICAgLnRleHRhcmVhe1xuICAgICAgbWFyZ2luOiAwcHggIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICB9XG4gICAgIC5mbGV4LXJvd3tcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICB9XG4gICAgIC53LWZ1bGx7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBNbmxGb3JtSGVscGVyVGV4dElucHV0Q29tcG9uZW50XG4gIGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgY2hlY2tlZCA9IGZhbHNlO1xuICBoZWxwZXJGb3JtQ29udHJvbCE6IEZvcm1Db250cm9sOyAvLyBTZXBhcmF0ZSBmb3JtIGNvbnRyb2wgZm9yIGhlbHBlciBtb2RlbFxuXG4gIGdldCBoZWxwZXJMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50b1snaGVscGVyUHJvcHMnXT8uWydoZWxwZXJMYWJlbCddIHx8ICdOZWVkIGhlbHA/JztcbiAgfVxuICBnZXQgZGVmYXVsdEhlbHBlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9bJ2hlbHBlclByb3BzJ10/LlsnZGVmYXVsdEhlbHBlclRleHQnXSB8fCAnJztcbiAgfVxuXG4gIC8vIEdldCB2YWx1ZSBmcm9tIHByaW1hcnkgbW9kZWwgKGFuc3dlcnMpXG4gIGdldCBvcmlnaW5hbFZhbHVlKCkge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xuICAgIHJldHVybiB0aGlzLmZpZWxkLm1vZGVsPy5bZmllbGRLZXldO1xuICB9XG5cbiAgLy8gR2V0L1NldCB2YWx1ZSBmcm9tIHNlY29uZGFyeSBtb2RlbCAoaGVscGVyKVxuICBnZXQgaGVscGVyTW9kZWwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG9bJ2hlbHBlck1vZGVsJ10gfHxcbiAgICAgIHRoaXMucHJvcHNbJ2hlbHBlck1vZGVsJ10gfHxcbiAgICAgIHRoaXMub3B0aW9ucz8uZm9ybVN0YXRlPy5bJ2hlbHBlck1vZGVsJ11cbiAgICApO1xuICB9XG5cbiAgZ2V0IGhlbHBlcktleSgpIHtcbiAgICByZXR1cm4gdGhpcy50b1snaGVscGVyS2V5J10gfHwgdGhpcy5maWVsZC5rZXk7XG4gIH1cblxuICBnZXQgY3VycmVudEhlbHBlclZhbHVlKCkge1xuICAgIGlmICh0aGlzLmhlbHBlck1vZGVsICYmIHRoaXMuaGVscGVyS2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWxwZXJNb2RlbFt0aGlzLmhlbHBlcktleSBhcyBzdHJpbmddO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzZXQgY3VycmVudEhlbHBlclZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5oZWxwZXJNb2RlbCAmJiB0aGlzLmhlbHBlcktleSkge1xuICAgICAgdGhpcy5oZWxwZXJNb2RlbFt0aGlzLmhlbHBlcktleSBhcyBzdHJpbmddID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdEZpZWxkQ29uZmlnPzogRm9ybWx5RmllbGRDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEluaXRpYWxpemUgaGVscGVyIGZvcm0gY29udHJvbCB3aXRoIHZhbHVlIGZyb20gaGVscGVyIG1vZGVsXG4gICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLmN1cnJlbnRIZWxwZXJWYWx1ZSB8fCAnJyk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBoZWxwZXIgZm9ybSBjb250cm9sIGFuZCB1cGRhdGUgaGVscGVyIG1vZGVsXG4gICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50SGVscGVyVmFsdWUgPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dXBEZWZhdWx0RmllbGQoKTtcblxuICAgIGlmICh0aGlzLnRvWydlbmFibGVIZWxwZXInXSkge1xuICAgICAgdGhpcy5zZXRDb3JyZWN0VmFsdWUoKTtcbiAgICAgIHRoaXMuZGV0ZXJtaW5lSW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU2xpZGUoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAvLyBXaGVuIHRvZ2dsZSBpcyBvcGVuZWQsIGNoZWNrIGlmIGhlbHBlciBmaWVsZCBpcyBlbXB0eVxuICAgICAgY29uc3QgY3VycmVudGhlbHBlciA9IHRoaXMuaGVscGVyRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoIWN1cnJlbnRoZWxwZXIgfHwgY3VycmVudGhlbHBlci50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzZXR1cERlZmF1bHRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMudG9bJ2RlZmF1bHRGaWVsZENvbmZpZyddO1xuICAgIGlmIChmaWVsZENvbmZpZykge1xuICAgICAgdGhpcy5kZWZhdWx0RmllbGRDb25maWcgPSB7XG4gICAgICAgIC4uLmZpZWxkQ29uZmlnLFxuICAgICAgICBrZXk6IHRoaXMuZmllbGQua2V5IHx8IGZpZWxkQ29uZmlnLmtleSB8fCAnZGVmYXVsdEtleScsXG4gICAgICAgIGZvcm1Db250cm9sOiB0aGlzLmZvcm1Db250cm9sLFxuICAgICAgICBtb2RlbE9wdGlvbnM6IGZpZWxkQ29uZmlnLm1vZGVsT3B0aW9ucyB8fCB0aGlzLmZpZWxkLm1vZGVsT3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdmFsaWRhdG9yczogZmllbGRDb25maWcudmFsaWRhdG9ycyB8fCB0aGlzLmZpZWxkLnZhbGlkYXRvcnMgfHwge30sXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yczpcbiAgICAgICAgICBmaWVsZENvbmZpZy5hc3luY1ZhbGlkYXRvcnMgfHwgdGhpcy5maWVsZC5hc3luY1ZhbGlkYXRvcnMgfHwge30sXG4gICAgICAgIGhvb2tzOiBmaWVsZENvbmZpZy5ob29rcyB8fCB0aGlzLmZpZWxkLmhvb2tzIHx8IHt9LFxuICAgICAgICBleHByZXNzaW9uczogZmllbGRDb25maWcuZXhwcmVzc2lvbnMgfHwgdGhpcy5maWVsZC5leHByZXNzaW9ucyB8fCB7fSxcbiAgICAgICAgaGlkZTogZmllbGRDb25maWcuaGlkZSAhPT0gdW5kZWZpbmVkID8gZmllbGRDb25maWcuaGlkZSA6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGZpZWxkQ29uZmlnLmNsYXNzTmFtZSB8fCB0aGlzLmZpZWxkLmNsYXNzTmFtZSB8fCAnJyxcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTpcbiAgICAgICAgICBmaWVsZENvbmZpZy5maWVsZEdyb3VwQ2xhc3NOYW1lIHx8XG4gICAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwQ2xhc3NOYW1lIHx8XG4gICAgICAgICAgJycsXG4gICAgICAgIHBhcmVudDogdGhpcy5maWVsZC5wYXJlbnQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZmllbGQub3B0aW9ucyxcbiAgICAgICAgbW9kZWw6IHRoaXMuZmllbGQubW9kZWwsXG4gICAgICAgIGZvcm06IHRoaXMuZmllbGQuZm9ybSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZGV0ZXJtaW5lSW5pdGlhbFN0YXRlKCkge1xuICAgIC8vIEF1dG8tb3BlbiBoZWxwZXIgYmFzZWQgb24gc2NvcmluZyBjcml0ZXJpYVxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pICYmXG4gICAgICAgICAgIXRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLm9yaWdpbmFsVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5vcmlnaW5hbFZhbHVlO1xuICAgICAgICBjb25zdCBudW0gPSB0eXBlb2YgYW5zd2VyID09PSAnbnVtYmVyJyA/IGFuc3dlciA6IE51bWJlcihhbnN3ZXIpO1xuXG4gICAgICAgIGNvbnN0IGNvcnJlY3QgPVxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShudW0pICYmXG4gICAgICAgICAgbnVtID49IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5taW4gJiZcbiAgICAgICAgICBudW0gPD0gdGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddLm1heDtcblxuICAgICAgICBpZiAoIWNvcnJlY3QpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldENvcnJlY3RWYWx1ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50SGVscGVyVmFsdWUgPSB0aGlzLmN1cnJlbnRIZWxwZXJWYWx1ZTtcblxuICAgIC8vIElmIGhlbHBlciBhbHJlYWR5IGhhcyBhIHZhbHVlICh1c2VyIGVkaXRlZCksIGRvbid0IG92ZXJyaWRlXG4gICAgaWYgKGN1cnJlbnRIZWxwZXJWYWx1ZSAmJiBjdXJyZW50SGVscGVyVmFsdWUudHJpbSgpICE9PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2F0dGVtcHRlZCc6XG4gICAgICAgIC8vIEZvciBhdHRlbXB0ZWQsIHNldCBkZWZhdWx0SGVscGVyVGV4dFxuICAgICAgICB0aGlzLmhlbHBlckZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pKSB7XG4gICAgICAgICAgaWYgKHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLm9yaWdpbmFsVmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBBbnN3ZXIgaXMgY29ycmVjdCAtIHNldCBlbXB0eSB2YWx1ZSBpbiBoZWxwZXJcbiAgICAgICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbnN3ZXIgaXMgaW5jb3JyZWN0IC0gc2V0IGRlZmF1bHRIZWxwZXJUZXh0IGluIGhlbHBlclxuICAgICAgICAgICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5vcmlnaW5hbFZhbHVlO1xuICAgICAgICBjb25zdCBudW0gPSB0eXBlb2YgYW5zd2VyID09PSAnbnVtYmVyJyA/IGFuc3dlciA6IE51bWJlcihhbnN3ZXIpO1xuXG4gICAgICAgIGNvbnN0IGNvcnJlY3QgPVxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShudW0pICYmXG4gICAgICAgICAgbnVtID49IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5taW4gJiZcbiAgICAgICAgICBudW0gPD0gdGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddLm1heDtcblxuICAgICAgICBpZiAoY29ycmVjdCkge1xuICAgICAgICAgIC8vIEFuc3dlciBpcyBjb3JyZWN0IC0gc2V0IGVtcHR5IHZhbHVlIGluIGhlbHBlclxuICAgICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuc3dlciBpcyBpbmNvcnJlY3QgLSBzZXQgZGVmYXVsdEhlbHBlclRleHQgaW4gaGVscGVyXG4gICAgICAgICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -4524,17 +4524,43 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4524
4524
  get defaultHelperText() {
4525
4525
  return this.to['helperProps']?.['defaultHelperText'] || '';
4526
4526
  }
4527
- get currentValue() {
4527
+ // Get value from primary model (answers)
4528
+ get originalValue() {
4528
4529
  const fieldKey = this.field.key;
4529
4530
  return this.field.model?.[fieldKey];
4530
4531
  }
4532
+ // Get/Set value from secondary model (helper)
4533
+ get helperModel() {
4534
+ return (this.to['helperModel'] ||
4535
+ this.props['helperModel'] ||
4536
+ this.options?.formState?.['helperModel']);
4537
+ }
4538
+ get helperKey() {
4539
+ return this.to['helperKey'] || this.field.key;
4540
+ }
4541
+ get currentHelperValue() {
4542
+ if (this.helperModel && this.helperKey) {
4543
+ return this.helperModel[this.helperKey];
4544
+ }
4545
+ return '';
4546
+ }
4547
+ set currentHelperValue(value) {
4548
+ if (this.helperModel && this.helperKey) {
4549
+ this.helperModel[this.helperKey] = value;
4550
+ }
4551
+ }
4531
4552
  constructor(cdr) {
4532
4553
  super();
4533
4554
  this.cdr = cdr;
4534
4555
  this.checked = false;
4535
4556
  }
4536
4557
  ngOnInit() {
4537
- this.originalValue = this.currentValue;
4558
+ // Initialize helper form control with value from helper model
4559
+ this.helperFormControl = new FormControl(this.currentHelperValue || '');
4560
+ // Subscribe to changes in helper form control and update helper model
4561
+ this.helperFormControl.valueChanges.subscribe((value) => {
4562
+ this.currentHelperValue = value;
4563
+ });
4538
4564
  this.setupDefaultField();
4539
4565
  if (this.to['enableHelper']) {
4540
4566
  this.setCorrectValue();
@@ -4544,7 +4570,14 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4544
4570
  toggleSlide() {
4545
4571
  this.checked = !this.checked;
4546
4572
  if (this.checked) {
4547
- this.formControl?.setValue(this.defaultHelperText);
4573
+ // When toggle is opened, check if helper field is empty
4574
+ const currenthelper = this.helperFormControl.value;
4575
+ if (!currenthelper || currenthelper.trim() === '') {
4576
+ this.helperFormControl.setValue(this.defaultHelperText);
4577
+ }
4578
+ }
4579
+ else {
4580
+ this.helperFormControl.setValue('');
4548
4581
  }
4549
4582
  this.cdr.detectChanges();
4550
4583
  }
@@ -4555,7 +4588,6 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4555
4588
  ...fieldConfig,
4556
4589
  key: this.field.key || fieldConfig.key || 'defaultKey',
4557
4590
  formControl: this.formControl,
4558
- // Add required properties that formly expects
4559
4591
  modelOptions: fieldConfig.modelOptions || this.field.modelOptions || {},
4560
4592
  validators: fieldConfig.validators || this.field.validators || {},
4561
4593
  asyncValidators: fieldConfig.asyncValidators || this.field.asyncValidators || {},
@@ -4566,7 +4598,6 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4566
4598
  fieldGroupClassName: fieldConfig.fieldGroupClassName ||
4567
4599
  this.field.fieldGroupClassName ||
4568
4600
  '',
4569
- // Inherit parent field's form and model
4570
4601
  parent: this.field.parent,
4571
4602
  options: this.field.options,
4572
4603
  model: this.field.model,
@@ -4579,12 +4610,12 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4579
4610
  switch (this.to['scoring']?.['criteria']) {
4580
4611
  case 'exactMatch':
4581
4612
  if (Array.isArray(this.to['scoring']?.['answer']) &&
4582
- !this.to['scoring']?.['answer'].includes(this.currentValue)) {
4613
+ !this.to['scoring']?.['answer'].includes(this.originalValue)) {
4583
4614
  this.checked = true;
4584
4615
  }
4585
4616
  break;
4586
4617
  case 'range':
4587
- const answer = this.currentValue;
4618
+ const answer = this.originalValue;
4588
4619
  const num = typeof answer === 'number' ? answer : Number(answer);
4589
4620
  const correct = Number.isFinite(num) &&
4590
4621
  num >= this.to['scoring']?.['answer'].min &&
@@ -4596,24 +4627,41 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4596
4627
  }
4597
4628
  }
4598
4629
  setCorrectValue() {
4630
+ const currentHelperValue = this.currentHelperValue;
4631
+ // If helper already has a value (user edited), don't override
4632
+ if (currentHelperValue && currentHelperValue.trim() !== '') {
4633
+ return;
4634
+ }
4599
4635
  switch (this.to['scoring']?.['criteria']) {
4600
4636
  case 'attempted':
4601
- this.formControl?.setValue(this.defaultHelperText);
4637
+ // For attempted, set defaultHelperText
4638
+ this.helperFormControl.setValue('');
4602
4639
  break;
4603
4640
  case 'exactMatch':
4604
- if (Array.isArray(this.to['scoring']?.['answer']) &&
4605
- !this.to['scoring']?.['answer'].includes(this.originalValue)) {
4606
- this.formControl?.setValue(this.defaultHelperText);
4641
+ if (Array.isArray(this.to['scoring']?.['answer'])) {
4642
+ if (this.to['scoring']?.['answer'].includes(this.originalValue)) {
4643
+ // Answer is correct - set empty value in helper
4644
+ this.helperFormControl.setValue('');
4645
+ }
4646
+ else {
4647
+ // Answer is incorrect - set defaultHelperText in helper
4648
+ this.helperFormControl.setValue(this.defaultHelperText);
4649
+ }
4607
4650
  }
4608
4651
  break;
4609
4652
  case 'range':
4610
- const answer = this.currentValue;
4653
+ const answer = this.originalValue;
4611
4654
  const num = typeof answer === 'number' ? answer : Number(answer);
4612
4655
  const correct = Number.isFinite(num) &&
4613
4656
  num >= this.to['scoring']?.['answer'].min &&
4614
4657
  num <= this.to['scoring']?.['answer'].max;
4615
- if (!correct) {
4616
- this.formControl?.setValue(this.defaultHelperText);
4658
+ if (correct) {
4659
+ // Answer is correct - set empty value in helper
4660
+ this.helperFormControl.setValue('');
4661
+ }
4662
+ else {
4663
+ // Answer is incorrect - set defaultHelperText in helper
4664
+ this.helperFormControl.setValue(this.defaultHelperText);
4617
4665
  }
4618
4666
  break;
4619
4667
  default:
@@ -4638,8 +4686,7 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4638
4686
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
4639
4687
  <textarea
4640
4688
  matInput
4641
- [formControl]="formControl"
4642
- [formlyAttributes]="field"
4689
+ [formControl]="helperFormControl"
4643
4690
  [readonly]="to['readonly']"
4644
4691
  >
4645
4692
  </textarea>
@@ -4652,7 +4699,7 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4652
4699
  </formly-field>
4653
4700
  </div>
4654
4701
  </div>
4655
- `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
4702
+ `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
4656
4703
  }
4657
4704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormHelperTextInputComponent, decorators: [{
4658
4705
  type: Component,
@@ -4684,8 +4731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4684
4731
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
4685
4732
  <textarea
4686
4733
  matInput
4687
- [formControl]="formControl"
4688
- [formlyAttributes]="field"
4734
+ [formControl]="helperFormControl"
4689
4735
  [readonly]="to['readonly']"
4690
4736
  >
4691
4737
  </textarea>
@@ -4918,6 +4964,7 @@ class MnlFormLibComponent {
4918
4964
  ...this.options.formState,
4919
4965
  showOldValues: this.showOldValues,
4920
4966
  oldValues: this.oldValues,
4967
+ helperModel: this.helperModel,
4921
4968
  },
4922
4969
  };
4923
4970
  }
@@ -5023,7 +5070,7 @@ class MnlFormLibComponent {
5023
5070
  });
5024
5071
  }
5025
5072
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, deps: [{ token: i1$2.TranslateService }, { token: ScoringService }], target: i0.ɵɵFactoryTarget.Component }); }
5026
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
5073
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", helperModel: "helperModel", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
5027
5074
  }
5028
5075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, decorators: [{
5029
5076
  type: Component,
@@ -5047,6 +5094,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5047
5094
  type: Input
5048
5095
  }], model: [{
5049
5096
  type: Input
5097
+ }], helperModel: [{
5098
+ type: Input
5050
5099
  }], options: [{
5051
5100
  type: Input
5052
5101
  }], userRoles: [{