ets-fe-ng-sdk 18.0.72 → 18.0.73

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.
@@ -78,9 +78,10 @@ export class ValidationMessageComponent {
78
78
  });
79
79
  }
80
80
  logErrors() {
81
- if (this.debug())
81
+ if (this.debug()) {
82
82
  debugger;
83
- console.log(this.errors(), this.computedErrors());
83
+ console.log(this.errors(), this.computedErrors());
84
+ }
84
85
  }
85
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValidationMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
86
87
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ValidationMessageComponent, isStandalone: true, selector: "app-validation-message", inputs: { _maxLength: { classPropertyName: "_maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, _minLength: { classPropertyName: "_minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, customMessage: { classPropertyName: "customMessage", publicName: "customMessage", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, ignoreDirtiness: { classPropertyName: "ignoreDirtiness", publicName: "ignoreDirtiness", isSignal: true, isRequired: false, transformFunction: null }, input: { classPropertyName: "input", publicName: "input", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hideOverflow: { classPropertyName: "hideOverflow", publicName: "hideOverflow", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { label: "labelChange" }, ngImport: i0, template: "<div class=\"text-danger\" (click)=\"logErrors()\" [ngClass]=\"{ hideOverflow: hideOverflow() }\" #el>\n @for (error of computedErrors(); track error) {\n <span\n class=\"me-2 errormssg hide-scroll\"\n [matTooltip]=\"ele.innerText\"\n [matTooltipDisabled]=\"\n ele.scrollHeight <= ele.offsetHeight && ele.scrollWidth <= ele.offsetWidth\n \"\n [innerHTML]=\"error | appTranslate: translationConfig | async\"\n #ele></span>\n }\n</div>\n", styles: [".text-danger{margin-top:5px;min-height:25px;position:relative}.errormssg{height:25px;display:block;overflow:auto}.hideOverflow{height:25px;overflow:hidden}\n"], dependencies: [{ kind: "pipe", type: i0.forwardRef(() => AsyncPipe), name: "async" }, { kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i0.forwardRef(() => SDKTranslatePipe), name: "appTranslate" }, { kind: "ngmodule", type: i0.forwardRef(() => MatTooltipModule) }, { kind: "directive", type: i0.forwardRef(() => i2_1.MatTooltip), selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -112,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
112
113
  standalone: true,
113
114
  }]
114
115
  }] });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULElBQUksRUFFSixRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQW1CcEUsTUFBTSxPQUFPLDBCQUEwQjtJQWhCdkM7UUFpQlcsZUFBVSxHQUFHLEtBQUssQ0FBUyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RCxlQUFVLEdBQUcsS0FBSyxDQUFTLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzlELFlBQU8sR0FBRyxLQUFLLEVBQW1CLENBQUM7UUFDbkMsa0JBQWEsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxQyxVQUFLLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDekIsb0JBQWUsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUNuQyxVQUFLLEdBQUcsS0FBSyxFQUFtQyxDQUFDO1FBQ2pELFVBQUssR0FBRyxLQUFLLEVBQXNCLENBQUM7UUFDcEMsaUJBQVksR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFcEMsc0JBQWlCLEdBQXNCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hELG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUU1RSxzQkFBaUIsR0FBRyxRQUFRLENBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQzdELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUFFLFFBQVEsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFTyxjQUFTLEdBQUcsUUFBUSxDQUFxQixHQUFHLEVBQUU7WUFDckQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUN6QixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUM3QixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxRQUFRLENBQXFCLEdBQUcsRUFBRTtZQUNyRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQ3pCLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQzdCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBRTdFLHNEQUFzRDtRQUN0RCxpQkFBaUI7UUFDakIsdUJBQXVCO1FBQ3ZCLFFBQVE7UUFFQyxRQUFHLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFdkMsV0FBTSxHQUFHLFFBQVEsQ0FBNkIsR0FBRyxFQUFFO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ00sWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ00sVUFBSyxHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ00sWUFBTyxHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsb0JBQW9CO1FBQ1gsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLG1EQUFtRDtZQUNuRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsUUFBUSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDMUIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFDeEIsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsRUFDM0MsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDNUIsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFDcEMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFDeEMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUzQixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDO2dCQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7cUJBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDeEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDaEIsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLElBQXVCLENBQUMsRUFBRSxPQUFRLEVBQUUsSUFBSSxFQUFFLElBQVcsRUFBRSxFQUM5RSxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLElBQUksYUFBYSxDQUNoQyxDQUNGO2dCQUNMLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztRQUVNLGtCQUFhLEdBQUcsUUFBUSxDQUFTLEdBQUcsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsUUFBUSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0tBTUo7SUFKQyxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsUUFBUSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7OEdBdkdVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHN5Q0N0Q3ZDLCtkQVlBLHNPRG1CSSxTQUFTLGtFQUNULFlBQVksa0tBQ1osZ0JBQWdCLHlFQUVoQixnQkFBZ0I7OzJGQUdQLDBCQUEwQjtrQkFoQnRDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBR3RCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO3dCQUNsQyxnQkFBZ0I7cUJBQ2pCOztBQWdISCxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBS0UsUUFBRyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUNoQzs4R0FIWSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFKNUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgUGlwZSxcbiAgUGlwZVRyYW5zZm9ybSxcbiAgY29tcHV0ZWQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNES1RyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRVZhbGlkYXRpb25UeXBlLCBJT2JqZWN0TGl0ZXJhbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRpb24tbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgb2YsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRvU2lnbmFsLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBJVHJhbnNsYXRvckNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmFuc2xhdG9yLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXZhbGlkYXRpb24tbWVzc2FnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIEFzeW5jUGlwZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgICBmb3J3YXJkUmVmKCgpID0+IEVycm9yTWVzc2FnZVBpcGUpLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgX21heExlbmd0aCA9IGlucHV0PG51bWJlcj4odW5kZWZpbmVkLCB7IGFsaWFzOiAnbWF4TGVuZ3RoJyB9KTtcbiAgcmVhZG9ubHkgX21pbkxlbmd0aCA9IGlucHV0PG51bWJlcj4odW5kZWZpbmVkLCB7IGFsaWFzOiAnbWluTGVuZ3RoJyB9KTtcbiAgcmVhZG9ubHkgY29udHJvbCA9IGlucHV0PEFic3RyYWN0Q29udHJvbD4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tTWVzc2FnZSA9IGlucHV0KCdWYWx1ZSBpcyBpbnZhbGlkJyk7XG4gIHJlYWRvbmx5IGRlYnVnID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlRGlydGluZXNzID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaW5wdXQgPSBpbnB1dDxJbnB1dEJhc2ljQ29tcG9uZW50IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsYWJlbCA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaGlkZU92ZXJmbG93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25Db25maWc6IElUcmFuc2xhdG9yQ29uZmlnID0geyBub0xvYWRlcjogdHJ1ZSB9O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tcHV0ZWRDb250cm9sID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb250cm9sKCkgfHwgdGhpcy5pbnB1dCgpPy5jb250cm9sKCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmb3JtRmllbGROb3RpZmllciA9IHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmNvbXB1dGVkQ29udHJvbCkucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbnRyb2woKSksXG4gICAgICBzd2l0Y2hNYXAoKGNvbnRyb2wpID0+IChjb250cm9sID8gY29udHJvbC5ldmVudHMgOiBvZihudWxsKSkpLFxuICAgICAgdGFwKChlKSA9PiB7XG4gICAgICAgIGU7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcblxuICByZWFkb25seSBtaW5MZW5ndGggPSBjb21wdXRlZDxudW1iZXIgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBjb25zdCB0ID0gdGhpcy5fbWluTGVuZ3RoKCksXG4gICAgICBpID0gdGhpcy5pbnB1dCgpPy5taW5MZW5ndGgoKSxcbiAgICAgIGkyID0gdGhpcy5pbnB1dCgpPy5taW5TaWduYWwoKTtcbiAgICByZXR1cm4gdCB8fCBpIHx8ICtpMjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWF4TGVuZ3RoID0gY29tcHV0ZWQ8bnVtYmVyIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgY29uc3QgdCA9IHRoaXMuX21heExlbmd0aCgpLFxuICAgICAgaSA9IHRoaXMuaW5wdXQoKT8ubWF4TGVuZ3RoKCksXG4gICAgICBpMiA9IHRoaXMuaW5wdXQoKT8ubWF4U2lnbmFsKCk7XG4gICAgcmV0dXJuIHQgfHwgaSB8fCAraTI7XG4gIH0pO1xuICAvLyByZWFkb25seSBpbnB1dCQgPSB0b09ic2VydmFibGUodGhpcy5waW5wdXQpLnBpcGUoc3RhcnRXaXRoKHRoaXMuaW5wdXQoKSkpO1xuXG4gIC8vICAgZXJyb3JzID0gY29tcHV0ZWQ8SU9iamVjdExpdGVyYWx8dW5kZWZpbmVkPigoKT0+e1xuICAvLyBjb25zdCBjb250cm9sc1xuICAvLyAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAvLyAgIH0pO1xuXG4gIHJlYWRvbmx5IHZtUyA9IGluamVjdChWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IGVycm9ycyA9IGNvbXB1dGVkPElPYmplY3RMaXRlcmFsIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB7IC4uLih0aGlzLmNvbXB1dGVkQ29udHJvbCgpPy5lcnJvcnMgfHwge30pIH07XG4gIH0pO1xuICByZWFkb25seSBwZW5kaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlZENvbnRyb2woKT8ucGVuZGluZztcbiAgfSk7XG4gIHJlYWRvbmx5IGRpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlZENvbnRyb2woKT8uZGlydHk7XG4gIH0pO1xuICByZWFkb25seSB0b3VjaGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlZENvbnRyb2woKT8udG91Y2hlZDtcbiAgfSk7XG4gIC8vIGNvbXB1dGVDb3VudCA9IDA7XG4gIHJlYWRvbmx5IGNvbXB1dGVkRXJyb3JzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFUlJPUiBjaGVjaycsICsrdGhpcy5jb21wdXRlQ291bnQpO1xuICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZXJyb3JzKCksXG4gICAgICBwZW5kaW5nID0gdGhpcy5wZW5kaW5nKCksXG4gICAgICB2YWxpZGF0aW9ucyA9IHRoaXMudm1TLnZhbGlkYXRpb25NZXNzYWdlcygpLFxuICAgICAgbGFiZWwgPSB0aGlzLmxhYmVsQ29tcHV0ZWQoKSxcbiAgICAgIG1heExlbmd0aCA9IHRoaXMubWF4TGVuZ3RoKCksXG4gICAgICBtaW5MZW5ndGggPSB0aGlzLm1pbkxlbmd0aCgpLFxuICAgICAgY3VzdG9tTWVzc2FnZSA9IHRoaXMuY3VzdG9tTWVzc2FnZSgpLFxuICAgICAgaWdub3JlRGlydGluZXNzID0gdGhpcy5pZ25vcmVEaXJ0aW5lc3MoKSxcbiAgICAgIGRpcnR5ID0gdGhpcy5kaXJ0eSgpLFxuICAgICAgdG91Y2hlZCA9IHRoaXMudG91Y2hlZCgpO1xuXG4gICAgcmV0dXJuIGVycm9ycyAmJiAoaWdub3JlRGlydGluZXNzIHx8IGRpcnR5IHx8IHRvdWNoZWQpXG4gICAgICA/IE9iamVjdC5lbnRyaWVzKGVycm9ycylcbiAgICAgICAgICAuY29uY2F0KHBlbmRpbmcgPyBbW0VWYWxpZGF0aW9uVHlwZS5wZW5kaW5nLCB0cnVlXV0gOiBbXSlcbiAgICAgICAgICAubWFwKChbdHlwZSwgY29udHJvbE1lc3NhZ2VdKSA9PlxuICAgICAgICAgICAgdGhpcy52bVMudHJhbnNmb3JtKFxuICAgICAgICAgICAgICB7IG1lc3NhZ2U6IHZhbGlkYXRpb25zW3R5cGUgYXMgRVZhbGlkYXRpb25UeXBlXT8ubWVzc2FnZSEsIHR5cGU6IHR5cGUgYXMgYW55IH0sXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgICAgICAgIG1pbkxlbmd0aCxcbiAgICAgICAgICAgICAgY29udHJvbE1lc3NhZ2UgfHwgY3VzdG9tTWVzc2FnZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgOiBbXTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbGFiZWxDb21wdXRlZCA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmRlYnVnKCkpIGRlYnVnZ2VyO1xuICAgIHRoaXMubGFiZWwoKTtcbiAgICB0aGlzLmlucHV0KCk/LmxhYmVsU2lnbmFsPy4oKTtcbiAgICByZXR1cm4gdGhpcy5sYWJlbCgpIHx8IHRoaXMuaW5wdXQoKT8ubGFiZWxTaWduYWw/LigpO1xuICB9KTtcblxuICBsb2dFcnJvcnMoKSB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgY29uc29sZS5sb2codGhpcy5lcnJvcnMoKSwgdGhpcy5jb21wdXRlZEVycm9ycygpKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdlcnJvck1lc3NhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBFcnJvck1lc3NhZ2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHZtUyA9IGluamVjdChWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UpO1xuICB0cmFuc2Zvcm0gPSB0aGlzLnZtUy50cmFuc2Zvcm07XG59XG4iLCI8ZGl2IGNsYXNzPVwidGV4dC1kYW5nZXJcIiAoY2xpY2spPVwibG9nRXJyb3JzKClcIiBbbmdDbGFzc109XCJ7IGhpZGVPdmVyZmxvdzogaGlkZU92ZXJmbG93KCkgfVwiICNlbD5cbiAgQGZvciAoZXJyb3Igb2YgY29tcHV0ZWRFcnJvcnMoKTsgdHJhY2sgZXJyb3IpIHtcbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJtZS0yIGVycm9ybXNzZyBoaWRlLXNjcm9sbFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJlbGUuaW5uZXJUZXh0XCJcbiAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiXG4gICAgICAgIGVsZS5zY3JvbGxIZWlnaHQgPD0gZWxlLm9mZnNldEhlaWdodCAmJiBlbGUuc2Nyb2xsV2lkdGggPD0gZWxlLm9mZnNldFdpZHRoXG4gICAgICBcIlxuICAgICAgW2lubmVySFRNTF09XCJlcnJvciB8IGFwcFRyYW5zbGF0ZTogdHJhbnNsYXRpb25Db25maWcgfCBhc3luY1wiXG4gICAgICAjZWxlPjwvc3Bhbj5cbiAgfVxuPC9kaXY+XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULElBQUksRUFFSixRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQW1CcEUsTUFBTSxPQUFPLDBCQUEwQjtJQWhCdkM7UUFpQlcs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MEJBQTBCO2tCQWhCdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FHdEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7d0JBQ2xDLGdCQUFnQjtxQkFDakI7O0FBa0hILE1BQU0sT0FBTyxnQkFBZ0I7SUFKN0I7UUFLRSxRQUFHLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0tBQ2hDOzhHQUhZLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBQaXBlLFxuICBQaXBlVHJhbnNmb3JtLFxuICBjb21wdXRlZCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU0RLVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yLCBBc3luY1BpcGUsIENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBFVmFsaWRhdGlvblR5cGUsIElPYmplY3RMaXRlcmFsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdG9TaWduYWwsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IElUcmFuc2xhdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RyYW5zbGF0b3IubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdmFsaWRhdGlvbi1tZXNzYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTmdGb3IsXG4gICAgQXN5bmNQaXBlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTREtUcmFuc2xhdGVQaXBlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gRXJyb3JNZXNzYWdlUGlwZSksXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQge1xuICByZWFkb25seSBfbWF4TGVuZ3RoID0gaW5wdXQ8bnVtYmVyPih1bmRlZmluZWQsIHsgYWxpYXM6ICdtYXhMZW5ndGgnIH0pO1xuICByZWFkb25seSBfbWluTGVuZ3RoID0gaW5wdXQ8bnVtYmVyPih1bmRlZmluZWQsIHsgYWxpYXM6ICdtaW5MZW5ndGgnIH0pO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8QWJzdHJhY3RDb250cm9sPigpO1xuICByZWFkb25seSBjdXN0b21NZXNzYWdlID0gaW5wdXQoJ1ZhbHVlIGlzIGludmFsaWQnKTtcbiAgcmVhZG9ubHkgZGVidWcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVEaXJ0aW5lc3MgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpbnB1dCA9IGlucHV0PElucHV0QmFzaWNDb21wb25lbnQgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGxhYmVsID0gbW9kZWw8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBoaWRlT3ZlcmZsb3cgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSB0cmFuc2xhdGlvbkNvbmZpZzogSVRyYW5zbGF0b3JDb25maWcgPSB7IG5vTG9hZGVyOiB0cnVlIH07XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21wdXRlZENvbnRyb2wgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRyb2woKSB8fCB0aGlzLmlucHV0KCk/LmNvbnRyb2woKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvcm1GaWVsZE5vdGlmaWVyID0gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuY29tcHV0ZWRDb250cm9sKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuY29udHJvbCgpKSxcbiAgICAgIHN3aXRjaE1hcCgoY29udHJvbCkgPT4gKGNvbnRyb2wgPyBjb250cm9sLmV2ZW50cyA6IG9mKG51bGwpKSksXG4gICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgZTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgICB9KSxcbiAgICApLFxuICApO1xuXG4gIHJlYWRvbmx5IG1pbkxlbmd0aCA9IGNvbXB1dGVkPG51bWJlciB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGNvbnN0IHQgPSB0aGlzLl9taW5MZW5ndGgoKSxcbiAgICAgIGkgPSB0aGlzLmlucHV0KCk/Lm1pbkxlbmd0aCgpLFxuICAgICAgaTIgPSB0aGlzLmlucHV0KCk/Lm1pblNpZ25hbCgpO1xuICAgIHJldHVybiB0IHx8IGkgfHwgK2kyO1xuICB9KTtcblxuICByZWFkb25seSBtYXhMZW5ndGggPSBjb21wdXRlZDxudW1iZXIgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBjb25zdCB0ID0gdGhpcy5fbWF4TGVuZ3RoKCksXG4gICAgICBpID0gdGhpcy5pbnB1dCgpPy5tYXhMZW5ndGgoKSxcbiAgICAgIGkyID0gdGhpcy5pbnB1dCgpPy5tYXhTaWduYWwoKTtcbiAgICByZXR1cm4gdCB8fCBpIHx8ICtpMjtcbiAgfSk7XG4gIC8vIHJlYWRvbmx5IGlucHV0JCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnBpbnB1dCkucGlwZShzdGFydFdpdGgodGhpcy5pbnB1dCgpKSk7XG5cbiAgLy8gICBlcnJvcnMgPSBjb21wdXRlZDxJT2JqZWN0TGl0ZXJhbHx1bmRlZmluZWQ+KCgpPT57XG4gIC8vIGNvbnN0IGNvbnRyb2xzXG4gIC8vICAgICByZXR1cm4gdW5kZWZpbmVkXG4gIC8vICAgfSk7XG5cbiAgcmVhZG9ubHkgdm1TID0gaW5qZWN0KFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgZXJyb3JzID0gY29tcHV0ZWQ8SU9iamVjdExpdGVyYWwgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgcmV0dXJuIHsgLi4uKHRoaXMuY29tcHV0ZWRDb250cm9sKCk/LmVycm9ycyB8fCB7fSkgfTtcbiAgfSk7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbXB1dGVkQ29udHJvbCgpPy5wZW5kaW5nO1xuICB9KTtcbiAgcmVhZG9ubHkgZGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbXB1dGVkQ29udHJvbCgpPy5kaXJ0eTtcbiAgfSk7XG4gIHJlYWRvbmx5IHRvdWNoZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbXB1dGVkQ29udHJvbCgpPy50b3VjaGVkO1xuICB9KTtcbiAgLy8gY29tcHV0ZUNvdW50ID0gMDtcbiAgcmVhZG9ubHkgY29tcHV0ZWRFcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ0VSUk9SIGNoZWNrJywgKyt0aGlzLmNvbXB1dGVDb3VudCk7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5lcnJvcnMoKSxcbiAgICAgIHBlbmRpbmcgPSB0aGlzLnBlbmRpbmcoKSxcbiAgICAgIHZhbGlkYXRpb25zID0gdGhpcy52bVMudmFsaWRhdGlvbk1lc3NhZ2VzKCksXG4gICAgICBsYWJlbCA9IHRoaXMubGFiZWxDb21wdXRlZCgpLFxuICAgICAgbWF4TGVuZ3RoID0gdGhpcy5tYXhMZW5ndGgoKSxcbiAgICAgIG1pbkxlbmd0aCA9IHRoaXMubWluTGVuZ3RoKCksXG4gICAgICBjdXN0b21NZXNzYWdlID0gdGhpcy5jdXN0b21NZXNzYWdlKCksXG4gICAgICBpZ25vcmVEaXJ0aW5lc3MgPSB0aGlzLmlnbm9yZURpcnRpbmVzcygpLFxuICAgICAgZGlydHkgPSB0aGlzLmRpcnR5KCksXG4gICAgICB0b3VjaGVkID0gdGhpcy50b3VjaGVkKCk7XG5cbiAgICByZXR1cm4gZXJyb3JzICYmIChpZ25vcmVEaXJ0aW5lc3MgfHwgZGlydHkgfHwgdG91Y2hlZClcbiAgICAgID8gT2JqZWN0LmVudHJpZXMoZXJyb3JzKVxuICAgICAgICAgIC5jb25jYXQocGVuZGluZyA/IFtbRVZhbGlkYXRpb25UeXBlLnBlbmRpbmcsIHRydWVdXSA6IFtdKVxuICAgICAgICAgIC5tYXAoKFt0eXBlLCBjb250cm9sTWVzc2FnZV0pID0+XG4gICAgICAgICAgICB0aGlzLnZtUy50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgIHsgbWVzc2FnZTogdmFsaWRhdGlvbnNbdHlwZSBhcyBFVmFsaWRhdGlvblR5cGVdPy5tZXNzYWdlISwgdHlwZTogdHlwZSBhcyBhbnkgfSxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgICAgbWluTGVuZ3RoLFxuICAgICAgICAgICAgICBjb250cm9sTWVzc2FnZSB8fCBjdXN0b21NZXNzYWdlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICA6IFtdO1xuICB9KTtcblxuICByZWFkb25seSBsYWJlbENvbXB1dGVkID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgdGhpcy5sYWJlbCgpO1xuICAgIHRoaXMuaW5wdXQoKT8ubGFiZWxTaWduYWw/LigpO1xuICAgIHJldHVybiB0aGlzLmxhYmVsKCkgfHwgdGhpcy5pbnB1dCgpPy5sYWJlbFNpZ25hbD8uKCk7XG4gIH0pO1xuXG4gIGxvZ0Vycm9ycygpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZygpKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZXJyb3JzKCksIHRoaXMuY29tcHV0ZWRFcnJvcnMoKSk7XG4gICAgfVxuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2Vycm9yTWVzc2FnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEVycm9yTWVzc2FnZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdm1TID0gaW5qZWN0KFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSk7XG4gIHRyYW5zZm9ybSA9IHRoaXMudm1TLnRyYW5zZm9ybTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiIChjbGljayk9XCJsb2dFcnJvcnMoKVwiIFtuZ0NsYXNzXT1cInsgaGlkZU92ZXJmbG93OiBoaWRlT3ZlcmZsb3coKSB9XCIgI2VsPlxuICBAZm9yIChlcnJvciBvZiBjb21wdXRlZEVycm9ycygpOyB0cmFjayBlcnJvcikge1xuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cIm1lLTIgZXJyb3Jtc3NnIGhpZGUtc2Nyb2xsXCJcbiAgICAgIFttYXRUb29sdGlwXT1cImVsZS5pbm5lclRleHRcIlxuICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJcbiAgICAgICAgZWxlLnNjcm9sbEhlaWdodCA8PSBlbGUub2Zmc2V0SGVpZ2h0ICYmIGVsZS5zY3JvbGxXaWR0aCA8PSBlbGUub2Zmc2V0V2lkdGhcbiAgICAgIFwiXG4gICAgICBbaW5uZXJIVE1MXT1cImVycm9yIHwgYXBwVHJhbnNsYXRlOiB0cmFuc2xhdGlvbkNvbmZpZyB8IGFzeW5jXCJcbiAgICAgICNlbGU+PC9zcGFuPlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -30,6 +30,9 @@ export class TableInputComponent extends FormGeneratorComponent {
30
30
  this.formArray = input();
31
31
  this.filterContainerClass = input();
32
32
  this.border = input(true);
33
+ this.filterLikeMatch = input();
34
+ // readonly _filterExactMatch = input<boolean>(true, { alias: 'filterExactMatch' });
35
+ this.filterExactMatch = computed(() => (this.filterLikeMatch() ? false : true));
33
36
  this.isShow = input();
34
37
  this.pageSize = signal(10);
35
38
  this.pageState = signal(null);
@@ -41,17 +44,20 @@ export class TableInputComponent extends FormGeneratorComponent {
41
44
  this.childrenFormSchemaMap = {};
42
45
  this.filterFormValueSignal = toSignal(this.filterForm.valueChanges);
43
46
  this.formArrayLengthSignal = toSignal(toObservable(this.formArray).pipe(switchMap((form) => form?.valueChanges.pipe(map(() => form?.length)))));
44
- this.filteredFormArray = computed(() => {
47
+ this.formArrayIndexed = computed(() => {
45
48
  this.formArrayLengthSignal();
46
- const formArray = this.formArray(), filterFormValue = this.filterFormValueSignal();
47
- const formGroups = formArray?.controls?.map((c, index) => ({
49
+ return this.formArray()?.controls?.map((c, index) => ({
48
50
  index,
49
51
  form: c,
50
52
  id: this.utilityService.generateUUID(),
51
53
  }));
54
+ });
55
+ this.filteredFormArray = computed(() => {
56
+ this.formArrayLengthSignal();
57
+ const formGroups = this.formArrayIndexed(), filterFormValue = this.filterFormValueSignal();
52
58
  const filterObject = this.filterFormArrayGroupPipe.queryMapper(filterFormValue);
53
59
  return filterObject
54
- ? formGroups.filter(({ form }) => this.filterFormArrayGroupPipe.filterFunc(filterObject)(form))
60
+ ? formGroups.filter(({ form }) => this.filterFormArrayGroupPipe.filterFunc(filterObject, this.filterExactMatch())(form))
55
61
  : formGroups;
56
62
  });
57
63
  this.paginatedAndFilteredFormArray = computed(() => {
@@ -174,7 +180,7 @@ export class TableInputComponent extends FormGeneratorComponent {
174
180
  this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
175
181
  }
176
182
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm\"\n [formSchema]=\"filterForms()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\" (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["arrayLength", "pageSize", "pageIndex", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageSizeChange", "pageIndexChange", "pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, filterLikeMatch: { classPropertyName: "filterLikeMatch", publicName: "filterLikeMatch", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator\n [form]=\"filterForm\"\n [formSchema]=\"filterForms()\"\n [gridLGStyle]=\"3\"\n [showSubmitBtn]=\"false\"\n (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\" (click)=\"logColumn(item)\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"\n handleActionButtonClick(subForm.index, subForm.form, $event)\n \"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div\n class=\"\"\n [hidden]=\"\n !usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\n \">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "translatorOptions", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "helpShowDelay", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["arrayLength", "pageSize", "pageIndex", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageSizeChange", "pageIndexChange", "pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
178
184
  }
179
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: TableInputComponent, decorators: [{
180
186
  type: Component,
@@ -231,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
231
237
  type: ViewChild,
232
238
  args: [PaginatorComponent]
233
239
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUVSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0os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dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0tc2NoZW1hLm1vZGVsJztcbmltcG9ydCB7XG4gIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgRm9ybVZhbHVlUGlwZSxcbiAgRnVuY3Rpb25DYWxsZXIyLFxuICBIYXNGb3JtVmFsdWVQaXBlLFxuICBUb0FueVBpcGUsXG59IGZyb20gJy4uLy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5cbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaG9uZU51bWJlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEFzeW5jUGlwZSxcbiAgSnNvblBpcGUsXG4gIE5nQ2xhc3MsXG4gIE5nRm9yLFxuICBOZ0lmLFxuICBOZ1N3aXRjaCxcbiAgTmdTd2l0Y2hDYXNlLFxuICBOZ1N3aXRjaERlZmF1bHQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50JztcblxuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2RhbC9tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFRhYmxlSW5wdXRSb3dDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWlucHV0LXJvdy90YWJsZS1pbnB1dC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJ0biB9IGZyb20gJy4uLy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU0RLVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqIFRhYmxlIElucHV0IENvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YWJsZS1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gICAgRm9ybUdlbmVyYXRvckNvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGb3JtVmFsdWVQaXBlLFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBIYXNGb3JtVmFsdWVQaXBlLFxuICAgIElucHV0QmFzaWNDb21wb25lbnQsXG4gICAgSnNvblBpcGUsXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIE1hdEV4cGFuc2lvbk1vZHVsZSxcbiAgICBNYXRUYWJzTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBOZ0ZvcixcbiAgICBOZ0lmLFxuICAgIE5nU3dpdGNoLFxuICAgIE5nU3dpdGNoQ2FzZSxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgUGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIFBhZ2luYXRvclBpcGUsXG4gICAgUGhvbmVOdW1iZXJDb21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUYWJsZUlucHV0Um93Q29tcG9uZW50LFxuICAgIFRvQW55UGlwZSxcbiAgICBTREtUcmFuc2xhdGVQaXBlLFxuICAgIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLCBQYWdpbmF0b3JQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVJbnB1dENvbXBvbmVudDxcbiAgICBURm9ybUdyb3VwIGV4dGVuZHMge1xuICAgICAgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gICAgfSA9IGFueSxcbiAgPlxuICBleHRlbmRzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8VEZvcm1Hcm91cD5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgbG9nQ29sdW1uKF90MjA6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+KSB7XG4gICAgY29uc29sZS5sb2coX3QyMCk7XG4gIH1cbiAgcmVhZG9ubHkgZm9ybUFycmF5ID0gaW5wdXQ8Rm9ybUFycmF5PEZvcm1Hcm91cDxURm9ybUdyb3VwPj4+KCk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyQ29udGFpbmVyQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGJvcmRlciA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSBpc1Nob3cgPSBpbnB1dDxib29sZWFuPigpO1xuICBASW5wdXQoJ3BhZ2VTaXplJykgc2V0IF9wYWdlU2l6ZSh2OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2VTaXplLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBwYWdlU2l6ZSA9IHNpZ25hbDxudW1iZXI+KDEwKTtcbiAgcmVhZG9ubHkgcGFnZVN0YXRlID0gc2lnbmFsPHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfT4obnVsbCk7XG4gIHJlYWRvbmx5IGFjdGlvbkJ0bnMgPSBpbnB1dDxJVGFibGVJbnB1dEJ0bltdPigpO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSwgYWxpYXM6ICdmb3JtU2NoZW1hJyB9KSBvdmVycmlkZSBzZXQgX2Zvcm1TY2hlbWEoXG4gICAgdjogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSxcbiAgKSB7XG4gICAgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHYpO1xuICAgIHN1cGVyLl9mb3JtU2NoZW1hID0gdjtcbiAgfVxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBzaW5nbGVGb3JtU3RydWN0dXJlOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgZGVsZXRlIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBkZWxldGVSb3dGdW5jOiAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXRhPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wyd2YWx1ZSddLFxuICAgIGNvbmZpZz86IHsgYnRuOiBCdG5Db21wb25lbnQgfSxcbiAgKSA9PiBhbnk7XG4gIC8qKlxuICAgKiBMZWF2ZSBlbXB0eSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgYWRkIGJ1dHRvbiB0byBzaG93XG4gICAqL1xuICBASW5wdXQoKSBhZGRSb3dGdW5jOiAoaW5kZXg6IG51bWJlciwgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSkgPT4gYW55O1xuICBASW5wdXQoJ3VzZVBhZ2luYXRvcicpIHNldCBfdXNlUGFnaW5hdG9yKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KHRydWUpO1xuICAgICAgdGhpcy5wYWdlU2l6ZS51cGRhdGUoKHBhZ2VTaXplKSA9PiBwYWdlU2l6ZSB8fCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlUGFnaW5hdG9yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplLnNldCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHRhYmxlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCd0YWJsZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLXJlc3BvbnNpdmUgdGFibGUtYm9yZGVybGVzcycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyRm9ybXMgPSBzaWduYWw8SUZvcm1TY2hlbWFbXT4oW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlUGFnaW5hdG9yID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgY2hpbGRyZW5Gb3JtU2NoZW1hTWFwOiB7XG4gICAgW2sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiB7XG4gICAgICBmb3JtU2NoZW1hOiBJRm9ybVNjaGVtYVtdO1xuICAgICAgZm9ybVNjaGVtYVN0cjogc3RyaW5nW107XG4gICAgfTtcbiAgfSA9IHt9O1xuICByZWZyZXNoZXI6IG51bWJlcjtcbiAgZm9ybUFycmF5UGFnaW5hdGlvblN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSBwYWdpbmF0b3JDb21wb25lbnQ6IFBhZ2luYXRvckNvbXBvbmVudDtcblxuICByZWFkb25seSBmaWx0ZXJGb3JtVmFsdWVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzKTtcbiAgcmVhZG9ubHkgZm9ybUFycmF5TGVuZ3RoU2lnbmFsID0gdG9TaWduYWw8bnVtYmVyPihcbiAgICB0b09ic2VydmFibGUodGhpcy5mb3JtQXJyYXkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGZvcm0pID0+IGZvcm0/LnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgoKSA9PiBmb3JtPy5sZW5ndGgpKSksXG4gICAgKSxcbiAgKTtcblxuICByZWFkb25seSBmaWx0ZXJlZEZvcm1BcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmZvcm1BcnJheUxlbmd0aFNpZ25hbCgpO1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUFycmF5KCksXG4gICAgICBmaWx0ZXJGb3JtVmFsdWUgPSB0aGlzLmZpbHRlckZvcm1WYWx1ZVNpZ25hbCgpO1xuICAgIGNvbnN0IGZvcm1Hcm91cHMgPSBmb3JtQXJyYXk/LmNvbnRyb2xzPy5tYXAoKGMsIGluZGV4KSA9PiAoe1xuICAgICAgaW5kZXgsXG4gICAgICBmb3JtOiBjLFxuICAgICAgaWQ6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCksXG4gICAgfSkpO1xuICAgIGNvbnN0IGZpbHRlck9iamVjdCA9IHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLnF1ZXJ5TWFwcGVyKGZpbHRlckZvcm1WYWx1ZSk7XG4gICAgcmV0dXJuIGZpbHRlck9iamVjdFxuICAgICAgPyBmb3JtR3JvdXBzLmZpbHRlcigoeyBmb3JtIH0pID0+XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUuZmlsdGVyRnVuYyhmaWx0ZXJPYmplY3QpKGZvcm0pLFxuICAgICAgICApXG4gICAgICA6IGZvcm1Hcm91cHM7XG4gIH0pO1xuICByZWFkb25seSBwYWdpbmF0ZWRBbmRGaWx0ZXJlZEZvcm1BcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmZpbHRlcmVkRm9ybUFycmF5KCksXG4gICAgICBwYWdlU3RhdGUgPSB0aGlzLnBhZ2VTdGF0ZSgpO1xuICAgIHJldHVybiB0aGlzLnVzZVBhZ2luYXRvcigpXG4gICAgICA/IHRoaXMucGFnaW5hdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgZm9ybUFycmF5LFxuICAgICAgICAgIHBhZ2VTdGF0ZT8ucGFnZVNpemUgfHwgdGhpcy5wYWdlU2l6ZSgpLFxuICAgICAgICAgIHBhZ2VTdGF0ZT8ucGFnZUluZGV4IHx8IDAsXG4gICAgICAgIClcbiAgICAgIDogZm9ybUFycmF5O1xuICB9KTtcblxuICByZWFkb25seSBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyZWRGb3JtQXJyYXkoKS5sZW5ndGgpO1xuXG4gIHB1YmxpYyBvdmVycmlkZSB1dGlsaXR5U2VydmljZSA9IGluamVjdChVdGlsaXR5U2VydmljZSk7XG4gIHB1YmxpYyBmaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUgPSBpbmplY3QoRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlKTtcbiAgcHVibGljIHBhZ2luYXRvclBpcGUgPSBpbmplY3QoUGFnaW5hdG9yUGlwZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlUGFnaW5hdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdXNlUGFnaW5hdG9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWZyZXNoZXIgPSBNYXRoLnJhbmRvbSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuZm9ybUFycmF5UGFnaW5hdGlvblN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gc3VwZXIub25EZXN0cm95KCk7XG4gIH1cblxuICBwYWdlQ2hhbmdlZCgkZXZlbnQ6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSkge1xuICAgIHRoaXMucGFnZVN0YXRlLnNldCgkZXZlbnQpO1xuICB9XG5cbiAgcmVzZXRQYWdpbmF0b3IoKSB7XG4gICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlRm9ybWF0Rm9ybVNjaGVtYSA9IChpdGVtczogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSkgPT4ge1xuICAgIGl0ZW1zLmZvckVhY2goKHgpID0+IHtcbiAgICAgIGlmICh4Lm9uQ2hhbmdlRnVuYykgeC50cmlnZ2VyT25DaGFuZ2VPbkluaXQgPSB0cnVlO1xuICAgICAgZWxzZSBpZiAoeC50eXBlID09ICdidXR0b24nKSB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEoeC5jaGlsZHJlbik7XG4gICAgfSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaW5pdChzY2hlbWE6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm1zLnNldChbXSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyRm9ybS5jb250cm9scywga2V5KSkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ucmVtb3ZlQ29udHJvbChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIGlmIChzY2hlbWEpXG4gICAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWEpIHtcbiAgICAgICAgLy8gc2NoZW1lLmZvcm0gPSB0aGlzLmZvcm0gfHwgc2NoZW1lLmZvcm07XG4gICAgICAgIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgICAgfVxuICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb25CdXR0b25DbGljayhcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZvcm06IEZvcm1Hcm91cDxURm9ybUdyb3VwPixcbiAgICBlOiB7IGJ0bj86IEJ0bkNvbXBvbmVudDsgYWN0aW9uQnV0dG9uOiBJVGFibGVJbnB1dEJ0biB9LFxuICApIHtcbiAgICBlLmFjdGlvbkJ1dHRvbi5hY3Rpb24oeyBpbmRleCwgZm9ybSwgYnRuOiBlLmJ0biB9KTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGRlbGV0ZVJvd0NsaWNrZWQgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICByb3dGb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sXG4gICAgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9LFxuICApID0+IHtcbiAgICB0aGlzLmRlbGV0ZVJvd0Z1bmMoaW5kZXgsIHJvd0Zvcm0/LmdldFJhd1ZhbHVlKCksIGNvbmZpZyk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH07XG5cbiAgYWRkUm93Q2xpY2tlZCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5hZGRSb3dGdW5jKGluZGV4ICsgMSwgdGhpcy5maWx0ZXJGb3JtVmFsdWVTaWduYWwoKSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gICAgLy8gdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfTtcblxuICBjaGVja1JlcXVpcmVkRmllbGRzID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZSk7XG4gIH07XG5cbiAgb3ZlcnJpZGUgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElGb3JtU2NoZW1hKSB7XG4gICAgc2NoZW1lLmlkID0gdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKTtcbiAgICBpZiAoc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9PSBudWxsICYmICghc2NoZW1lLnZhbHVlRmllbGQgfHwgIXNjaGVtZS5sYWJlbEZpZWxkKSlcbiAgICAgIHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPSB0cnVlO1xuXG4gICAgaWYgKHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMpIHtcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgLy8gdGhpcy5vcHRpb25zTWFwW3NjaGVtZS5maWVsZF0gPSByO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzY2hlbWUuaXNTZWFyY2hGaWVsZCkge1xuICAgICAgdGhpcy5maWx0ZXJGb3Jtcy51cGRhdGUoKGZpbHRlckZvcm1zKSA9PiBmaWx0ZXJGb3Jtcy5jb25jYXQoW3NjaGVtZV0pKTtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKHNjaGVtZS5maWVsZD8udG9TdHJpbmcoKSwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgIH0gZWxzZSBpZiAoc2NoZW1lLnR5cGUgPT0gJ2J1dHRvbicpIHtcbiAgICAgIGlmIChzY2hlbWUuY2hpbGRyZW4/Lmxlbmd0aClcbiAgICAgICAgdGhpcy5jaGlsZHJlbkZvcm1TY2hlbWFNYXBbc2NoZW1lLmZpZWxkIGFzIHN0cmluZ10gPSB7XG4gICAgICAgICAgZm9ybVNjaGVtYTogc2NoZW1lLmNoaWxkcmVuLFxuICAgICAgICAgIGZvcm1TY2hlbWFTdHI6IHNjaGVtZS5jaGlsZHJlbi5tYXAoKHgpID0+IHguZmllbGQgYXMgc3RyaW5nKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2NoZW1lLmlzUmVxdWlyZWQgPVxuICAgICAgc2NoZW1lLmlzUmVxdWlyZWQgfHxcbiAgICAgICg8Rm9ybUdyb3VwPnRoaXMuc2luZ2xlRm9ybVN0cnVjdHVyZT8uY29udHJvbHNbc2NoZW1lLmZpZWxkXSk/Lmhhc1ZhbGlkYXRvcihcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVJbnB1dEJ0biBleHRlbmRzIElCdG4ge1xuICBhY3Rpb24/OiAoYXJnPzogeyBpbmRleDogbnVtYmVyOyBmb3JtOiBGb3JtR3JvdXA7IGJ0bjogQnRuQ29tcG9uZW50IH0pID0+IHZvaWQ7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtaW5wdXRcIj5cbiAgQGlmIChmaWx0ZXJGb3JtcygpPy5sZW5ndGgpIHtcbiAgICA8ZGl2IGNsYXNzPVwibWItMyB7eyBmaWx0ZXJDb250YWluZXJDbGFzcygpIH19XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgdGV4dD1cInt7IGZpbHRlclNlY3Rpb24uaGlkZGVuID8gJ1Nob3cgRmlsdGVyJyA6ICdIaWRlIEZpbHRlcicgfX1cIlxuICAgICAgICAgIFtpY29uXT1cImZpbHRlclNlY3Rpb24uaGlkZGVuID8gJ3NlYXJjaCcgOiAnY2xvc2UnXCJcbiAgICAgICAgICAobWNsaWNrKT1cImZpbHRlclNlY3Rpb24uaGlkZGVuID0gIWZpbHRlclNlY3Rpb24uaGlkZGVuXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciBwLTMgbXQtMyByb3VuZGVkLTEwXCIgI2ZpbHRlclNlY3Rpb24gW2hpZGRlbl09XCJ0cnVlXCI+XG4gICAgICAgIDxmb3JtLWdlbmVyYXRvclxuICAgICAgICAgIFtmb3JtXT1cImZpbHRlckZvcm1cIlxuICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZpbHRlckZvcm1zKClcIlxuICAgICAgICAgIFtncmlkTEdTdHlsZV09XCIzXCJcbiAgICAgICAgICBbc2hvd1N1Ym1pdEJ0bl09XCJmYWxzZVwiXG4gICAgICAgICAgKG1jaGFuZ2UpPVwicmVzZXRQYWdpbmF0b3IoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIChtY2xpY2spPVwiZmlsdGVyRm9ybS5yZXNldCgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiIFtuZ0NsYXNzXT1cInsgJ2JvcmRlciByb3VuZGVkLTEwJzogYm9yZGVyKCkgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCIgXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCIge3sgdGFibGVDbGFzcygpIH19IFwiIFtuZ0NsYXNzXT1cInsgJ2lzLXNob3ctZm9ybSc6IGlzU2hvdygpIH1cIj5cbiAgICAgICAgPHRoZWFkIChjbGljayk9XCJ1dGlsaXR5U2VydmljZS5sb2dGb3JtKGZpbHRlcmVkRm9ybUFycmF5KCkpXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZm9ybVNjaGVtYSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInt7IGl0ZW0uY2xzIH19XCIgKGNsaWNrKT1cImxvZ0NvbHVtbihpdGVtKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaXNSZXF1aXJlZCA/ICcqJyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Nob3coKSkge1xuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbkJ0biBvZiBhY3Rpb25CdG5zKCk7IHRyYWNrIGFjdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHN1YkZvcm0gb2YgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkoKTsgdHJhY2sgc3ViRm9ybS5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICB0YWJsZS1pbnB1dC1yb3dcbiAgICAgICAgICAgICAgKG9uQWRkUm93RnVuYyk9XCJhZGRSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2lzU2hvd109XCJpc1Nob3coKVwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cInN1YkZvcm0uZm9ybVwiXG4gICAgICAgICAgICAgIFthY3Rpb25CdG5zXT1cImFjdGlvbkJ0bnMoKVwiXG4gICAgICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZvcm1TY2hlbWEoKVwiXG4gICAgICAgICAgICAgIFtjaGlsZHJlbkZvcm1TY2hlbWFNYXBdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXCJcbiAgICAgICAgICAgICAgKG9uRGVsZXRlUm93RnVuYyk9XCJcbiAgICAgICAgICAgICAgICBkZWxldGVSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwge1xuICAgICAgICAgICAgICAgICAgYnRuOiAkZXZlbnQ/LmJ0blxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkFjdGlvbkJ1dHRvbkNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwgJGV2ZW50KVxuICAgICAgICAgICAgICBcIj48L3RyPlxuICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBbY29sU3Bhbl09XCJmb3JtU2NoZW1hKCk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIHt7ICdUaGVyZSBhcmUgbm8gaXRlbXMnIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiXCJcbiAgICAgIFtoaWRkZW5dPVwiXG4gICAgICAgICF1c2VQYWdpbmF0b3IoKSB8fCAhZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSB8fCBmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpIDwgcGFnZVNpemUoKVxuICAgICAgXCI+XG4gICAgICA8cGFnaW5hdG9yXG4gICAgICAgICNwYWdpbmF0b3JUYWdcbiAgICAgICAgW2FycmF5TGVuZ3RoXT1cImZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKClcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgW3Jlc2V0SW5kZXhGdW5jXT1cImZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUVSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0os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QixFQUFFLGFBQWEsQ0FBQzs4QkFxQjdCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsVUFBVTtnQkFNNEMsV0FBVztzQkFBdkUsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFPOUMsbUJBQW1CO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLaEIsYUFBYTtzQkFBckIsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNxQixhQUFhO3NCQUF2QyxLQUFLO3VCQUFDLGNBQWM7Z0JBdUJVLGtCQUFrQjtzQkFBaEQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHtcbiAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICBGb3JtVmFsdWVQaXBlLFxuICBGdW5jdGlvbkNhbGxlcjIsXG4gIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gIFRvQW55UGlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcblxuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBKc29uUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdGb3IsXG4gIE5nSWYsXG4gIE5nU3dpdGNoLFxuICBOZ1N3aXRjaENhc2UsXG4gIE5nU3dpdGNoRGVmYXVsdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgVGFibGVJbnB1dFJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtaW5wdXQtcm93L3RhYmxlLWlucHV0LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQnRuIH0gZnJvbSAnLi4vLi4vYnRuL2J0bi5tb2RlbCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgUGFnaW5hdG9yUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3BhZ2luYXRvci5waXBlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogVGFibGUgSW5wdXQgQ29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhYmxlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQnRuQ29tcG9uZW50LFxuICAgIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZvcm1WYWx1ZVBpcGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBKc29uUGlwZSxcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNb2RhbENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgUGFnaW5hdG9yUGlwZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRhYmxlSW5wdXRSb3dDb21wb25lbnQsXG4gICAgVG9BbnlQaXBlLFxuICAgIFNES1RyYW5zbGF0ZVBpcGUsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsIFBhZ2luYXRvclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUlucHV0Q29tcG9uZW50PFxuICAgIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgICB9ID0gYW55LFxuICA+XG4gIGV4dGVuZHMgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBsb2dDb2x1bW4oX3QyMDogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD4pIHtcbiAgICBjb25zb2xlLmxvZyhfdDIwKTtcbiAgfVxuICByZWFkb25seSBmb3JtQXJyYXkgPSBpbnB1dDxGb3JtQXJyYXk8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pj4oKTtcblxuICByZWFkb25seSBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGZpbHRlckxpa2VNYXRjaCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIC8vIHJlYWRvbmx5IF9maWx0ZXJFeGFjdE1hdGNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSwgeyBhbGlhczogJ2ZpbHRlckV4YWN0TWF0Y2gnIH0pO1xuICByZWFkb25seSBmaWx0ZXJFeGFjdE1hdGNoID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gKHRoaXMuZmlsdGVyTGlrZU1hdGNoKCkgPyBmYWxzZSA6IHRydWUpKTtcbiAgcmVhZG9ubHkgaXNTaG93ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgQElucHV0KCdwYWdlU2l6ZScpIHNldCBfcGFnZVNpemUodjogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlU2l6ZS5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgcGFnZVNpemUgPSBzaWduYWw8bnVtYmVyPigxMCk7XG4gIHJlYWRvbmx5IHBhZ2VTdGF0ZSA9IHNpZ25hbDx7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0+KG51bGwpO1xuICByZWFkb25seSBhY3Rpb25CdG5zID0gaW5wdXQ8SVRhYmxlSW5wdXRCdG5bXT4oKTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAnZm9ybVNjaGVtYScgfSkgb3ZlcnJpZGUgc2V0IF9mb3JtU2NoZW1hKFxuICAgIHY6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10sXG4gICkge1xuICAgIHRoaXMucHJlRm9ybWF0Rm9ybVNjaGVtYSh2KTtcbiAgICBzdXBlci5fZm9ybVNjaGVtYSA9IHY7XG4gIH1cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgc2luZ2xlRm9ybVN0cnVjdHVyZTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+O1xuICAvKipcbiAgICogTGVhdmUgZW1wdHkgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRlbGV0ZSBidXR0b24gdG8gc2hvd1xuICAgKi9cbiAgQElucHV0KCkgZGVsZXRlUm93RnVuYzogKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF0YT86IEZvcm1Hcm91cDxURm9ybUdyb3VwPlsndmFsdWUnXSxcbiAgICBjb25maWc/OiB7IGJ0bjogQnRuQ29tcG9uZW50IH0sXG4gICkgPT4gYW55O1xuICAvKipcbiAgICogTGVhdmUgZW1wdHkgaWYgeW91IGRvbid0IHdhbnQgdGhlIGFkZCBidXR0b24gdG8gc2hvd1xuICAgKi9cbiAgQElucHV0KCkgYWRkUm93RnVuYzogKGluZGV4OiBudW1iZXIsIGRhdGE/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ3ZhbHVlJ10pID0+IGFueTtcbiAgQElucHV0KCd1c2VQYWdpbmF0b3InKSBzZXQgX3VzZVBhZ2luYXRvcih2OiBib29sZWFuKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMudXNlUGFnaW5hdG9yLnNldCh0cnVlKTtcbiAgICAgIHRoaXMucGFnZVNpemUudXBkYXRlKChwYWdlU2l6ZSkgPT4gcGFnZVNpemUgfHwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZVBhZ2luYXRvci5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5wYWdlU2l6ZS5zZXQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSB0YWJsZUNsYXNzID0gaW5wdXQ8c3RyaW5nPigndGFibGUgdGFibGUtcmVzcG9uc2l2ZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLWJvcmRlcmxlc3MnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlckZvcm1zID0gc2lnbmFsPElGb3JtU2NoZW1hW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHVzZVBhZ2luYXRvciA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGNoaWxkcmVuRm9ybVNjaGVtYU1hcDoge1xuICAgIFtrIGluIGtleW9mIFRGb3JtR3JvdXBdPzoge1xuICAgICAgZm9ybVNjaGVtYTogSUZvcm1TY2hlbWFbXTtcbiAgICAgIGZvcm1TY2hlbWFTdHI6IHN0cmluZ1tdO1xuICAgIH07XG4gIH0gPSB7fTtcbiAgcmVmcmVzaGVyOiBudW1iZXI7XG4gIGZvcm1BcnJheVBhZ2luYXRpb25TdWI6IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKFBhZ2luYXRvckNvbXBvbmVudCkgcGFnaW5hdG9yQ29tcG9uZW50OiBQYWdpbmF0b3JDb21wb25lbnQ7XG5cbiAgcmVhZG9ubHkgZmlsdGVyRm9ybVZhbHVlU2lnbmFsID0gdG9TaWduYWwodGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcyk7XG4gIHJlYWRvbmx5IGZvcm1BcnJheUxlbmd0aFNpZ25hbCA9IHRvU2lnbmFsPG51bWJlcj4oXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuZm9ybUFycmF5KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChmb3JtKSA9PiBmb3JtPy52YWx1ZUNoYW5nZXMucGlwZShtYXAoKCkgPT4gZm9ybT8ubGVuZ3RoKSkpLFxuICAgICksXG4gICk7XG5cbiAgcmVhZG9ubHkgZm9ybUFycmF5SW5kZXhlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmZvcm1BcnJheUxlbmd0aFNpZ25hbCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm1BcnJheSgpPy5jb250cm9scz8ubWFwKChjLCBpbmRleCkgPT4gKHtcbiAgICAgIGluZGV4LFxuICAgICAgZm9ybTogYyxcbiAgICAgIGlkOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpLFxuICAgIH0pKTtcbiAgfSk7XG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuZm9ybUFycmF5TGVuZ3RoU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwcyA9IHRoaXMuZm9ybUFycmF5SW5kZXhlZCgpLFxuICAgICAgZmlsdGVyRm9ybVZhbHVlID0gdGhpcy5maWx0ZXJGb3JtVmFsdWVTaWduYWwoKTtcblxuICAgIGNvbnN0IGZpbHRlck9iamVjdCA9IHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLnF1ZXJ5TWFwcGVyKGZpbHRlckZvcm1WYWx1ZSk7XG4gICAgcmV0dXJuIGZpbHRlck9iamVjdFxuICAgICAgPyBmb3JtR3JvdXBzLmZpbHRlcigoeyBmb3JtIH0pID0+XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUuZmlsdGVyRnVuYyhmaWx0ZXJPYmplY3QsIHRoaXMuZmlsdGVyRXhhY3RNYXRjaCgpKShmb3JtKSxcbiAgICAgICAgKVxuICAgICAgOiBmb3JtR3JvdXBzO1xuICB9KTtcbiAgcmVhZG9ubHkgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLFxuICAgICAgcGFnZVN0YXRlID0gdGhpcy5wYWdlU3RhdGUoKTtcbiAgICByZXR1cm4gdGhpcy51c2VQYWdpbmF0b3IoKVxuICAgICAgPyB0aGlzLnBhZ2luYXRvclBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgIGZvcm1BcnJheSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemUoKSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VJbmRleCB8fCAwLFxuICAgICAgICApXG4gICAgICA6IGZvcm1BcnJheTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlcmVkRm9ybUFycmF5KCkubGVuZ3RoKTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlID0gaW5qZWN0KEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSk7XG4gIHB1YmxpYyBwYWdpbmF0b3JQaXBlID0gaW5qZWN0KFBhZ2luYXRvclBpcGUpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZVBhZ2luYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VzZVBhZ2luYXRvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVmcmVzaGVyID0gTWF0aC5yYW5kb20oKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvcm1BcnJheVBhZ2luYXRpb25TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgcGFnZUNoYW5nZWQoJGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnBhZ2VTdGF0ZS5zZXQoJGV2ZW50KTtcbiAgfVxuXG4gIHJlc2V0UGFnaW5hdG9yKCkge1xuICAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py5yZXNldCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZUZvcm1hdEZvcm1TY2hlbWEgPSAoaXRlbXM6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pID0+IHtcbiAgICBpdGVtcy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICBpZiAoeC5vbkNoYW5nZUZ1bmMpIHgudHJpZ2dlck9uQ2hhbmdlT25Jbml0ID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKHgudHlwZSA9PSAnYnV0dG9uJykgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHguY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9O1xuXG4gIG92ZXJyaWRlIGluaXQoc2NoZW1hOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3Jtcy5zZXQoW10pO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlckZvcm0uY29udHJvbHMsIGtleSkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoc2NoZW1hKVxuICAgICAgZm9yIChjb25zdCBzY2hlbWUgb2Ygc2NoZW1hKSB7XG4gICAgICAgIC8vIHNjaGVtZS5mb3JtID0gdGhpcy5mb3JtIHx8IHNjaGVtZS5mb3JtO1xuICAgICAgICB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICAgIH1cbiAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2soXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sXG4gICAgZTogeyBidG4/OiBCdG5Db21wb25lbnQ7IGFjdGlvbkJ1dHRvbjogSVRhYmxlSW5wdXRCdG4gfSxcbiAgKSB7XG4gICAgZS5hY3Rpb25CdXR0b24uYWN0aW9uKHsgaW5kZXgsIGZvcm0sIGJ0bjogZS5idG4gfSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBkZWxldGVSb3dDbGlja2VkID0gKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcm93Rm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LFxuICAgIGNvbmZpZz86IHsgYnRuOiBCdG5Db21wb25lbnQgfSxcbiAgKSA9PiB7XG4gICAgdGhpcy5kZWxldGVSb3dGdW5jKGluZGV4LCByb3dGb3JtPy5nZXRSYXdWYWx1ZSgpLCBjb25maWcpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICB9O1xuXG4gIGFkZFJvd0NsaWNrZWQgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYWRkUm93RnVuYyhpbmRleCArIDEsIHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCkpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICAgIC8vIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH07XG5cbiAgY2hlY2tSZXF1aXJlZEZpZWxkcyA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmUpO1xuICB9O1xuXG4gIG92ZXJyaWRlIGhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lOiBJRm9ybVNjaGVtYSkge1xuICAgIHNjaGVtZS5pZCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCk7XG4gICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpXG4gICAgICBzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID0gdHJ1ZTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jKSB7XG4gICAgICBzY2hlbWUub3B0aW9uc0luaXRGdW5jLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICBzY2hlbWUub3B0aW9ucyA9IHI7XG4gICAgICAgIC8vIHRoaXMub3B0aW9uc01hcFtzY2hlbWUuZmllbGRdID0gcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2NoZW1lLmlzU2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybXMudXBkYXRlKChmaWx0ZXJGb3JtcykgPT4gZmlsdGVyRm9ybXMuY29uY2F0KFtzY2hlbWVdKSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChzY2hlbWUuZmllbGQ/LnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtZS50eXBlID09ICdidXR0b24nKSB7XG4gICAgICBpZiAoc2NoZW1lLmNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgIHRoaXMuY2hpbGRyZW5Gb3JtU2NoZW1hTWFwW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0ge1xuICAgICAgICAgIGZvcm1TY2hlbWE6IHNjaGVtZS5jaGlsZHJlbixcbiAgICAgICAgICBmb3JtU2NoZW1hU3RyOiBzY2hlbWUuY2hpbGRyZW4ubWFwKCh4KSA9PiB4LmZpZWxkIGFzIHN0cmluZyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNjaGVtZS5pc1JlcXVpcmVkID1cbiAgICAgIHNjaGVtZS5pc1JlcXVpcmVkIHx8XG4gICAgICAoPEZvcm1Hcm91cD50aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmU/LmNvbnRyb2xzW3NjaGVtZS5maWVsZF0pPy5oYXNWYWxpZGF0b3IoXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSW5wdXRCdG4gZXh0ZW5kcyBJQnRuIHtcbiAgYWN0aW9uPzogKGFyZz86IHsgaW5kZXg6IG51bWJlcjsgZm9ybTogRm9ybUdyb3VwOyBidG46IEJ0bkNvbXBvbmVudCB9KSA9PiB2b2lkO1xufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWlucHV0XCI+XG4gIEBpZiAoZmlsdGVyRm9ybXMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMge3sgZmlsdGVyQ29udGFpbmVyQ2xhc3MoKSB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgIHRleHQ9XCJ7eyBmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdTaG93IEZpbHRlcicgOiAnSGlkZSBGaWx0ZXInIH19XCJcbiAgICAgICAgICBbaWNvbl09XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdzZWFyY2gnIDogJ2Nsb3NlJ1wiXG4gICAgICAgICAgKG1jbGljayk9XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA9ICFmaWx0ZXJTZWN0aW9uLmhpZGRlblwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcC0zIG10LTMgcm91bmRlZC0xMFwiICNmaWx0ZXJTZWN0aW9uIFtoaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8Zm9ybS1nZW5lcmF0b3JcbiAgICAgICAgICBbZm9ybV09XCJmaWx0ZXJGb3JtXCJcbiAgICAgICAgICBbZm9ybVNjaGVtYV09XCJmaWx0ZXJGb3JtcygpXCJcbiAgICAgICAgICBbZ3JpZExHU3R5bGVdPVwiM1wiXG4gICAgICAgICAgW3Nob3dTdWJtaXRCdG5dPVwiZmFsc2VcIlxuICAgICAgICAgIChtY2hhbmdlKT1cInJlc2V0UGFnaW5hdG9yKClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiAobWNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGVcIiBbbmdDbGFzc109XCJ7ICdib3JkZXIgcm91bmRlZC0xMCc6IGJvcmRlcigpIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiIFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiIHt7IHRhYmxlQ2xhc3MoKSB9fSBcIiBbbmdDbGFzc109XCJ7ICdpcy1zaG93LWZvcm0nOiBpc1Nob3coKSB9XCI+XG4gICAgICAgIDx0aGVhZCAoY2xpY2spPVwidXRpbGl0eVNlcnZpY2UubG9nRm9ybShmaWx0ZXJlZEZvcm1BcnJheSgpKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7eyBpdGVtLmNscyB9fVwiIChjbGljayk9XCJsb2dDb2x1bW4oaXRlbSlcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmlzUmVxdWlyZWQgPyAnKicgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaXNTaG93KCkpIHtcbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICBAZm9yIChhY3Rpb25CdG4gb2YgYWN0aW9uQnRucygpOyB0cmFjayBhY3Rpb25CdG4pIHtcbiAgICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChzdWJGb3JtIG9mIHBhZ2luYXRlZEFuZEZpbHRlcmVkRm9ybUFycmF5KCk7IHRyYWNrIHN1YkZvcm0uaWQ7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgdGFibGUtaW5wdXQtcm93XG4gICAgICAgICAgICAgIChvbkFkZFJvd0Z1bmMpPVwiYWRkUm93Q2xpY2tlZChzdWJGb3JtLmluZGV4KVwiXG4gICAgICAgICAgICAgIFtpc1Nob3ddPVwiaXNTaG93KClcIlxuICAgICAgICAgICAgICBbZm9ybV09XCJzdWJGb3JtLmZvcm1cIlxuICAgICAgICAgICAgICBbYWN0aW9uQnRuc109XCJhY3Rpb25CdG5zKClcIlxuICAgICAgICAgICAgICBbZm9ybVNjaGVtYV09XCJmb3JtU2NoZW1hKClcIlxuICAgICAgICAgICAgICBbY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXT1cImNoaWxkcmVuRm9ybVNjaGVtYU1hcFwiXG4gICAgICAgICAgICAgIChvbkRlbGV0ZVJvd0Z1bmMpPVwiXG4gICAgICAgICAgICAgICAgZGVsZXRlUm93Q2xpY2tlZChzdWJGb3JtLmluZGV4LCBzdWJGb3JtLmZvcm0sIHtcbiAgICAgICAgICAgICAgICAgIGJ0bjogJGV2ZW50Py5idG5cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAob25BY3Rpb25CdXR0b25DbGljayk9XCJcbiAgICAgICAgICAgICAgICBoYW5kbGVBY3Rpb25CdXR0b25DbGljayhzdWJGb3JtLmluZGV4LCBzdWJGb3JtLmZvcm0sICRldmVudClcbiAgICAgICAgICAgICAgXCI+PC90cj5cbiAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCIgW2NvbFNwYW5dPVwiZm9ybVNjaGVtYSgpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICB7eyAnVGhlcmUgYXJlIG5vIGl0ZW1zJyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlwiXG4gICAgICBbaGlkZGVuXT1cIlxuICAgICAgICAhdXNlUGFnaW5hdG9yKCkgfHwgIWZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKCkgfHwgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSA8IHBhZ2VTaXplKClcbiAgICAgIFwiPlxuICAgICAgPHBhZ2luYXRvclxuICAgICAgICAjcGFnaW5hdG9yVGFnXG4gICAgICAgIFthcnJheUxlbmd0aF09XCJmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemUoKVwiXG4gICAgICAgIFtyZXNldEluZGV4RnVuY109XCJmaWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=