ngx-dynamic-entity-builder 1.2.0 → 1.3.0

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.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { MatButtonModule } from '@angular/material/button';
@@ -117,11 +117,11 @@ export class RuleFormComponent {
117
117
  <button mat-raised-button color="primary" type="button" (click)="save.emit(rule)">Save Rule</button>
118
118
  </div>
119
119
  </div>
120
- `, isInline: true, styles: [".deb-rule-form{display:flex;flex-direction:column;gap:12px;background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;padding:16px}.deb-rule-form__title{margin:0 0 8px;font-size:16px;font-weight:600}.deb-full{width:100%}.deb-rule-section{display:flex;flex-direction:column;gap:8px}.deb-rule-section h4{margin:0;font-size:13px;font-weight:600;color:#555}.deb-rule-row{display:flex;gap:8px;align-items:center}.deb-rule-row>*{flex:1}.deb-rule-form__actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { 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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] });
120
+ `, isInline: true, styles: [".deb-rule-form{display:flex;flex-direction:column;gap:12px;background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;padding:16px}.deb-rule-form__title{margin:0 0 8px;font-size:16px;font-weight:600}.deb-full{width:100%}.deb-rule-section{display:flex;flex-direction:column;gap:8px}.deb-rule-section h4{margin:0;font-size:13px;font-weight:600;color:#555}.deb-rule-row{display:flex;gap:8px;align-items:center}.deb-rule-row>*{flex:1}.deb-rule-form__actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { 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: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
121
121
  }
122
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RuleFormComponent, decorators: [{
123
123
  type: Component,
124
- args: [{ selector: 'ngx-rule-form', standalone: true, imports: [
124
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-rule-form', standalone: true, imports: [
125
125
  CommonModule,
126
126
  FormsModule,
127
127
  MatButtonModule,
@@ -198,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
198
198
  }], cancel: [{
199
199
  type: Output
200
200
  }] } });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ydWxlLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQUkzRDs7R0FFRztBQTBISCxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLElBQUksR0FBYTtRQUN4QixZQUFZLEVBQUUsUUFBUTtRQUN0QixPQUFPLEVBQUUsRUFBRTtRQUNYLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUMsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxDQUFDO0tBQ1osQ0FBQztJQUVRLElBQUksR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRW5DLFNBQVMsR0FBbUI7UUFDbkMsT0FBTztRQUNQLFdBQVc7UUFDWCxVQUFVO1FBQ1YsY0FBYztRQUNkLGFBQWE7UUFDYixXQUFXO1FBQ1gsVUFBVTtRQUNWLGNBQWM7UUFDZCxXQUFXO1FBQ1gsV0FBVztRQUNYLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLFlBQVk7UUFDWixJQUFJO1FBQ0osUUFBUTtRQUNSLFdBQVc7UUFDWCxlQUFlO0tBQ2hCLENBQUM7SUFFRixZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBekNVLGlCQUFpQjs0RkFBakIsaUJBQWlCLGdKQTdHbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2RFQsaWxCQXJFQyxZQUFZLDhCQUNaLFdBQVcsOG1CQUNYLGVBQWUsd1VBQ2Ysa0JBQWtCLDBTQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZTs7NEZBK0dOLGlCQUFpQjtrQkF6SDdCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxlQUFlO3FCQUNoQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRUOzhCQWlEUSxJQUFJO3NCQUFaLEtBQUs7Z0JBVUksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB0eXBlIHsgRm9ybVJ1bGUsIFJ1bGVPcGVyYXRvciB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuLyoqXG4gKiBSdWxlRm9ybUNvbXBvbmVudCDigJQgZGlhbG9nL3BhbmVsIGZvcm0gZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgYSBGb3JtUnVsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXJ1bGUtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGViLXJ1bGUtZm9ybVwiPlxuICAgICAgPGgzIGNsYXNzPVwiZGViLXJ1bGUtZm9ybV9fdGl0bGVcIj57eyBydWxlLmlkID8gJ0VkaXQgUnVsZScgOiAnTmV3IEZvcm0gUnVsZScgfX08L2gzPlxuXG4gICAgICA8IS0tIFRyaWdnZXIgRmllbGQgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZnVsbFwiPlxuICAgICAgICA8bWF0LWxhYmVsPlRyaWdnZXIgRmllbGQgSUQ8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicnVsZS5maWVsZElkXCIgcGxhY2Vob2xkZXI9XCJlLmcuIHN0YXR1c1wiIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8IS0tIENvbmRpdGlvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGViLXJ1bGUtc2VjdGlvblwiPlxuICAgICAgICA8aDQ+Q29uZGl0aW9uczwvaDQ+XG4gICAgICAgIEBmb3IgKGNvbmQgb2YgcnVsZS5jb25kaXRpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXJ1bGUtcm93XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+T3BlcmF0b3I8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJjb25kLm9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3Agb2Ygb3BlcmF0b3JzOyB0cmFjayBvcCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wXCI+e3sgb3AgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZhbHVlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImNvbmQudmFsdWVcIiBwbGFjZWhvbGRlcj1cIkNvbmRpdGlvbiB2YWx1ZVwiIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ3YXJuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVDb25kaXRpb24oJGluZGV4KVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkQ29uZGl0aW9uKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIENvbmRpdGlvblxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZWItcnVsZS1zZWN0aW9uXCI+XG4gICAgICAgIDxoND5BY3Rpb248L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXJ1bGUtcm93XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5BY3Rpb24gVHlwZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJydWxlLmFjdGlvbi50eXBlXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwidmlzaWJpbGl0eVwiPlZpc2liaWxpdHkgKFNob3cvSGlkZSk8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwidmFsaWRhdGlvblwiPlZhbGlkYXRpb24gTWVzc2FnZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJpbmZvXCI+SW5mbyBCYW5uZXI8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPlZhbHVlIC8gTWVzc2FnZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicnVsZS5hY3Rpb24udmFsdWVcIiBwbGFjZWhvbGRlcj1cImZhbHNlIHRvIGhpZGUsIG9yIG1lc3NhZ2UgdGV4dFwiIC8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRlYi1ydWxlLWZvcm1fX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsLmVtaXQoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZS5lbWl0KHJ1bGUpXCI+U2F2ZSBSdWxlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmRlYi1ydWxlLWZvcm0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgIH1cbiAgICAgIC5kZWItcnVsZS1mb3JtX190aXRsZSB7XG4gICAgICAgIG1hcmdpbjogMCAwIDhweCAwO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgICAuZGViLWZ1bGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5kZWItcnVsZS1zZWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtc2VjdGlvbiBoNCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogIzU1NTtcbiAgICAgIH1cbiAgICAgIC5kZWItcnVsZS1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZWItcnVsZS1yb3cgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICAgIC5kZWItcnVsZS1mb3JtX19hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSdWxlRm9ybUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHJ1bGU6IEZvcm1SdWxlID0ge1xuICAgIGZvcm1Db25maWdJZDogJ2Zvcm0tMScsXG4gICAgZmllbGRJZDogJycsXG4gICAgY29uZGl0aW9uczogW3sgb3BlcmF0b3I6ICdFUVVBTCcsIGNvbXBhcmVUeXBlOiAndmFsdWUnLCB2YWx1ZTogJycgfV0sXG4gICAgYWN0aW9uOiB7IHR5cGU6ICd2aXNpYmlsaXR5JywgdmFsdWU6IGZhbHNlIH0sXG4gICAgdGFyZ2V0czogW10sXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBwcmlvcml0eTogMSxcbiAgfTtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVJ1bGU+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgb3BlcmF0b3JzOiBSdWxlT3BlcmF0b3JbXSA9IFtcbiAgICAnRVFVQUwnLFxuICAgICdOT1RfRVFVQUwnLFxuICAgICdDT05UQUlOUycsXG4gICAgJ05PVF9DT05UQUlOUycsXG4gICAgJ1NUQVJUU19XSVRIJyxcbiAgICAnRU5EU19XSVRIJyxcbiAgICAnSVNfRU1QVFknLFxuICAgICdJU19OT1RfRU1QVFknLFxuICAgICdMRVNTX1RIQU4nLFxuICAgICdNT1JFX1RIQU4nLFxuICAgICdMRVNTX1RIQU5fRVFVQUwnLFxuICAgICdNT1JFX1RIQU5fRVFVQUwnLFxuICAgICdEQVRFX0JFRk9SRScsXG4gICAgJ0RBVEVfQUZURVInLFxuICAgICdJTicsXG4gICAgJ05PVF9JTicsXG4gICAgJ0hBU19JVEVNUycsXG4gICAgJ1ZBTFVFX0NIQU5HRUQnLFxuICBdO1xuXG4gIGFkZENvbmRpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUuY29uZGl0aW9ucy5wdXNoKHsgb3BlcmF0b3I6ICdFUVVBTCcsIGNvbXBhcmVUeXBlOiAndmFsdWUnLCB2YWx1ZTogJycgfSk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucnVsZS5jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cbiJdfQ==
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9ydWxlLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQUkzRDs7R0FFRztBQTJISCxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLElBQUksR0FBYTtRQUN4QixZQUFZLEVBQUUsUUFBUTtRQUN0QixPQUFPLEVBQUUsRUFBRTtRQUNYLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUMsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxDQUFDO0tBQ1osQ0FBQztJQUVRLElBQUksR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRW5DLFNBQVMsR0FBbUI7UUFDbkMsT0FBTztRQUNQLFdBQVc7UUFDWCxVQUFVO1FBQ1YsY0FBYztRQUNkLGFBQWE7UUFDYixXQUFXO1FBQ1gsVUFBVTtRQUNWLGNBQWM7UUFDZCxXQUFXO1FBQ1gsV0FBVztRQUNYLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLFlBQVk7UUFDWixJQUFJO1FBQ0osUUFBUTtRQUNSLFdBQVc7UUFDWCxlQUFlO0tBQ2hCLENBQUM7SUFFRixZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBekNVLGlCQUFpQjs0RkFBakIsaUJBQWlCLGdKQTdHbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2RFQsaWxCQXJFQyxZQUFZLDhCQUNaLFdBQVcsOG1CQUNYLGVBQWUsd1VBQ2Ysa0JBQWtCLDBTQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsZUFBZTs7NEZBK0dOLGlCQUFpQjtrQkExSDdCLFNBQVM7c0NBQ1MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7cUJBQ2hCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2RFQ7OEJBaURRLElBQUk7c0JBQVosS0FBSztnQkFVSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB0eXBlIHsgRm9ybVJ1bGUsIFJ1bGVPcGVyYXRvciB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuLyoqXG4gKiBSdWxlRm9ybUNvbXBvbmVudCDigJQgZGlhbG9nL3BhbmVsIGZvcm0gZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgYSBGb3JtUnVsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ25neC1ydWxlLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlYi1ydWxlLWZvcm1cIj5cbiAgICAgIDxoMyBjbGFzcz1cImRlYi1ydWxlLWZvcm1fX3RpdGxlXCI+e3sgcnVsZS5pZCA/ICdFZGl0IFJ1bGUnIDogJ05ldyBGb3JtIFJ1bGUnIH19PC9oMz5cblxuICAgICAgPCEtLSBUcmlnZ2VyIEZpZWxkIC0tPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgPG1hdC1sYWJlbD5UcmlnZ2VyIEZpZWxkIElEPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJ1bGUuZmllbGRJZFwiIHBsYWNlaG9sZGVyPVwiZS5nLiBzdGF0dXNcIiAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPCEtLSBDb25kaXRpb25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlYi1ydWxlLXNlY3Rpb25cIj5cbiAgICAgICAgPGg0PkNvbmRpdGlvbnM8L2g0PlxuICAgICAgICBAZm9yIChjb25kIG9mIHJ1bGUuY29uZGl0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlYi1ydWxlLXJvd1wiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk9wZXJhdG9yPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiY29uZC5vcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wIG9mIG9wZXJhdG9yczsgdHJhY2sgb3ApIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcFwiPnt7IG9wIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WYWx1ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJjb25kLnZhbHVlXCIgcGxhY2Vob2xkZXI9XCJDb25kaXRpb24gdmFsdWVcIiAvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKCRpbmRleClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZENvbmRpdGlvbigpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBDb25kaXRpb25cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGViLXJ1bGUtc2VjdGlvblwiPlxuICAgICAgICA8aDQ+QWN0aW9uPC9oND5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlYi1ydWxlLXJvd1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QWN0aW9uIFR5cGU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicnVsZS5hY3Rpb24udHlwZVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInZpc2liaWxpdHlcIj5WaXNpYmlsaXR5IChTaG93L0hpZGUpPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInZhbGlkYXRpb25cIj5WYWxpZGF0aW9uIE1lc3NhZ2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiaW5mb1wiPkluZm8gQmFubmVyPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5WYWx1ZSAvIE1lc3NhZ2U8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInJ1bGUuYWN0aW9uLnZhbHVlXCIgcGxhY2Vob2xkZXI9XCJmYWxzZSB0byBoaWRlLCBvciBtZXNzYWdlIHRleHRcIiAvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZWItcnVsZS1mb3JtX19hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUuZW1pdChydWxlKVwiPlNhdmUgUnVsZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5kZWItcnVsZS1mb3JtIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtZm9ybV9fdGl0bGUge1xuICAgICAgICBtYXJnaW46IDAgMCA4cHggMDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuICAgICAgLmRlYi1mdWxsIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtc2VjdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLmRlYi1ydWxlLXNlY3Rpb24gaDQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICM1NTU7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtcm93ID4gKiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG4gICAgICAuZGViLXJ1bGUtZm9ybV9fYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUnVsZUZvcm1Db21wb25lbnQge1xuICBASW5wdXQoKSBydWxlOiBGb3JtUnVsZSA9IHtcbiAgICBmb3JtQ29uZmlnSWQ6ICdmb3JtLTEnLFxuICAgIGZpZWxkSWQ6ICcnLFxuICAgIGNvbmRpdGlvbnM6IFt7IG9wZXJhdG9yOiAnRVFVQUwnLCBjb21wYXJlVHlwZTogJ3ZhbHVlJywgdmFsdWU6ICcnIH1dLFxuICAgIGFjdGlvbjogeyB0eXBlOiAndmlzaWJpbGl0eScsIHZhbHVlOiBmYWxzZSB9LFxuICAgIHRhcmdldHM6IFtdLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcHJpb3JpdHk6IDEsXG4gIH07XG5cbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1SdWxlPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IG9wZXJhdG9yczogUnVsZU9wZXJhdG9yW10gPSBbXG4gICAgJ0VRVUFMJyxcbiAgICAnTk9UX0VRVUFMJyxcbiAgICAnQ09OVEFJTlMnLFxuICAgICdOT1RfQ09OVEFJTlMnLFxuICAgICdTVEFSVFNfV0lUSCcsXG4gICAgJ0VORFNfV0lUSCcsXG4gICAgJ0lTX0VNUFRZJyxcbiAgICAnSVNfTk9UX0VNUFRZJyxcbiAgICAnTEVTU19USEFOJyxcbiAgICAnTU9SRV9USEFOJyxcbiAgICAnTEVTU19USEFOX0VRVUFMJyxcbiAgICAnTU9SRV9USEFOX0VRVUFMJyxcbiAgICAnREFURV9CRUZPUkUnLFxuICAgICdEQVRFX0FGVEVSJyxcbiAgICAnSU4nLFxuICAgICdOT1RfSU4nLFxuICAgICdIQVNfSVRFTVMnLFxuICAgICdWQUxVRV9DSEFOR0VEJyxcbiAgXTtcblxuICBhZGRDb25kaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5ydWxlLmNvbmRpdGlvbnMucHVzaCh7IG9wZXJhdG9yOiAnRVFVQUwnLCBjb21wYXJlVHlwZTogJ3ZhbHVlJywgdmFsdWU6ICcnIH0pO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUuY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { MatButtonModule } from '@angular/material/button';
4
4
  import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -194,11 +194,11 @@ export class TabManagerComponent {
194
194
  </div>
195
195
  }
196
196
  </div>
197
- `, isInline: true, styles: [".deb-tabs__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.deb-tab-card{border:1px solid var(--deb-border, #e5e7eb);border-radius:8px;padding:10px;margin-bottom:10px;background:var(--deb-bg-surface, #ffffff)}.deb-tab-card--system{border-left:4px solid var(--deb-accent, #6366f1)}.deb-tabs__row{display:flex;align-items:center;gap:4px}.deb-tab-settings{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin-top:8px;font-size:13px}.deb-tab-module{margin-top:8px}.deb-subtabs{margin-top:8px;padding-left:16px;border-left:2px dashed var(--deb-border, #e5e7eb)}.deb-subtabs__title{font-size:12px;font-weight:600;color:var(--deb-muted, #6b7280)}.deb-subtab-row{margin-top:6px}.deb-grow{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
197
+ `, isInline: true, styles: [".deb-tabs__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.deb-tab-card{border:1px solid var(--deb-border, #e5e7eb);border-radius:8px;padding:10px;margin-bottom:10px;background:var(--deb-bg-surface, #ffffff)}.deb-tab-card--system{border-left:4px solid var(--deb-accent, #6366f1)}.deb-tabs__row{display:flex;align-items:center;gap:4px}.deb-tab-settings{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin-top:8px;font-size:13px}.deb-tab-module{margin-top:8px}.deb-subtabs{margin-top:8px;padding-left:16px;border-left:2px dashed var(--deb-border, #e5e7eb)}.deb-subtabs__title{font-size:12px;font-weight:600;color:var(--deb-muted, #6b7280)}.deb-subtab-row{margin-top:6px}.deb-grow{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
198
198
  }
199
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabManagerComponent, decorators: [{
200
200
  type: Component,
201
- args: [{ selector: 'ngx-tab-manager', standalone: true, imports: [
201
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-tab-manager', standalone: true, imports: [
202
202
  FormsModule,
203
203
  MatButtonModule,
204
204
  MatCheckboxModule,
@@ -351,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
351
351
  </div>
352
352
  `, styles: [".deb-tabs__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.deb-tab-card{border:1px solid var(--deb-border, #e5e7eb);border-radius:8px;padding:10px;margin-bottom:10px;background:var(--deb-bg-surface, #ffffff)}.deb-tab-card--system{border-left:4px solid var(--deb-accent, #6366f1)}.deb-tabs__row{display:flex;align-items:center;gap:4px}.deb-tab-settings{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin-top:8px;font-size:13px}.deb-tab-module{margin-top:8px}.deb-subtabs{margin-top:8px;padding-left:16px;border-left:2px dashed var(--deb-border, #e5e7eb)}.deb-subtabs__title{font-size:12px;font-weight:600;color:var(--deb-muted, #6b7280)}.deb-subtab-row{margin-top:6px}.deb-grow{flex:1}\n"] }]
353
353
  }] });
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYi1tYW5hZ2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBRXhEOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFFbkM7O0dBRUc7QUFrTkgsTUFBTSxPQUFPLG1CQUFtQjtJQUNYLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsdUJBQXVCLEdBQUcsTUFBTSxDQUErQix1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5ILElBQUk7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVTLFFBQVEsQ0FBQyxHQUFvQjtRQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxVQUFVLENBQUMsR0FBb0I7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxvRkFBb0Y7WUFDcEYsb0ZBQW9GO1lBQ3BGLHlFQUF5RTtZQUN6RSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FyQlUsbUJBQW1COzRGQUFuQixtQkFBbUIsMkVBcE1wQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThJVCw4eUJBdkpDLFdBQVcsOG1CQUNYLGVBQWUsd1VBQ2YsaUJBQWlCLDZXQUNqQixrQkFBa0IsMFNBQ2xCLGFBQWEsbUxBQ2IsY0FBYywwV0FDZCxvQkFBb0IsOEJBQ3BCLGdCQUFnQjs7NEZBc01QLG1CQUFtQjtrQkFqTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3FCQUNqQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOElUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkVGFiQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQgfSBmcm9tICduZ3gtZHluYW1pYy1lbnRpdHknO1xuaW1wb3J0IHsgQnVpbGRlclN0b3JlIH0gZnJvbSAnLi4vYnVpbGRlci1zdG9yZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZS1leHBvcnRlZCBzbyBleGlzdGluZyBpbXBvcnRzIGZyb20gdGhpcyBwYWNrYWdlIGtlZXAgd29ya2luZy5cbiAqXG4gKiBUaGlzIGZpbGUgdXNlZCB0byBkZWNsYXJlIGl0cyBvd24gYG5ldyBJbmplY3Rpb25Ub2tlbignU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQnKWAgd2hpbGVcbiAqIGBuZ3gtZHluYW1pYy1lbnRpdHlgIGV4cG9ydGVkIGFub3RoZXIgdW5kZXIgdGhlIHNhbWUgbmFtZS4gSW5qZWN0aW9uVG9rZW4gaWRlbnRpdHkgaXMgYnlcbiAqIG9iamVjdCByZWZlcmVuY2UsIHNvIGEgY29uc3VtZXIgcHJvdmlkaW5nIHRoZSByZW5kZXJlcidzIOKAlCB0aGUgZG9jdW1lbnRlZCBvbmUg4oCUIHdhc1xuICogcHJvdmlkaW5nIGEgdG9rZW4gbm90aGluZyBpbmplY3RlZCwgYW5kIHRoZSBwcmVkaWNhdGUgc2lsZW50bHkgbmV2ZXIgcmFuLiBPbmUgdG9rZW4gbm93LFxuICogZGVmaW5lZCBpbiB0aGUgbG93ZXItbGV2ZWwgcGFja2FnZSB0aGF0IGJvdGggZGVwZW5kIG9uLlxuICovXG5leHBvcnQgeyBTWVNURU1fREVGQVVMVF9DQU5fRURJVCB9O1xuXG4vKipcbiAqIFRhYk1hbmFnZXJDb21wb25lbnQg4oCUIGFkZCAvIHJlbmFtZSAvIHJlb3JkZXIgLyByZW1vdmUgdGFicyAmIHN1Yi10YWJzIHdpdGggc3lzdGVtRGVmYXVsdCBwcm90ZWN0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdGFiLW1hbmFnZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlYi10YWJzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGViLXRhYnNfX2hlYWRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWItc2VjdGlvbi10aXRsZVwiPlRhYnMgTWFuYWdlcjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdG9yZS5hZGRUYWIoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgVGFiXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoc3RvcmUudGFicygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8cCBjbGFzcz1cImRlYi1oaW50XCI+Tm8gdGFicyDigJQgYWxsIGZpZWxkcyByZW5kZXIgaW4gYSBzaW5nbGUgc2VjdGlvbi48L3A+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKHRhYiBvZiBzdG9yZS50YWJzKCk7IHRyYWNrIHRhYi5pZDsgbGV0IGkgPSAkaW5kZXgsIGNvdW50ID0gJGNvdW50KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZWItdGFiLWNhcmRcIiBbY2xhc3MuZGViLXRhYi1jYXJkLS1zeXN0ZW1dPVwidGFiLnN5c3RlbURlZmF1bHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXRhYnNfX3Jvd1wiIFthdHRyLmRhdGEtdGVzdGlkXT1cIid0YWItcm93LScgKyB0YWIuaWRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cImRlYi1ncm93XCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgdGFiLmlkIH19IHt7IHRhYi5zeXN0ZW1EZWZhdWx0ID8gJyhTeXN0ZW0pJyA6ICcnIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRhYkxhYmVsKHRhYilcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN0b3JlLnNldFRhYkxhYmVsKHRhYi5pZCwgbGFuZygpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImkgPT09IDAgfHwgIWNhbkVkaXRUYWIodGFiKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzdG9yZS5tb3ZlVGFiKHRhYi5pZCwgLTEpXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgdXBcIiBhcmlhLWxhYmVsPVwiTW92ZSB0YWIgdXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpID09PSBjb3VudCAtIDEgfHwgIWNhbkVkaXRUYWIodGFiKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzdG9yZS5tb3ZlVGFiKHRhYi5pZCwgMSlcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTW92ZSBkb3duXCIgYXJpYS1sYWJlbD1cIk1vdmUgdGFiIGRvd25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcmUucmVtb3ZlVGFiKHRhYi5pZClcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIHRhYlwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgdGFiXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFiIHNldHRpbmdzIHJvdyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXRhYi1zZXR0aW5nc1wiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkVkaXRUYWIodGFiKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRhYi5mbGF0RGF0YVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN0b3JlLnVwZGF0ZVRhYih0YWIuaWQsIHsgZmxhdERhdGE6ICRldmVudCB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEZsYXQgRGF0YVxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidGFiLmlzUHJpbWFyeVRhYlwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIiRldmVudCA/IHN0b3JlLnNldFByaW1hcnlUYWIodGFiLmlkKSA6IHN0b3JlLnVwZGF0ZVRhYih0YWIuaWQsIHsgaXNQcmltYXJ5VGFiOiBmYWxzZSB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFByaW1hcnkgVGFiXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWIubWFza0RhdGFcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS51cGRhdGVUYWIodGFiLmlkLCB7IG1hc2tEYXRhOiAkZXZlbnQgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBNYXNrIFRhYiBEYXRhXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWIuc3lzdGVtRGVmYXVsdFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN0b3JlLnVwZGF0ZVRhYih0YWIuaWQsIHsgc3lzdGVtRGVmYXVsdDogJGV2ZW50IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU3lzdGVtIERlZmF1bHRcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkVkaXRUYWIodGFiKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzdG9yZS5hZGRTdWJUYWIodGFiLmlkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICsgU3ViLXRhYlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIE1vZHVsZSB0YWIgY29uZmlndXJhdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXRhYi1tb2R1bGVcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cImRlYi1ncm93XCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29uc3VtZXIgTW9kdWxlIE5hbWUgKE9wdGlvbmFsKTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBkb2N1bWVudHMtdmlld1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRhYi5tb2R1bGVOYW1lXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS51cGRhdGVUYWIodGFiLmlkLCB7IG1vZHVsZU5hbWU6ICRldmVudCB8fCB1bmRlZmluZWQgfSlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU3ViLXRhYnMgcmVjdXJzaXZlIHJlbmRlciAoTGV2ZWwgMikgLS0+XG4gICAgICAgICAgQGlmICh0YWIuY2hpbGRyZW4gJiYgdGFiLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWItc3VidGFic1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlYi1zdWJ0YWJzX190aXRsZVwiPlN1Yi10YWJzOjwvc3Bhbj5cbiAgICAgICAgICAgICAgQGZvciAoc3ViIG9mIHRhYi5jaGlsZHJlbjsgdHJhY2sgc3ViLmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlYi10YWJzX19yb3cgZGViLXN1YnRhYi1yb3dcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInc3VidGFiLXJvdy0nICsgc3ViLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZ3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IHN1Yi5pZCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYihzdWIpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWJMYWJlbChzdWIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRUYWJMYWJlbChzdWIuaWQsIGxhbmcoKSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYihzdWIpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0b3JlLnJlbW92ZVRhYihzdWIuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZSBzdWItdGFiXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSBzdWItdGFiXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmRlYi10YWJzX19oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLmRlYi10YWItY2FyZCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlYi1ib3JkZXIsICNlNWU3ZWIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRlYi1iZy1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIH1cbiAgICAgIC5kZWItdGFiLWNhcmQtLXN5c3RlbSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tZGViLWFjY2VudCwgIzYzNjZmMSk7XG4gICAgICB9XG4gICAgICAuZGViLXRhYnNfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgfVxuICAgICAgLmRlYi10YWItc2V0dGluZ3Mge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogOHB4IDE2cHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgfVxuICAgICAgLmRlYi10YWItbW9kdWxlIHtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgfVxuICAgICAgLmRlYi1zdWJ0YWJzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAycHggZGFzaGVkIHZhcigtLWRlYi1ib3JkZXIsICNlNWU3ZWIpO1xuICAgICAgfVxuICAgICAgLmRlYi1zdWJ0YWJzX190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWRlYi1tdXRlZCwgIzZiNzI4MCk7XG4gICAgICB9XG4gICAgICAuZGViLXN1YnRhYi1yb3cge1xuICAgICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICB9XG4gICAgICAuZGViLWdyb3cge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYk1hbmFnZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoQnVpbGRlclN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5FZGl0U3lzdGVtRGVmYXVsdHNGbiA9IGluamVjdDwocm9sZXM6IHN0cmluZ1tdKSA9PiBib29sZWFuPihTWVNURU1fREVGQVVMVF9DQU5fRURJVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcm90ZWN0ZWQgbGFuZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmFjdGl2ZUxhbmd1YWdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdGFiTGFiZWwodGFiOiB7IGxhYmVsPzogYW55IH0pOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGFiLmxhYmVsLCB0aGlzLmxhbmcoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuRWRpdFRhYih0YWI6IE5lc3RlZFRhYkNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGFiLnN5c3RlbURlZmF1bHQpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmNhbkVkaXRTeXN0ZW1EZWZhdWx0c0ZuKSB7XG4gICAgICAvLyBUaGUgcHJlZGljYXRlJ3MgZW50aXJlIGNvbnRyYWN0IGlzIChyb2xlcykgPT4gYm9vbGVhbi4gVGhpcyBwYXNzZWQgYSBoYXJkY29kZWQgW11cbiAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hvIHdhcyB1c2luZyB0aGUgYnVpbGRlciwgc28gYW55IHByZWRpY2F0ZSB0aGF0IGFjdHVhbGx5IGluc3BlY3RlZFxuICAgICAgLy8gcm9sZXMgYW5zd2VyZWQgZmFsc2UgZm9yIGV2ZXJ5b25lIGFuZCBsb2NrZWQgZXZlcnkgc3lzdGVtLWRlZmF1bHQgdGFiLlxuICAgICAgcmV0dXJuIHRoaXMuY2FuRWRpdFN5c3RlbURlZmF1bHRzRm4odGhpcy5zdG9yZS51c2VyUm9sZXMoKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYi1tYW5hZ2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBRXhEOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFFbkM7O0dBRUc7QUFtTkgsTUFBTSxPQUFPLG1CQUFtQjtJQUNYLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsdUJBQXVCLEdBQUcsTUFBTSxDQUErQix1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5ILElBQUk7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVTLFFBQVEsQ0FBQyxHQUFvQjtRQUNyQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxVQUFVLENBQUMsR0FBb0I7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxvRkFBb0Y7WUFDcEYsb0ZBQW9GO1lBQ3BGLHlFQUF5RTtZQUN6RSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FyQlUsbUJBQW1COzRGQUFuQixtQkFBbUIsMkVBcE1wQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThJVCw4eUJBdkpDLFdBQVcsOG1CQUNYLGVBQWUsd1VBQ2YsaUJBQWlCLDZXQUNqQixrQkFBa0IsMFNBQ2xCLGFBQWEsbUxBQ2IsY0FBYywwV0FDZCxvQkFBb0IsOEJBQ3BCLGdCQUFnQjs7NEZBc01QLG1CQUFtQjtrQkFsTi9CLFNBQVM7c0NBQ1MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQixnQkFBZ0I7cUJBQ2pCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4SVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkVGFiQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQgfSBmcm9tICduZ3gtZHluYW1pYy1lbnRpdHknO1xuaW1wb3J0IHsgQnVpbGRlclN0b3JlIH0gZnJvbSAnLi4vYnVpbGRlci1zdG9yZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZS1leHBvcnRlZCBzbyBleGlzdGluZyBpbXBvcnRzIGZyb20gdGhpcyBwYWNrYWdlIGtlZXAgd29ya2luZy5cbiAqXG4gKiBUaGlzIGZpbGUgdXNlZCB0byBkZWNsYXJlIGl0cyBvd24gYG5ldyBJbmplY3Rpb25Ub2tlbignU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQnKWAgd2hpbGVcbiAqIGBuZ3gtZHluYW1pYy1lbnRpdHlgIGV4cG9ydGVkIGFub3RoZXIgdW5kZXIgdGhlIHNhbWUgbmFtZS4gSW5qZWN0aW9uVG9rZW4gaWRlbnRpdHkgaXMgYnlcbiAqIG9iamVjdCByZWZlcmVuY2UsIHNvIGEgY29uc3VtZXIgcHJvdmlkaW5nIHRoZSByZW5kZXJlcidzIOKAlCB0aGUgZG9jdW1lbnRlZCBvbmUg4oCUIHdhc1xuICogcHJvdmlkaW5nIGEgdG9rZW4gbm90aGluZyBpbmplY3RlZCwgYW5kIHRoZSBwcmVkaWNhdGUgc2lsZW50bHkgbmV2ZXIgcmFuLiBPbmUgdG9rZW4gbm93LFxuICogZGVmaW5lZCBpbiB0aGUgbG93ZXItbGV2ZWwgcGFja2FnZSB0aGF0IGJvdGggZGVwZW5kIG9uLlxuICovXG5leHBvcnQgeyBTWVNURU1fREVGQVVMVF9DQU5fRURJVCB9O1xuXG4vKipcbiAqIFRhYk1hbmFnZXJDb21wb25lbnQg4oCUIGFkZCAvIHJlbmFtZSAvIHJlb3JkZXIgLyByZW1vdmUgdGFicyAmIHN1Yi10YWJzIHdpdGggc3lzdGVtRGVmYXVsdCBwcm90ZWN0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNlbGVjdG9yOiAnbmd4LXRhYi1tYW5hZ2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkZWItdGFic1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImRlYi10YWJzX19oZWFkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGViLXNlY3Rpb24tdGl0bGVcIj5UYWJzIE1hbmFnZXI8L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic3RvcmUuYWRkVGFiKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIFRhYlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHN0b3JlLnRhYnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPHAgY2xhc3M9XCJkZWItaGludFwiPk5vIHRhYnMg4oCUIGFsbCBmaWVsZHMgcmVuZGVyIGluIGEgc2luZ2xlIHNlY3Rpb24uPC9wPlxuICAgICAgfVxuXG4gICAgICBAZm9yICh0YWIgb2Ygc3RvcmUudGFicygpOyB0cmFjayB0YWIuaWQ7IGxldCBpID0gJGluZGV4LCBjb3VudCA9ICRjb3VudCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXRhYi1jYXJkXCIgW2NsYXNzLmRlYi10YWItY2FyZC0tc3lzdGVtXT1cInRhYi5zeXN0ZW1EZWZhdWx0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlYi10YWJzX19yb3dcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCIndGFiLXJvdy0nICsgdGFiLmlkXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZ3Jvd1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IHRhYi5pZCB9fSB7eyB0YWIuc3lzdGVtRGVmYXVsdCA/ICcoU3lzdGVtKScgOiAnJyB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWJMYWJlbCh0YWIpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRUYWJMYWJlbCh0YWIuaWQsIGxhbmcoKSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpID09PSAwIHx8ICFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZVRhYih0YWIuaWQsIC0xKVwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJNb3ZlIHVwXCIgYXJpYS1sYWJlbD1cIk1vdmUgdGFiIHVwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaSA9PT0gY291bnQgLSAxIHx8ICFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcmUubW92ZVRhYih0YWIuaWQsIDEpXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vdmUgZG93blwiIGFyaWEtbGFiZWw9XCJNb3ZlIHRhYiBkb3duXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInN0b3JlLnJlbW92ZVRhYih0YWIuaWQpXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZSB0YWJcIiBhcmlhLWxhYmVsPVwiUmVtb3ZlIHRhYlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYiBzZXR0aW5ncyByb3cgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlYi10YWItc2V0dGluZ3NcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWIuZmxhdERhdGFcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS51cGRhdGVUYWIodGFiLmlkLCB7IGZsYXREYXRhOiAkZXZlbnQgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBGbGF0IERhdGFcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkVkaXRUYWIodGFiKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRhYi5pc1ByaW1hcnlUYWJcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCIkZXZlbnQgPyBzdG9yZS5zZXRQcmltYXJ5VGFiKHRhYi5pZCkgOiBzdG9yZS51cGRhdGVUYWIodGFiLmlkLCB7IGlzUHJpbWFyeVRhYjogZmFsc2UgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBQcmltYXJ5IFRhYlxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidGFiLm1hc2tEYXRhXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic3RvcmUudXBkYXRlVGFiKHRhYi5pZCwgeyBtYXNrRGF0YTogJGV2ZW50IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTWFzayBUYWIgRGF0YVxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidGFiLnN5c3RlbURlZmF1bHRcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS51cGRhdGVUYWIodGFiLmlkLCB7IHN5c3RlbURlZmF1bHQ6ICRldmVudCB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN5c3RlbSBEZWZhdWx0XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5FZGl0VGFiKHRhYilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcmUuYWRkU3ViVGFiKHRhYi5pZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICArIFN1Yi10YWJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNb2R1bGUgdGFiIGNvbmZpZ3VyYXRpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlYi10YWItbW9kdWxlXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZ3Jvd1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNvbnN1bWVyIE1vZHVsZSBOYW1lIChPcHRpb25hbCk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gZG9jdW1lbnRzLXZpZXdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuRWRpdFRhYih0YWIpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ0YWIubW9kdWxlTmFtZVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic3RvcmUudXBkYXRlVGFiKHRhYi5pZCwgeyBtb2R1bGVOYW1lOiAkZXZlbnQgfHwgdW5kZWZpbmVkIH0pXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFN1Yi10YWJzIHJlY3Vyc2l2ZSByZW5kZXIgKExldmVsIDIpIC0tPlxuICAgICAgICAgIEBpZiAodGFiLmNoaWxkcmVuICYmIHRhYi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXN1YnRhYnNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWItc3VidGFic19fdGl0bGVcIj5TdWItdGFiczo8L3NwYW4+XG4gICAgICAgICAgICAgIEBmb3IgKHN1YiBvZiB0YWIuY2hpbGRyZW47IHRyYWNrIHN1Yi5pZCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWItdGFic19fcm93IGRlYi1zdWJ0YWItcm93XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ3N1YnRhYi1yb3ctJyArIHN1Yi5pZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWdyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBzdWIuaWQgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkVkaXRUYWIoc3ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidGFiTGFiZWwoc3ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic3RvcmUuc2V0VGFiTGFiZWwoc3ViLmlkLCBsYW5nKCksICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkVkaXRUYWIoc3ViKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdG9yZS5yZW1vdmVUYWIoc3ViLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmUgc3ViLXRhYlwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgc3ViLXRhYlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5kZWItdGFic19faGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5kZWItdGFiLWNhcmQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1kZWItYm9yZGVyLCAjZTVlN2ViKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWItYmctc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICB9XG4gICAgICAuZGViLXRhYi1jYXJkLS1zeXN0ZW0ge1xuICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWRlYi1hY2NlbnQsICM2MzY2ZjEpO1xuICAgICAgfVxuICAgICAgLmRlYi10YWJzX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgIH1cbiAgICAgIC5kZWItdGFiLXNldHRpbmdzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDhweCAxNnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIH1cbiAgICAgIC5kZWItdGFiLW1vZHVsZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICAgIC5kZWItc3VidGFicyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgICBib3JkZXItbGVmdDogMnB4IGRhc2hlZCB2YXIoLS1kZWItYm9yZGVyLCAjZTVlN2ViKTtcbiAgICAgIH1cbiAgICAgIC5kZWItc3VidGFic19fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kZWItbXV0ZWQsICM2YjcyODApO1xuICAgICAgfVxuICAgICAgLmRlYi1zdWJ0YWItcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgfVxuICAgICAgLmRlYi1ncm93IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJNYW5hZ2VyQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KEJ1aWxkZXJTdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuRWRpdFN5c3RlbURlZmF1bHRzRm4gPSBpbmplY3Q8KHJvbGVzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbj4oU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJvdGVjdGVkIGxhbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hY3RpdmVMYW5ndWFnZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRhYkxhYmVsKHRhYjogeyBsYWJlbD86IGFueSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRhYi5sYWJlbCwgdGhpcy5sYW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbkVkaXRUYWIodGFiOiBOZXN0ZWRUYWJDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRhYi5zeXN0ZW1EZWZhdWx0KSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5jYW5FZGl0U3lzdGVtRGVmYXVsdHNGbikge1xuICAgICAgLy8gVGhlIHByZWRpY2F0ZSdzIGVudGlyZSBjb250cmFjdCBpcyAocm9sZXMpID0+IGJvb2xlYW4uIFRoaXMgcGFzc2VkIGEgaGFyZGNvZGVkIFtdXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIHdobyB3YXMgdXNpbmcgdGhlIGJ1aWxkZXIsIHNvIGFueSBwcmVkaWNhdGUgdGhhdCBhY3R1YWxseSBpbnNwZWN0ZWRcbiAgICAgIC8vIHJvbGVzIGFuc3dlcmVkIGZhbHNlIGZvciBldmVyeW9uZSBhbmQgbG9ja2VkIGV2ZXJ5IHN5c3RlbS1kZWZhdWx0IHRhYi5cbiAgICAgIHJldHVybiB0aGlzLmNhbkVkaXRTeXN0ZW1EZWZhdWx0c0ZuKHRoaXMuc3RvcmUudXNlclJvbGVzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -1,6 +1,5 @@
1
- import { Component, EventEmitter, Input, Output, effect, inject, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, effect, inject } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
- import { DragDropModule } from '@angular/cdk/drag-drop';
4
3
  import { MatButtonModule } from '@angular/material/button';
5
4
  import { MatCardModule } from '@angular/material/card';
6
5
  import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -12,14 +11,13 @@ import { MatSelectModule } from '@angular/material/select';
12
11
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
12
  import { MatToolbarModule } from '@angular/material/toolbar';
14
13
  import { MatTooltipModule } from '@angular/material/tooltip';
15
- import { COMMON_MODULES, resolveLabel, } from '@dynamic-entity/core';
14
+ import { COMMON_MODULES, } from '@dynamic-entity/core';
16
15
  import { ConfigSourceService } from 'ngx-dynamic-entity';
17
16
  import { BuilderStore } from './builder-store.service';
18
17
  import { FieldInspectorComponent } from './components/field-inspector.component';
19
18
  import { FieldPaletteComponent } from './components/field-palette.component';
20
19
  import { TabManagerComponent } from './components/tab-manager.component';
21
20
  import { EntityBuilderCanvasComponent } from './components/entity-builder-canvas.component';
22
- import { getFieldTypeMeta } from './field-catalog';
23
21
  import * as i0 from "@angular/core";
24
22
  import * as i1 from "@angular/forms";
25
23
  import * as i2 from "@angular/material/button";
@@ -85,20 +83,6 @@ export class EntityBuilderComponent {
85
83
  this.store.setUserRoles(this.userRoles);
86
84
  }
87
85
  }
88
- // ─── Field canvas ─────────────────────────────────────────────────────────
89
- onDrop(event) {
90
- this.store.reorderField(event.previousIndex, event.currentIndex);
91
- }
92
- fieldTypeLabel(type) {
93
- return getFieldTypeMeta(type)?.label ?? type;
94
- }
95
- fieldTypeIcon(type) {
96
- return getFieldTypeMeta(type)?.icon ?? 'help_outline';
97
- }
98
- fieldLabel(field) {
99
- const lang = this.store.activeLanguage();
100
- return resolveLabel(field.label, lang) || field.id;
101
- }
102
86
  // ─── Toolbar actions ──────────────────────────────────────────────────────
103
87
  doSave() {
104
88
  const config = this.store.exportConfig();
@@ -135,13 +119,12 @@ export class EntityBuilderComponent {
135
119
  this.store.setPermission(action, roles);
136
120
  }
137
121
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EntityBuilderComponent, isStandalone: true, selector: "ngx-entity-builder", inputs: { config: "config", languages: "languages", availableRoles: "availableRoles", userRoles: "userRoles", commonModules: "commonModules" }, outputs: { configChange: "configChange", save: "save" }, providers: [BuilderStore], usesOnChanges: true, ngImport: i0, template: "<mat-toolbar class=\"deb-toolbar\" color=\"primary\">\n <mat-icon>dashboard_customize</mat-icon>\n <span class=\"deb-toolbar__title\">Entity Builder</span>\n <span class=\"deb-spacer\"></span>\n\n @if (store.problems().length) {\n <button\n mat-button\n type=\"button\"\n class=\"deb-problems\"\n [class.deb-problems--error]=\"!store.isValid()\"\n [matTooltip]=\"store.problems().length + ' issue(s) \u2014 hover items in the list'\"\n >\n <mat-icon>{{ store.isValid() ? 'warning' : 'error' }}</mat-icon>\n {{ store.errors().length }} / {{ store.problems().length }}\n </button>\n }\n\n <button mat-button type=\"button\" (click)=\"copyJson()\">\n <mat-icon>content_copy</mat-icon> Copy JSON\n </button>\n <!-- primary, not accent: white on Material's default pink accent is 3.33:1, below AA. -->\n <button mat-flat-button color=\"primary\" type=\"button\" [disabled]=\"!store.isValid()\" (click)=\"doSave()\">\n <mat-icon>save</mat-icon> Save\n </button>\n</mat-toolbar>\n\n<div class=\"deb-body\">\n <!-- \u2500\u2500\u2500 Left: settings, palette, tabs \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--left\">\n <mat-card>\n <mat-card-content>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>Entity name</mat-label>\n <input\n matInput\n [ngModel]=\"store.config().entity\"\n (ngModelChange)=\"store.setEntityName($event)\"\n placeholder=\"e.g. clients\"\n />\n </mat-form-field>\n\n <div class=\"deb-row\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-grow\">\n <mat-label>Editing language</mat-label>\n <mat-select\n [ngModel]=\"store.activeLanguage()\"\n (ngModelChange)=\"store.setActiveLanguage($event)\"\n >\n @for (l of languages; track l) {\n <mat-option [value]=\"l\">{{ l }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle\n [ngModel]=\"store.config().maskData ?? false\"\n (ngModelChange)=\"store.setMaskData($event)\"\n >Mask this entity (RBAC)</mat-slide-toggle>\n\n <mat-expansion-panel class=\"deb-rbac\">\n <mat-expansion-panel-header>\n <mat-panel-title>Permissions</mat-panel-title>\n </mat-expansion-panel-header>\n @for (action of rbacActions; track action) {\n @if (availableRoles.length) {\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>{{ action }} roles</mat-label>\n <mat-select multiple [ngModel]=\"rolesFor(action)\" (ngModelChange)=\"setRoles(action, $event)\">\n @for (role of availableRoles; track role) {\n <mat-option [value]=\"role\">{{ role }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>{{ action }} roles (comma-separated)</mat-label>\n <input\n matInput\n [ngModel]=\"rolesFor(action).join(', ')\"\n (ngModelChange)=\"setRolesFromText(action, $event)\"\n />\n </mat-form-field>\n }\n }\n <p class=\"deb-hint\">Empty = no restriction for that action.</p>\n </mat-expansion-panel>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-header><mat-card-title>Add field</mat-card-title></mat-card-header>\n <mat-card-content>\n <ngx-field-palette (pick)=\"store.addField($event)\"></ngx-field-palette>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-content>\n <ngx-tab-manager></ngx-tab-manager>\n </mat-card-content>\n </mat-card>\n </div>\n\n <!-- \u2500\u2500\u2500 Center: field canvas \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--center\">\n <ngx-entity-builder-canvas />\n </div>\n\n <!-- \u2500\u2500\u2500 Right: inspector \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--right\">\n <mat-card>\n <mat-card-header><mat-card-title>Field properties</mat-card-title></mat-card-header>\n <mat-card-content>\n <ngx-field-inspector></ngx-field-inspector>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n\n<!-- \u2500\u2500\u2500 Footer: JSON + optional live preview \u2500\u2500\u2500 -->\n<div class=\"deb-footer\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title><mat-icon>data_object</mat-icon>&nbsp;Config JSON</mat-panel-title>\n </mat-expansion-panel-header>\n <pre class=\"deb-json\">{{ json }}</pre>\n </mat-expansion-panel>\n\n <div class=\"deb-preview-slot\">\n <ng-content select=\"[ngxBuilderPreview]\"></ng-content>\n </div>\n</div>\n", styles: [":host{--deb-accent: #6366f1;--deb-accent-hover: #4f46e5;--deb-accent-soft: #eeef2;--deb-border: #e2e8f0;--deb-muted: #64748b;--deb-surface: #ffffff;display:block}.deb-toolbar__title{margin-left:8px;font-family:var(--font-heading, sans-serif);font-size:16px;font-weight:700;color:#fff}.deb-spacer{flex:1 1 auto}.deb-problems--error{color:#ef4444;font-weight:600}.deb-full{width:100%}.deb-grow{flex:1}.deb-row{display:flex;gap:8px;align-items:center}.deb-section-title{font-family:var(--font-heading, sans-serif);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--deb-muted)}.deb-hint{margin:4px 0 0;font-size:12px;color:var(--deb-muted)}.deb-chip{display:inline-block;padding:3px 10px;border-radius:9999px;background:var(--deb-accent-soft);color:var(--deb-accent-hover);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.deb-chip--muted{background:#f1f5f9;color:var(--deb-muted)}.deb-body{display:grid;grid-template-columns:320px minmax(0,1fr) 380px;gap:20px;padding:20px;align-items:start}.deb-col{display:flex;flex-direction:column;gap:16px;min-width:0}.deb-col--right{position:sticky;top:20px}@media (max-width: 1100px){.deb-body{grid-template-columns:1fr}.deb-col--right{position:static}}.deb-field-list{display:flex;flex-direction:column;gap:10px}.deb-field-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--deb-border);border-radius:10px;background:var(--deb-surface);cursor:pointer;box-shadow:0 1px 3px #00000008;transition:all .18s cubic-bezier(.16,1,.3,1)}.deb-field-row:hover{border-color:#a5b4fc;background:#fcfaff;transform:translateY(-1px);box-shadow:0 4px 12px #6366f114}.deb-field-row--active{border-color:var(--deb-accent);border-left:4px solid var(--deb-accent);background:#f5f3ff;box-shadow:0 4px 16px #6366f12e}.deb-type-badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:6px;background:#e0e7ff;color:#4338ca}.deb-drag-handle{cursor:grab;color:#94a3b8;transition:color .15s}.deb-drag-handle:hover,.deb-field-type{color:var(--deb-accent)}.deb-field-meta{display:flex;flex-direction:column;min-width:0;flex:1}.deb-field-label{font-family:var(--font-heading, sans-serif);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#0f172a;font-size:14px}.deb-field-id{font-size:11px;color:var(--deb-muted);font-family:ui-monospace,SFMono-Regular,monospace}.deb-req{color:#ef4444;font-weight:700}.deb-empty,.deb-inspector__empty{text-align:center;color:var(--deb-muted);padding:40px 16px}.deb-empty mat-icon{transform:scale(1.8);margin-bottom:16px;color:#cbd5e1}.cdk-drag-preview{box-shadow:0 12px 28px #4f46e538;border-radius:10px;border:1px solid var(--deb-accent);background:#fff}.cdk-drag-placeholder{opacity:.35}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.deb-field-list.cdk-drop-list-dragging .deb-field-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.deb-footer{padding:0 20px 20px;display:flex;flex-direction:column;gap:16px}.deb-json{margin:0;max-height:320px;overflow:auto;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;line-height:1.5;padding:14px;background:#0f172a;color:#e2e8f0;border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FieldPaletteComponent, selector: "ngx-field-palette", outputs: ["pick"] }, { kind: "component", type: TabManagerComponent, selector: "ngx-tab-manager" }, { kind: "component", type: FieldInspectorComponent, selector: "ngx-field-inspector" }, { kind: "component", type: EntityBuilderCanvasComponent, selector: "ngx-entity-builder-canvas" }] });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EntityBuilderComponent, isStandalone: true, selector: "ngx-entity-builder", inputs: { config: "config", languages: "languages", availableRoles: "availableRoles", userRoles: "userRoles", commonModules: "commonModules" }, outputs: { configChange: "configChange", save: "save" }, providers: [BuilderStore], usesOnChanges: true, ngImport: i0, template: "<mat-toolbar class=\"deb-toolbar\" color=\"primary\">\n <mat-icon>dashboard_customize</mat-icon>\n <span class=\"deb-toolbar__title\">Entity Builder</span>\n <span class=\"deb-spacer\"></span>\n\n @if (store.problems().length) {\n <button\n mat-button\n type=\"button\"\n class=\"deb-problems\"\n [class.deb-problems--error]=\"!store.isValid()\"\n [matTooltip]=\"store.problems().length + ' issue(s) \u2014 hover items in the list'\"\n >\n <mat-icon>{{ store.isValid() ? 'warning' : 'error' }}</mat-icon>\n {{ store.errors().length }} / {{ store.problems().length }}\n </button>\n }\n\n <button mat-button type=\"button\" (click)=\"copyJson()\">\n <mat-icon>content_copy</mat-icon> Copy JSON\n </button>\n <!-- primary, not accent: white on Material's default pink accent is 3.33:1, below AA. -->\n <button mat-flat-button color=\"primary\" type=\"button\" [disabled]=\"!store.isValid()\" (click)=\"doSave()\">\n <mat-icon>save</mat-icon> Save\n </button>\n</mat-toolbar>\n\n<div class=\"deb-body\">\n <!-- \u2500\u2500\u2500 Left: settings, palette, tabs \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--left\">\n <mat-card>\n <mat-card-content>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>Entity name</mat-label>\n <input\n matInput\n [ngModel]=\"store.config().entity\"\n (ngModelChange)=\"store.setEntityName($event)\"\n placeholder=\"e.g. clients\"\n />\n </mat-form-field>\n\n <div class=\"deb-row\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-grow\">\n <mat-label>Editing language</mat-label>\n <mat-select\n [ngModel]=\"store.activeLanguage()\"\n (ngModelChange)=\"store.setActiveLanguage($event)\"\n >\n @for (l of languages; track l) {\n <mat-option [value]=\"l\">{{ l }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle\n [ngModel]=\"store.config().maskData ?? false\"\n (ngModelChange)=\"store.setMaskData($event)\"\n >Mask this entity (RBAC)</mat-slide-toggle>\n\n <mat-expansion-panel class=\"deb-rbac\">\n <mat-expansion-panel-header>\n <mat-panel-title>Permissions</mat-panel-title>\n </mat-expansion-panel-header>\n @for (action of rbacActions; track action) {\n @if (availableRoles.length) {\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>{{ action }} roles</mat-label>\n <mat-select multiple [ngModel]=\"rolesFor(action)\" (ngModelChange)=\"setRoles(action, $event)\">\n @for (role of availableRoles; track role) {\n <mat-option [value]=\"role\">{{ role }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"deb-full\">\n <mat-label>{{ action }} roles (comma-separated)</mat-label>\n <input\n matInput\n [ngModel]=\"rolesFor(action).join(', ')\"\n (ngModelChange)=\"setRolesFromText(action, $event)\"\n />\n </mat-form-field>\n }\n }\n <p class=\"deb-hint\">Empty = no restriction for that action.</p>\n </mat-expansion-panel>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-header><mat-card-title>Add field</mat-card-title></mat-card-header>\n <mat-card-content>\n <ngx-field-palette (pick)=\"store.addField($event)\"></ngx-field-palette>\n </mat-card-content>\n </mat-card>\n\n <mat-card>\n <mat-card-content>\n <ngx-tab-manager></ngx-tab-manager>\n </mat-card-content>\n </mat-card>\n </div>\n\n <!-- \u2500\u2500\u2500 Center: field canvas \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--center\">\n <ngx-entity-builder-canvas />\n </div>\n\n <!-- \u2500\u2500\u2500 Right: inspector \u2500\u2500\u2500 -->\n <div class=\"deb-col deb-col--right\">\n <mat-card>\n <mat-card-header><mat-card-title>Field properties</mat-card-title></mat-card-header>\n <mat-card-content>\n <ngx-field-inspector></ngx-field-inspector>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n\n<!-- \u2500\u2500\u2500 Footer: JSON + optional live preview \u2500\u2500\u2500 -->\n<div class=\"deb-footer\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title><mat-icon>data_object</mat-icon>&nbsp;Config JSON</mat-panel-title>\n </mat-expansion-panel-header>\n <pre class=\"deb-json\">{{ json }}</pre>\n </mat-expansion-panel>\n\n <div class=\"deb-preview-slot\">\n <ng-content select=\"[ngxBuilderPreview]\"></ng-content>\n </div>\n</div>\n", styles: [":host{--deb-accent: #6366f1;--deb-accent-hover: #4f46e5;--deb-accent-soft: #eeef2;--deb-border: #e2e8f0;--deb-muted: #64748b;--deb-surface: #ffffff;display:block}.deb-toolbar__title{margin-left:8px;font-family:var(--font-heading, sans-serif);font-size:16px;font-weight:700;color:#fff}.deb-spacer{flex:1 1 auto}.deb-problems--error{color:#ef4444;font-weight:600}.deb-full{width:100%}.deb-grow{flex:1}.deb-row{display:flex;gap:8px;align-items:center}.deb-section-title{font-family:var(--font-heading, sans-serif);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--deb-muted)}.deb-hint{margin:4px 0 0;font-size:12px;color:var(--deb-muted)}.deb-chip{display:inline-block;padding:3px 10px;border-radius:9999px;background:var(--deb-accent-soft);color:var(--deb-accent-hover);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.deb-chip--muted{background:#f1f5f9;color:var(--deb-muted)}.deb-body{display:grid;grid-template-columns:320px minmax(0,1fr) 380px;gap:20px;padding:20px;align-items:start}.deb-col{display:flex;flex-direction:column;gap:16px;min-width:0}.deb-col--right{position:sticky;top:20px}@media (max-width: 1100px){.deb-body{grid-template-columns:1fr}.deb-col--right{position:static}}.deb-field-list{display:flex;flex-direction:column;gap:10px}.deb-field-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--deb-border);border-radius:10px;background:var(--deb-surface);cursor:pointer;box-shadow:0 1px 3px #00000008;transition:all .18s cubic-bezier(.16,1,.3,1)}.deb-field-row:hover{border-color:#a5b4fc;background:#fcfaff;transform:translateY(-1px);box-shadow:0 4px 12px #6366f114}.deb-field-row--active{border-color:var(--deb-accent);border-left:4px solid var(--deb-accent);background:#f5f3ff;box-shadow:0 4px 16px #6366f12e}.deb-type-badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:6px;background:#e0e7ff;color:#4338ca}.deb-drag-handle{cursor:grab;color:#94a3b8;transition:color .15s}.deb-drag-handle:hover,.deb-field-type{color:var(--deb-accent)}.deb-field-meta{display:flex;flex-direction:column;min-width:0;flex:1}.deb-field-label{font-family:var(--font-heading, sans-serif);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#0f172a;font-size:14px}.deb-field-id{font-size:11px;color:var(--deb-muted);font-family:ui-monospace,SFMono-Regular,monospace}.deb-req{color:#ef4444;font-weight:700}.deb-empty,.deb-inspector__empty{text-align:center;color:var(--deb-muted);padding:40px 16px}.deb-empty mat-icon{transform:scale(1.8);margin-bottom:16px;color:#cbd5e1}.cdk-drag-preview{box-shadow:0 12px 28px #4f46e538;border-radius:10px;border:1px solid var(--deb-accent);background:#fff}.cdk-drag-placeholder{opacity:.35}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.deb-field-list.cdk-drop-list-dragging .deb-field-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.deb-footer{padding:0 20px 20px;display:flex;flex-direction:column;gap:16px}.deb-json{margin:0;max-height:320px;overflow:auto;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;line-height:1.5;padding:14px;background:#0f172a;color:#e2e8f0;border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FieldPaletteComponent, selector: "ngx-field-palette", outputs: ["pick"] }, { kind: "component", type: TabManagerComponent, selector: "ngx-tab-manager" }, { kind: "component", type: FieldInspectorComponent, selector: "ngx-field-inspector" }, { kind: "component", type: EntityBuilderCanvasComponent, selector: "ngx-entity-builder-canvas" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
139
123
  }
140
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EntityBuilderComponent, decorators: [{
141
125
  type: Component,
142
- args: [{ selector: 'ngx-entity-builder', standalone: true, providers: [BuilderStore], imports: [
126
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-entity-builder', standalone: true, providers: [BuilderStore], imports: [
143
127
  FormsModule,
144
- DragDropModule,
145
128
  MatButtonModule,
146
129
  MatCardModule,
147
130
  MatCheckboxModule,
@@ -173,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
173
156
  }], save: [{
174
157
  type: Output
175
158
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lbnRpdHktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zcmMvbGliL2VudGl0eS1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFlLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUNMLGNBQWMsRUFJZCxZQUFZLEdBQ2IsTUFBTSxz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QixnQkFBZ0IsaUpBQ2hCLGdCQUFnQiw4VEFDaEIscUJBQXFCLGlGQUNyQixtQkFBbUIsNERBQ25CLHVCQUF1QixnRUFDdkIsNEJBQTRCOzs0RkFLbkIsc0JBQXNCO2tCQTFCbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxhQUNMLENBQUMsWUFBWSxDQUFDLFdBQ2hCO3dCQUNQLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsNEJBQTRCO3FCQUM3Qjt3REFhUSxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFHSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRUb29sYmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQge1xuICBDT01NT05fTU9EVUxFUyxcbiAgdHlwZSBDb21tb25Nb2R1bGVFbnRyeSxcbiAgdHlwZSBFbnRpdHlGb3JtQ29uZmlnLFxuICB0eXBlIEVudGl0eVBlcm1pc3Npb25zLFxuICByZXNvbHZlTGFiZWwsXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NvdXJjZVNlcnZpY2UgfSBmcm9tICduZ3gtZHluYW1pYy1lbnRpdHknO1xuaW1wb3J0IHsgQnVpbGRlclN0b3JlIH0gZnJvbSAnLi9idWlsZGVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRJbnNwZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGQtaW5zcGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWVsZFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGQtcGFsZXR0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFiTWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWItbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW50aXR5QnVpbGRlckNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbnRpdHktYnVpbGRlci1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IGdldEZpZWxkVHlwZU1ldGEgfSBmcm9tICcuL2ZpZWxkLWNhdGFsb2cnO1xuXG4vKiogUkJBQyBhY3Rpb25zIHN1cmZhY2VkIGluIHRoZSBzZXR0aW5ncyBwYW5lbC4gKi9cbmNvbnN0IFJCQUNfQUNUSU9OUzogKGtleW9mIEVudGl0eVBlcm1pc3Npb25zKVtdID0gWyd2aWV3JywgJ2VkaXQnLCAnZGVsZXRlJ107XG5cbi8qKiBTaGFyZWQgc3RhYmxlIGVtcHR5IGFycmF5IOKAlCBuZXZlciBhbGxvY2F0ZSBhIGZyZXNoIFtdIHBlciBjaGFuZ2UtZGV0ZWN0aW9uIChtYXQtc2VsZWN0IGxvb3BzKS4gKi9cbmNvbnN0IEVNUFRZX1JPTEVTOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4vKipcbiAqIEVudGl0eUJ1aWxkZXJDb21wb25lbnQg4oCUIHRoZSB0b3AtbGV2ZWwgdmlzdWFsIGJ1aWxkZXIgZm9yIGFuIEVudGl0eUZvcm1Db25maWcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1lbnRpdHktYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0J1aWxkZXJTdG9yZV0sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBGaWVsZFBhbGV0dGVDb21wb25lbnQsXG4gICAgVGFiTWFuYWdlckNvbXBvbmVudCxcbiAgICBGaWVsZEluc3BlY3RvckNvbXBvbmVudCxcbiAgICBFbnRpdHlCdWlsZGVyQ2FudmFzQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eUJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoQnVpbGRlclN0b3JlKTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBvbmx5IGFwcHMgdGhhdCByZWdpc3RlcmVkIGEgQ09ORklHX1NPVVJDRSBoYXZlIG9uZS4gVXNlZCB0byBkcm9wIHRoZSBjYWNoZWRcbiAgICogY29weSBvZiBhIGNvbmZpZyB0aGUgbW9tZW50IGl0IGlzIGVkaXRlZCDigJQgc2VlIGBkb1NhdmVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTb3VyY2UgPSBpbmplY3QoQ29uZmlnU291cmNlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogRXhpc3RpbmcgY29uZmlnIHRvIGVkaXQuIFdoZW4gb21pdHRlZCwgdGhlIGJ1aWxkZXIgc3RhcnRzIGJsYW5rLiAqL1xuICBASW5wdXQoKSBjb25maWc/OiBFbnRpdHlGb3JtQ29uZmlnO1xuICAvKiogTGFuZ3VhZ2VzIGF2YWlsYWJsZSBmb3IgbGFiZWwvcGxhY2Vob2xkZXIgZWRpdGluZy4gRmlyc3QgZW50cnkgaXMgdGhlIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlczogc3RyaW5nW10gPSBbJ2VuJ107XG4gIC8qKiBPcHRpb25hbCByb2xlIGxpc3Qg4oCUIGVuYWJsZXMgbXVsdGktc2VsZWN0IHJvbGUgcGlja2VycyBmb3IgUkJBQyBpbnN0ZWFkIG9mIGZyZWUgdGV4dC4gKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlUm9sZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBSb2xlcyBvZiB0aGUgcGVyc29uIHVzaW5nIHRoZSBidWlsZGVyLiBEaXN0aW5jdCBmcm9tIGBhdmFpbGFibGVSb2xlc2AsIHdoaWNoIGlzIHRoZVxuICAgKiB2b2NhYnVsYXJ5IGEgc2NoZW1hIG1heSByZWZlcmVuY2UuIFBhc3NlZCB0byB0aGUgYFNZU1RFTV9ERUZBVUxUX0NBTl9FRElUYCBwcmVkaWNhdGUgc29cbiAgICogaXQgY2FuIGRlY2lkZSB3aGV0aGVyIHRoaXMgdXNlciBtYXkgZWRpdCBzeXN0ZW0tZGVmYXVsdCB0YWJzLlxuICAgKi9cbiAgQElucHV0KCkgdXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogT3B0aW9uYWwgY29tbW9uLW1vZHVsZSBkZWZpbml0aW9ucyBmb3IgbW9kdWxlIHRhYnM7IGRlZmF1bHRzIHRvIHRoZSBidWlsdC1pbiBsaXN0IGZyb20gY29yZS4gKi9cbiAgQElucHV0KCkgY29tbW9uTW9kdWxlczogcmVhZG9ubHkgQ29tbW9uTW9kdWxlRW50cnlbXSA9IENPTU1PTl9NT0RVTEVTO1xuXG4gIC8qKiBFbWl0dGVkIG9uIGV2ZXJ5IGNoYW5nZSB0byB0aGUgd29ya2luZyBjb25maWcuICovXG4gIEBPdXRwdXQoKSBjb25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVudGl0eUZvcm1Db25maWc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFNhdmUuIENhcnJpZXMgYSBjbGVhbiwgZGVlcC1jbG9uZWQgY29uZmlnLiAqL1xuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RW50aXR5Rm9ybUNvbmZpZz4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmJhY0FjdGlvbnMgPSBSQkFDX0FDVElPTlM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHRoaXMuY29uZmlnQ2hhbmdlLmVtaXQodGhpcy5zdG9yZS5jb25maWcoKSksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddICYmIGNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY29uZmlnJ10ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnKSB0aGlzLnN0b3JlLmxvYWQodGhpcy5jb25maWcpO1xuICAgICAgZWxzZSBpZiAoY2hhbmdlc1snY29uZmlnJ10uaXNGaXJzdENoYW5nZSgpKSB0aGlzLnN0b3JlLnJlc2V0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZXMnXSAmJiB0aGlzLmxhbmd1YWdlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuc3RvcmUuYWN0aXZlTGFuZ3VhZ2UoKTtcbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoYWN0aXZlKSkgdGhpcy5zdG9yZS5zZXRBY3RpdmVMYW5ndWFnZSh0aGlzLmxhbmd1YWdlc1swXSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd1c2VyUm9sZXMnXSkge1xuICAgICAgdGhpcy5zdG9yZS5zZXRVc2VyUm9sZXModGhpcy51c2VyUm9sZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBGaWVsZCBjYW52YXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJvdGVjdGVkIG9uRHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLnJlb3JkZXJGaWVsZChldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpZWxkVHlwZUxhYmVsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZU1ldGEodHlwZSk/LmxhYmVsID8/IHR5cGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRUeXBlSWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRGaWVsZFR5cGVNZXRhKHR5cGUpPy5pY29uID8/ICdoZWxwX291dGxpbmUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpZWxkTGFiZWwoZmllbGQ6IHsgaWQ6IHN0cmluZzsgbGFiZWw/OiBhbnkgfSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMuc3RvcmUuYWN0aXZlTGFuZ3VhZ2UoKTtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKGZpZWxkLmxhYmVsLCBsYW5nKSB8fCBmaWVsZC5pZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBUb29sYmFyIGFjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJvdGVjdGVkIGRvU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnN0b3JlLmV4cG9ydENvbmZpZygpO1xuXG4gICAgLy8gU2F2aW5nIGlzIHRoZSBtb21lbnQgdGhpcyBlbnRpdHkncyBjb25maWcgY2hhbmdlcywgc28gYW55dGhpbmcgaG9sZGluZyBhIGNhY2hlZCBjb3B5IGlzXG4gICAgLy8gbm93IHN0YWxlIOKAlCBtb3N0IHZpc2libHkgYSByZWZlcmVuY2VkIGZpZWxkIGVsc2V3aGVyZSByZXNvbHZpbmcgYWdhaW5zdCB0aGUgb2xkIHNjaGVtYS5cbiAgICAvLyBDb25maWdTb3VyY2VTZXJ2aWNlIGNhY2hlcyBwZXIgZW50aXR5IGFuZCBleHBvc2VkIGNsZWFyQ2FjaGUgZnJvbSB0aGUgc3RhcnQsIGJ1dCBub3RoaW5nXG4gICAgLy8gZXZlciBjYWxsZWQgaXQsIHNvIGEgY2FjaGUgZW50cnkgbGl2ZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgcGFnZS5cbiAgICB0aGlzLmNvbmZpZ1NvdXJjZT8uY2xlYXJDYWNoZShjb25maWcuZW50aXR5KTtcblxuICAgIHRoaXMuc2F2ZS5lbWl0KGNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGpzb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zdG9yZS5leHBvcnRDb25maWcoKSwgbnVsbCwgMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIHZvaWQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5qc29uKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIDilIAgUkJBQyBzZXR0aW5ncyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcm90ZWN0ZWQgcm9sZXNGb3IoYWN0aW9uOiBrZXlvZiBFbnRpdHlQZXJtaXNzaW9ucyk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAvLyBSZXR1cm4gdGhlIHN0b3JlZCBhcnJheSAoc3RhYmxlIHJlZiBiZXR3ZWVuIG11dGF0aW9ucykgb3IgYSBzaGFyZWQgZW1wdHkg4oCUIE5PVCBhIGZyZXNoIFtdLFxuICAgIC8vIHdoaWNoIHdvdWxkIG1ha2UgdGhlIGJvdW5kIG1hdC1zZWxlY3QgcmUtZXZhbHVhdGUgZXZlcnkgQ0QgYW5kIGxvb3AgZm9yZXZlci5cbiAgICByZXR1cm4gdGhpcy5zdG9yZS5jb25maWcoKS5wZXJtaXNzaW9ucz8uW2FjdGlvbl0gPz8gRU1QVFlfUk9MRVM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0Um9sZXMoYWN0aW9uOiBrZXlvZiBFbnRpdHlQZXJtaXNzaW9ucywgcm9sZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5zZXRQZXJtaXNzaW9uKGFjdGlvbiwgcm9sZXMpO1xuICB9XG5cbiAgLyoqIFBhcnNlIGEgY29tbWEtc2VwYXJhdGVkIHJvbGUgc3RyaW5nIGludG8gYSB0cmltbWVkLCBkZS1kdXBsaWNhdGVkIGFycmF5LiAqL1xuICBwcm90ZWN0ZWQgc2V0Um9sZXNGcm9tVGV4dChhY3Rpb246IGtleW9mIEVudGl0eVBlcm1pc3Npb25zLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByb2xlcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAubWFwKHIgPT4gci50cmltKCkpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLnNldFBlcm1pc3Npb24oYWN0aW9uLCByb2xlcyk7XG4gIH1cbn1cbiIsIjxtYXQtdG9vbGJhciBjbGFzcz1cImRlYi10b29sYmFyXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gIDxtYXQtaWNvbj5kYXNoYm9hcmRfY3VzdG9taXplPC9tYXQtaWNvbj5cbiAgPHNwYW4gY2xhc3M9XCJkZWItdG9vbGJhcl9fdGl0bGVcIj5FbnRpdHkgQnVpbGRlcjwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJkZWItc3BhY2VyXCI+PC9zcGFuPlxuXG4gIEBpZiAoc3RvcmUucHJvYmxlbXMoKS5sZW5ndGgpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiZGViLXByb2JsZW1zXCJcbiAgICAgIFtjbGFzcy5kZWItcHJvYmxlbXMtLWVycm9yXT1cIiFzdG9yZS5pc1ZhbGlkKClcIlxuICAgICAgW21hdFRvb2x0aXBdPVwic3RvcmUucHJvYmxlbXMoKS5sZW5ndGggKyAnIGlzc3VlKHMpIOKAlCBob3ZlciBpdGVtcyBpbiB0aGUgbGlzdCdcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyBzdG9yZS5pc1ZhbGlkKCkgPyAnd2FybmluZycgOiAnZXJyb3InIH19PC9tYXQtaWNvbj5cbiAgICAgIHt7IHN0b3JlLmVycm9ycygpLmxlbmd0aCB9fSAvIHt7IHN0b3JlLnByb2JsZW1zKCkubGVuZ3RoIH19XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb3B5SnNvbigpXCI+XG4gICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+IENvcHkgSlNPTlxuICA8L2J1dHRvbj5cbiAgPCEtLSBwcmltYXJ5LCBub3QgYWNjZW50OiB3aGl0ZSBvbiBNYXRlcmlhbCdzIGRlZmF1bHQgcGluayBhY2NlbnQgaXMgMy4zMzoxLCBiZWxvdyBBQS4gLS0+XG4gIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIXN0b3JlLmlzVmFsaWQoKVwiIChjbGljayk9XCJkb1NhdmUoKVwiPlxuICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj4gU2F2ZVxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG5cbjxkaXYgY2xhc3M9XCJkZWItYm9keVwiPlxuICA8IS0tIOKUgOKUgOKUgCBMZWZ0OiBzZXR0aW5ncywgcGFsZXR0ZSwgdGFicyDilIDilIDilIAgLS0+XG4gIDxkaXYgY2xhc3M9XCJkZWItY29sIGRlYi1jb2wtLWxlZnRcIj5cbiAgICA8bWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkVudGl0eSBuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW25nTW9kZWxdPVwic3RvcmUuY29uZmlnKCkuZW50aXR5XCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN0b3JlLnNldEVudGl0eU5hbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gY2xpZW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXJvd1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cImRlYi1ncm93XCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkVkaXRpbmcgbGFuZ3VhZ2U8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0b3JlLmFjdGl2ZUxhbmd1YWdlKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRBY3RpdmVMYW5ndWFnZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGZvciAobCBvZiBsYW5ndWFnZXM7IHRyYWNrIGwpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibFwiPnt7IGwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgIFtuZ01vZGVsXT1cInN0b3JlLmNvbmZpZygpLm1hc2tEYXRhID8/IGZhbHNlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRNYXNrRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgPk1hc2sgdGhpcyBlbnRpdHkgKFJCQUMpPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwiZGViLXJiYWNcIj5cbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlBlcm1pc3Npb25zPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgcmJhY0FjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgQGlmIChhdmFpbGFibGVSb2xlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGFjdGlvbiB9fSByb2xlczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG11bHRpcGxlIFtuZ01vZGVsXT1cInJvbGVzRm9yKGFjdGlvbilcIiAobmdNb2RlbENoYW5nZSk9XCJzZXRSb2xlcyhhY3Rpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHJvbGUgb2YgYXZhaWxhYmxlUm9sZXM7IHRyYWNrIHJvbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInJvbGVcIj57eyByb2xlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgYWN0aW9uIH19IHJvbGVzIChjb21tYS1zZXBhcmF0ZWQpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm9sZXNGb3IoYWN0aW9uKS5qb2luKCcsICcpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFJvbGVzRnJvbVRleHQoYWN0aW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICA8cCBjbGFzcz1cImRlYi1oaW50XCI+RW1wdHkgPSBubyByZXN0cmljdGlvbiBmb3IgdGhhdCBhY3Rpb24uPC9wPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cblxuICAgIDxtYXQtY2FyZD5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+PG1hdC1jYXJkLXRpdGxlPkFkZCBmaWVsZDwvbWF0LWNhcmQtdGl0bGU+PC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG5neC1maWVsZC1wYWxldHRlIChwaWNrKT1cInN0b3JlLmFkZEZpZWxkKCRldmVudClcIj48L25neC1maWVsZC1wYWxldHRlPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8bWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG5neC10YWItbWFuYWdlcj48L25neC10YWItbWFuYWdlcj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cblxuICA8IS0tIOKUgOKUgOKUgCBDZW50ZXI6IGZpZWxkIGNhbnZhcyDilIDilIDilIAgLS0+XG4gIDxkaXYgY2xhc3M9XCJkZWItY29sIGRlYi1jb2wtLWNlbnRlclwiPlxuICAgIDxuZ3gtZW50aXR5LWJ1aWxkZXItY2FudmFzIC8+XG4gIDwvZGl2PlxuXG4gIDwhLS0g4pSA4pSA4pSAIFJpZ2h0OiBpbnNwZWN0b3Ig4pSA4pSA4pSAIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGViLWNvbCBkZWItY29sLS1yaWdodFwiPlxuICAgIDxtYXQtY2FyZD5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+PG1hdC1jYXJkLXRpdGxlPkZpZWxkIHByb3BlcnRpZXM8L21hdC1jYXJkLXRpdGxlPjwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxuZ3gtZmllbGQtaW5zcGVjdG9yPjwvbmd4LWZpZWxkLWluc3BlY3Rvcj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIOKUgOKUgOKUgCBGb290ZXI6IEpTT04gKyBvcHRpb25hbCBsaXZlIHByZXZpZXcg4pSA4pSA4pSAIC0tPlxuPGRpdiBjbGFzcz1cImRlYi1mb290ZXJcIj5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPG1hdC1wYW5lbC10aXRsZT48bWF0LWljb24+ZGF0YV9vYmplY3Q8L21hdC1pY29uPiZuYnNwO0NvbmZpZyBKU09OPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8cHJlIGNsYXNzPVwiZGViLWpzb25cIj57eyBqc29uIH19PC9wcmU+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICA8ZGl2IGNsYXNzPVwiZGViLXByZXZpZXctc2xvdFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuZ3hCdWlsZGVyUHJldmlld11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lbnRpdHktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zcmMvbGliL2VudGl0eS1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUNMLGNBQWMsR0FJZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxN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ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRUb29sYmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQge1xuICBDT01NT05fTU9EVUxFUyxcbiAgdHlwZSBDb21tb25Nb2R1bGVFbnRyeSxcbiAgdHlwZSBFbnRpdHlGb3JtQ29uZmlnLFxuICB0eXBlIEVudGl0eVBlcm1pc3Npb25zLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnbmd4LWR5bmFtaWMtZW50aXR5JztcbmltcG9ydCB7IEJ1aWxkZXJTdG9yZSB9IGZyb20gJy4vYnVpbGRlci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkSW5zcGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkLWluc3BlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGRQYWxldHRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkLXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYk1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFiLW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVudGl0eUJ1aWxkZXJDYW52YXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZW50aXR5LWJ1aWxkZXItY2FudmFzLmNvbXBvbmVudCc7XG5cbi8qKiBSQkFDIGFjdGlvbnMgc3VyZmFjZWQgaW4gdGhlIHNldHRpbmdzIHBhbmVsLiAqL1xuY29uc3QgUkJBQ19BQ1RJT05TOiAoa2V5b2YgRW50aXR5UGVybWlzc2lvbnMpW10gPSBbJ3ZpZXcnLCAnZWRpdCcsICdkZWxldGUnXTtcblxuLyoqIFNoYXJlZCBzdGFibGUgZW1wdHkgYXJyYXkg4oCUIG5ldmVyIGFsbG9jYXRlIGEgZnJlc2ggW10gcGVyIGNoYW5nZS1kZXRlY3Rpb24gKG1hdC1zZWxlY3QgbG9vcHMpLiAqL1xuY29uc3QgRU1QVFlfUk9MRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5cbi8qKlxuICogRW50aXR5QnVpbGRlckNvbXBvbmVudCDigJQgdGhlIHRvcC1sZXZlbCB2aXN1YWwgYnVpbGRlciBmb3IgYW4gRW50aXR5Rm9ybUNvbmZpZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ25neC1lbnRpdHktYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0J1aWxkZXJTdG9yZV0sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBGaWVsZFBhbGV0dGVDb21wb25lbnQsXG4gICAgVGFiTWFuYWdlckNvbXBvbmVudCxcbiAgICBGaWVsZEluc3BlY3RvckNvbXBvbmVudCxcbiAgICBFbnRpdHlCdWlsZGVyQ2FudmFzQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZW50aXR5LWJ1aWxkZXIuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eUJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoQnVpbGRlclN0b3JlKTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBvbmx5IGFwcHMgdGhhdCByZWdpc3RlcmVkIGEgQ09ORklHX1NPVVJDRSBoYXZlIG9uZS4gVXNlZCB0byBkcm9wIHRoZSBjYWNoZWRcbiAgICogY29weSBvZiBhIGNvbmZpZyB0aGUgbW9tZW50IGl0IGlzIGVkaXRlZCDigJQgc2VlIGBkb1NhdmVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTb3VyY2UgPSBpbmplY3QoQ29uZmlnU291cmNlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogRXhpc3RpbmcgY29uZmlnIHRvIGVkaXQuIFdoZW4gb21pdHRlZCwgdGhlIGJ1aWxkZXIgc3RhcnRzIGJsYW5rLiAqL1xuICBASW5wdXQoKSBjb25maWc/OiBFbnRpdHlGb3JtQ29uZmlnO1xuICAvKiogTGFuZ3VhZ2VzIGF2YWlsYWJsZSBmb3IgbGFiZWwvcGxhY2Vob2xkZXIgZWRpdGluZy4gRmlyc3QgZW50cnkgaXMgdGhlIGRlZmF1bHQuICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlczogc3RyaW5nW10gPSBbJ2VuJ107XG4gIC8qKiBPcHRpb25hbCByb2xlIGxpc3Qg4oCUIGVuYWJsZXMgbXVsdGktc2VsZWN0IHJvbGUgcGlja2VycyBmb3IgUkJBQyBpbnN0ZWFkIG9mIGZyZWUgdGV4dC4gKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlUm9sZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBSb2xlcyBvZiB0aGUgcGVyc29uIHVzaW5nIHRoZSBidWlsZGVyLiBEaXN0aW5jdCBmcm9tIGBhdmFpbGFibGVSb2xlc2AsIHdoaWNoIGlzIHRoZVxuICAgKiB2b2NhYnVsYXJ5IGEgc2NoZW1hIG1heSByZWZlcmVuY2UuIFBhc3NlZCB0byB0aGUgYFNZU1RFTV9ERUZBVUxUX0NBTl9FRElUYCBwcmVkaWNhdGUgc29cbiAgICogaXQgY2FuIGRlY2lkZSB3aGV0aGVyIHRoaXMgdXNlciBtYXkgZWRpdCBzeXN0ZW0tZGVmYXVsdCB0YWJzLlxuICAgKi9cbiAgQElucHV0KCkgdXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogT3B0aW9uYWwgY29tbW9uLW1vZHVsZSBkZWZpbml0aW9ucyBmb3IgbW9kdWxlIHRhYnM7IGRlZmF1bHRzIHRvIHRoZSBidWlsdC1pbiBsaXN0IGZyb20gY29yZS4gKi9cbiAgQElucHV0KCkgY29tbW9uTW9kdWxlczogcmVhZG9ubHkgQ29tbW9uTW9kdWxlRW50cnlbXSA9IENPTU1PTl9NT0RVTEVTO1xuXG4gIC8qKiBFbWl0dGVkIG9uIGV2ZXJ5IGNoYW5nZSB0byB0aGUgd29ya2luZyBjb25maWcuICovXG4gIEBPdXRwdXQoKSBjb25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVudGl0eUZvcm1Db25maWc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFNhdmUuIENhcnJpZXMgYSBjbGVhbiwgZGVlcC1jbG9uZWQgY29uZmlnLiAqL1xuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RW50aXR5Rm9ybUNvbmZpZz4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmJhY0FjdGlvbnMgPSBSQkFDX0FDVElPTlM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHRoaXMuY29uZmlnQ2hhbmdlLmVtaXQodGhpcy5zdG9yZS5jb25maWcoKSksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddICYmIGNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY29uZmlnJ10ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnKSB0aGlzLnN0b3JlLmxvYWQodGhpcy5jb25maWcpO1xuICAgICAgZWxzZSBpZiAoY2hhbmdlc1snY29uZmlnJ10uaXNGaXJzdENoYW5nZSgpKSB0aGlzLnN0b3JlLnJlc2V0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZXMnXSAmJiB0aGlzLmxhbmd1YWdlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuc3RvcmUuYWN0aXZlTGFuZ3VhZ2UoKTtcbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoYWN0aXZlKSkgdGhpcy5zdG9yZS5zZXRBY3RpdmVMYW5ndWFnZSh0aGlzLmxhbmd1YWdlc1swXSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd1c2VyUm9sZXMnXSkge1xuICAgICAgdGhpcy5zdG9yZS5zZXRVc2VyUm9sZXModGhpcy51c2VyUm9sZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBUb29sYmFyIGFjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJvdGVjdGVkIGRvU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnN0b3JlLmV4cG9ydENvbmZpZygpO1xuXG4gICAgLy8gU2F2aW5nIGlzIHRoZSBtb21lbnQgdGhpcyBlbnRpdHkncyBjb25maWcgY2hhbmdlcywgc28gYW55dGhpbmcgaG9sZGluZyBhIGNhY2hlZCBjb3B5IGlzXG4gICAgLy8gbm93IHN0YWxlIOKAlCBtb3N0IHZpc2libHkgYSByZWZlcmVuY2VkIGZpZWxkIGVsc2V3aGVyZSByZXNvbHZpbmcgYWdhaW5zdCB0aGUgb2xkIHNjaGVtYS5cbiAgICAvLyBDb25maWdTb3VyY2VTZXJ2aWNlIGNhY2hlcyBwZXIgZW50aXR5IGFuZCBleHBvc2VkIGNsZWFyQ2FjaGUgZnJvbSB0aGUgc3RhcnQsIGJ1dCBub3RoaW5nXG4gICAgLy8gZXZlciBjYWxsZWQgaXQsIHNvIGEgY2FjaGUgZW50cnkgbGl2ZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgcGFnZS5cbiAgICB0aGlzLmNvbmZpZ1NvdXJjZT8uY2xlYXJDYWNoZShjb25maWcuZW50aXR5KTtcblxuICAgIHRoaXMuc2F2ZS5lbWl0KGNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGpzb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zdG9yZS5leHBvcnRDb25maWcoKSwgbnVsbCwgMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIHZvaWQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5qc29uKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIDilIAgUkJBQyBzZXR0aW5ncyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcm90ZWN0ZWQgcm9sZXNGb3IoYWN0aW9uOiBrZXlvZiBFbnRpdHlQZXJtaXNzaW9ucyk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAvLyBSZXR1cm4gdGhlIHN0b3JlZCBhcnJheSAoc3RhYmxlIHJlZiBiZXR3ZWVuIG11dGF0aW9ucykgb3IgYSBzaGFyZWQgZW1wdHkg4oCUIE5PVCBhIGZyZXNoIFtdLFxuICAgIC8vIHdoaWNoIHdvdWxkIG1ha2UgdGhlIGJvdW5kIG1hdC1zZWxlY3QgcmUtZXZhbHVhdGUgZXZlcnkgQ0QgYW5kIGxvb3AgZm9yZXZlci5cbiAgICByZXR1cm4gdGhpcy5zdG9yZS5jb25maWcoKS5wZXJtaXNzaW9ucz8uW2FjdGlvbl0gPz8gRU1QVFlfUk9MRVM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0Um9sZXMoYWN0aW9uOiBrZXlvZiBFbnRpdHlQZXJtaXNzaW9ucywgcm9sZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5zZXRQZXJtaXNzaW9uKGFjdGlvbiwgcm9sZXMpO1xuICB9XG5cbiAgLyoqIFBhcnNlIGEgY29tbWEtc2VwYXJhdGVkIHJvbGUgc3RyaW5nIGludG8gYSB0cmltbWVkLCBkZS1kdXBsaWNhdGVkIGFycmF5LiAqL1xuICBwcm90ZWN0ZWQgc2V0Um9sZXNGcm9tVGV4dChhY3Rpb246IGtleW9mIEVudGl0eVBlcm1pc3Npb25zLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByb2xlcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAubWFwKHIgPT4gci50cmltKCkpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLnNldFBlcm1pc3Npb24oYWN0aW9uLCByb2xlcyk7XG4gIH1cbn1cbiIsIjxtYXQtdG9vbGJhciBjbGFzcz1cImRlYi10b29sYmFyXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gIDxtYXQtaWNvbj5kYXNoYm9hcmRfY3VzdG9taXplPC9tYXQtaWNvbj5cbiAgPHNwYW4gY2xhc3M9XCJkZWItdG9vbGJhcl9fdGl0bGVcIj5FbnRpdHkgQnVpbGRlcjwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJkZWItc3BhY2VyXCI+PC9zcGFuPlxuXG4gIEBpZiAoc3RvcmUucHJvYmxlbXMoKS5sZW5ndGgpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiZGViLXByb2JsZW1zXCJcbiAgICAgIFtjbGFzcy5kZWItcHJvYmxlbXMtLWVycm9yXT1cIiFzdG9yZS5pc1ZhbGlkKClcIlxuICAgICAgW21hdFRvb2x0aXBdPVwic3RvcmUucHJvYmxlbXMoKS5sZW5ndGggKyAnIGlzc3VlKHMpIOKAlCBob3ZlciBpdGVtcyBpbiB0aGUgbGlzdCdcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyBzdG9yZS5pc1ZhbGlkKCkgPyAnd2FybmluZycgOiAnZXJyb3InIH19PC9tYXQtaWNvbj5cbiAgICAgIHt7IHN0b3JlLmVycm9ycygpLmxlbmd0aCB9fSAvIHt7IHN0b3JlLnByb2JsZW1zKCkubGVuZ3RoIH19XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb3B5SnNvbigpXCI+XG4gICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+IENvcHkgSlNPTlxuICA8L2J1dHRvbj5cbiAgPCEtLSBwcmltYXJ5LCBub3QgYWNjZW50OiB3aGl0ZSBvbiBNYXRlcmlhbCdzIGRlZmF1bHQgcGluayBhY2NlbnQgaXMgMy4zMzoxLCBiZWxvdyBBQS4gLS0+XG4gIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIXN0b3JlLmlzVmFsaWQoKVwiIChjbGljayk9XCJkb1NhdmUoKVwiPlxuICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj4gU2F2ZVxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG5cbjxkaXYgY2xhc3M9XCJkZWItYm9keVwiPlxuICA8IS0tIOKUgOKUgOKUgCBMZWZ0OiBzZXR0aW5ncywgcGFsZXR0ZSwgdGFicyDilIDilIDilIAgLS0+XG4gIDxkaXYgY2xhc3M9XCJkZWItY29sIGRlYi1jb2wtLWxlZnRcIj5cbiAgICA8bWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkVudGl0eSBuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW25nTW9kZWxdPVwic3RvcmUuY29uZmlnKCkuZW50aXR5XCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInN0b3JlLnNldEVudGl0eU5hbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gY2xpZW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGViLXJvd1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cImRlYi1ncm93XCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkVkaXRpbmcgbGFuZ3VhZ2U8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0b3JlLmFjdGl2ZUxhbmd1YWdlKClcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRBY3RpdmVMYW5ndWFnZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGZvciAobCBvZiBsYW5ndWFnZXM7IHRyYWNrIGwpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibFwiPnt7IGwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgIFtuZ01vZGVsXT1cInN0b3JlLmNvbmZpZygpLm1hc2tEYXRhID8/IGZhbHNlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzdG9yZS5zZXRNYXNrRGF0YSgkZXZlbnQpXCJcbiAgICAgICAgPk1hc2sgdGhpcyBlbnRpdHkgKFJCQUMpPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwiZGViLXJiYWNcIj5cbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlBlcm1pc3Npb25zPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgcmJhY0FjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgQGlmIChhdmFpbGFibGVSb2xlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwiZGViLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IGFjdGlvbiB9fSByb2xlczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG11bHRpcGxlIFtuZ01vZGVsXT1cInJvbGVzRm9yKGFjdGlvbilcIiAobmdNb2RlbENoYW5nZSk9XCJzZXRSb2xlcyhhY3Rpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHJvbGUgb2YgYXZhaWxhYmxlUm9sZXM7IHRyYWNrIHJvbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInJvbGVcIj57eyByb2xlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJkZWItZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgYWN0aW9uIH19IHJvbGVzIChjb21tYS1zZXBhcmF0ZWQpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm9sZXNGb3IoYWN0aW9uKS5qb2luKCcsICcpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFJvbGVzRnJvbVRleHQoYWN0aW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICA8cCBjbGFzcz1cImRlYi1oaW50XCI+RW1wdHkgPSBubyByZXN0cmljdGlvbiBmb3IgdGhhdCBhY3Rpb24uPC9wPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cblxuICAgIDxtYXQtY2FyZD5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+PG1hdC1jYXJkLXRpdGxlPkFkZCBmaWVsZDwvbWF0LWNhcmQtdGl0bGU+PC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG5neC1maWVsZC1wYWxldHRlIChwaWNrKT1cInN0b3JlLmFkZEZpZWxkKCRldmVudClcIj48L25neC1maWVsZC1wYWxldHRlPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8bWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPG5neC10YWItbWFuYWdlcj48L25neC10YWItbWFuYWdlcj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cblxuICA8IS0tIOKUgOKUgOKUgCBDZW50ZXI6IGZpZWxkIGNhbnZhcyDilIDilIDilIAgLS0+XG4gIDxkaXYgY2xhc3M9XCJkZWItY29sIGRlYi1jb2wtLWNlbnRlclwiPlxuICAgIDxuZ3gtZW50aXR5LWJ1aWxkZXItY2FudmFzIC8+XG4gIDwvZGl2PlxuXG4gIDwhLS0g4pSA4pSA4pSAIFJpZ2h0OiBpbnNwZWN0b3Ig4pSA4pSA4pSAIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGViLWNvbCBkZWItY29sLS1yaWdodFwiPlxuICAgIDxtYXQtY2FyZD5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+PG1hdC1jYXJkLXRpdGxlPkZpZWxkIHByb3BlcnRpZXM8L21hdC1jYXJkLXRpdGxlPjwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxuZ3gtZmllbGQtaW5zcGVjdG9yPjwvbmd4LWZpZWxkLWluc3BlY3Rvcj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIOKUgOKUgOKUgCBGb290ZXI6IEpTT04gKyBvcHRpb25hbCBsaXZlIHByZXZpZXcg4pSA4pSA4pSAIC0tPlxuPGRpdiBjbGFzcz1cImRlYi1mb290ZXJcIj5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPG1hdC1wYW5lbC10aXRsZT48bWF0LWljb24+ZGF0YV9vYmplY3Q8L21hdC1pY29uPiZuYnNwO0NvbmZpZyBKU09OPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8cHJlIGNsYXNzPVwiZGViLWpzb25cIj57eyBqc29uIH19PC9wcmU+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICA8ZGl2IGNsYXNzPVwiZGViLXByZXZpZXctc2xvdFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuZ3hCdWlsZGVyUHJldmlld11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=